Отучившись на Хекслете чуть больше месяца, я наделал кучу ошибок, написал немало очень странных строк кода, но и дошел до некоторых довольно полезных вещей. Глядя на задания, над которыми я мучился пару недель назад, мне немного смешно и немного стыдно, как этого можно было не понимать, и почему я решил это так странно.
Сейчас я так же мучаюсь уже над другими задачками, и надеюсь через некоторое время так же буду недоумевать, как я мог этого не понимать. Это хорошо, когда так происходит, это - прогресс.
Сейчас я хочу рассказать о некоторых простых идеях, до которых я хотел бы додуматься пораньше, и о некоторых элементарных ошибках, которые многие начинающие (и я в том числе) тем не менее допускают.
Итак, полезная идея номер один - помогать другим студентам. Это очень полезно в первую очередь для самого помогающего. Хекслет устроен таким образом, что нельзя просмотреть ревью кода по темам, которые у вас еще не изучены, таким образом спойлеров можно не бояться. А выискивая ошибки в коде других людей по уже изученным темам, я во-первых повторяю пройденный материал, во-вторых тренируюсь читать чужой код, в-третьих вижу разные способы решить одну и ту же задачу и учусь смотреть на вещи под разными углами, в-четвертых имею возможность учится на чужих ошибках (когда несколько раз увидел в чужом коде одну и ту-же ошибку, в своём её увидишь быстрее), и в-пятых помогаю людям, зарабатываю плюсы в карму)) И получить все эти преимущества совсем не сложно, каждый раз с одной и той же проблемой разбираться получается все быстрее и быстрее.
Итак, если кто ещё не заглядывал в раздел "Вопросы и ответы", крайне рекомендую.
Полезная идея номер два — это научится вовремя отвлекаться. Изучать программировние увлекательно. Несколько раз я просто умирал на работе, потому что пол ночи просидел за задачей и на сон осталось два или три часа. Но глаз замыливается, мозг забивается, и если вовремя не переключить внимание, эффективность неизбежно падает. Так вот, изучение программирования требует обладания множеством смежных навыков: математика (алгоритмы), английский, линукс, СУБД, — список можно продолжать долго. И когда на очередном задании нападает затуп, лично мне очень помогает на день или два отложить курс программирования и заняться одной из смежных областей знания. Вернувшись, как правило обнаруживаешь, что решение довольно очевидно, и скорость обучения возвращается к изначальному уровню.
Ну и напоследок хочу изложить несколько ошибок, которые я неоднократно видел как у себя, так и у других:
- Пограничные случаи. Так устроен человеческий разум, что решая задачу, мы подсознательно ожидаем, что входные данные будут адекватны задаче, т. е. только такие, при которых задача имеет решение. Перебороть это бывает крайне сложно. Мне уменьшить количество таких ошибок помогает такой психологический трюк. Когда мне кажется что я все уже решил, я представляю, что мне нужно передать свое решение для использования клиническому идиоту, я оглядываю код и пытаюсь найти, что этот идиот может сломать. Как правило ломаемые места находятся без проблем.
- Скобки. Серьёзно, ошибка детская, находится и исправляется легко, но зачем тратить на это время? Я лично предпочитаю сначала расставить скобки потом писать код. Может вкусовщина, но мне так легче. А на вопросах и ответах постоянно попадаются случаи, когда из-за забытых фигурных скобок export попадает в тело функции.
- Операторы сравнения. Поставить к примеру x < y вместо x <= y, это очень частое дело для новичка. Я чтобы такого не допускать, где это возможно без потери простоты понимания предпочту поставить x < y + 1. По-моему так сложнее запутаться по невнимательности. Но это опять же ИМХО.
- Возврат функции. Надо как отче наш запомнить, что функция что-то вернет В ЛЮБОМ СЛУЧАЕ, и если не учесть возврат для какого-то случая, функция вернет null или undefinded, или еще что нибудь)) Если вам это не нужно, можно запросто получить неприятностей... Об этом нужно просто помнить.
- Велосипеды. Если есть нужда сделать какую нибудь банальную штуку, а знание языка програмирования еще не очень твердое, всегда будет хорошей идеей проверить, нет ли на этот случай стандартной библиотеки. Иначе есть хорошая вероятность почувствовать себя идиотом, поняв что это можно было не делать, а воспользоваться готовым и как правило более качественным инструментом.
В общем, пока это все, что могу вспомнить слету, если кому пригодится, буду рад, если будет что еще сказать, напишу ещё. Всем успехов в обучении и поменьше глупых ошибок.