Как перейти с начального уровня на средний?
Типичный вопрос, который мы получаем от многих новичков, — «что дальше?» В частности, когда они пытались проработать какие-то уроки, пособия, курсы, но в итоге всё равно не смогли заполнить пробел между пониманием, как работает оператор if или цикл for, и как именно применять то, что они изучили, чтобы создать сложные и интересные программы.
Переходить от обучающих материалов к сложному коду может быть затруднительно, и это обычное дело для тех, кто учится кодить. Такое явление очень хорошо описано в этой статье. Многие курсы (особенно коммерциализированные сайты по, обучающие программированию, вроде CodeAcademy) помогают тщательно разобраться с основами, но на этом завершаются, а новички остаются топтаться на месте.
Но если не сдаваться и преодолеть замешательство, вы начнёте замечать, что постепенно становитесь всё лучше и лучше, пока однажды не поймёте, что, сами того не осознавая, уже начали выходить на новый уровень.
Вот несколько советов, как не сдаваться и что делать дальше.
Перейдите с пассивного обучения на активное
Вместо того, чтобы брать курсы и уроки, которые (как вы думаете) научат вас тому, чему вы хотите научиться, начните активно искать способы обучиться самостоятельно. Например, если вы понятия не имеете, как создать игру, загуглите «как написать игру на Х», где «Х» — это язык программирования, который вы собрались использовать. Если у вас всплыло сообщение об ошибке, которая вам незнакома, попробуйте загуглить её. Если вы хотите освоить машинное обучение — погуглите и найдите годную книгу, пособие или онлайн-курс.
Вам будут нередко попадаться учебные пособия, разъясняющие, что именно вам следует делать, или по крайней мере статьи, которые дадут общее представление и подсказки о том, как составить более точные поисковые запросы. Тем более, нет ничего стыдного в том, чтобы искать источники новых знаний — как раз наоборот. Все программисты, как начинающие, так и профессиональные, постоянно делают две вещи: гуглят и учатся.
Постоянно практикуйтесь
Программирование похоже на физические упражнения в том смысле, что стать лучше можно только если непрерывно тренироваться. Начните с малого и попробуйте написать простейшую игру вроде «камень-ножницы-бумага» в командной строке. Когда закончите, попробуйте взяться за более смелый проект и справьтесь с ним. При желании параллельно можете выполнить какие-либо упражнения по программированию.
Главная цель программирования — разработка прикладного решения задач, а лучший способ научиться этому — постоянно решать задачи, большие и маленькие.
(См. также ЧаВо: Где можно найти тренировочные упражнения и идеи для проектов и ЧаВо: Я не могу придумать классную идею для проекта. Мне просто не хватает креативности? Как другие программисты ищут вдохновение?)
Научитесь декомпозировать задачу
Пытаясь справиться с крупным проектом или задачей, прийти в отчаяние можно уже от того, насколько большими и устрашающими они выглядят. Вместо того, чтобы унывать, разбивайте задачу на всё более мелкие подзадачи (это называется декомпозиция), пока каждая отдельная подзадача не начнёт казаться вполне подъёмной и осуществимой.
Допустим, вы хотите создать игру «камень-ножницы-бумага». Её можно разделить её на несколько подзадач: как получить вводные данные от пользователя, как заставить компьютер сделать случайный выбор, как определить победителя и как повторить игру (если вы хотите играть несколько раз подряд).
Если вы не уверены, как решить каждую из этих подзадач, продолжайте разбивать их дальше. Например, если вы не знаете, как определить победителя, то можете выделить ещё больше подзадач: как определить ничью, как определить вашу победу (если вы выбираете камень), как определить вашу победу (если вы выбираете бумагу) и как определить вашу победу (если вы выбираете ножницы).
Если вы совсем не знаете, как сделать что-то (например, как заставить компьютер выбрать случайное значение), погуглите. В данном примере поиск «Х выбрать случайное значение» (где Х — используемый язык программирования) покажет несколько различных способов, которые вы сможете использовать. Иногда задачу получается разбить на множество частей без поисковика, а иногда без него не обойтись.
Так, если вы учите Java и хотите научиться писать игры, но понятия не имеете, с чего начать или как разбить задачу на составляющие, загуглите «java игры уроки». Поиск даст несколько хороших источников, которые научат вас писать игры и (обычно автоматически) разбивать процесс написания игры на подзадачи поменьше.
По сути, этим вы прививаете себе образ мышления разработчика. Если задача слишком сложная, не расстраивайтесь. Продолжайте разбивать её на всё более простые составляющие и исследуйте вещи, которые кажутся неделимыми. Потом снова по кругу: разбиваете, гуглите, разбиваете, гуглите…
Это достаточно эффективная стратегия самообучения. С практикой вы станете лучше понимать, как раскладывать задачи, а также расширите свой багаж знаний и запас возможных способов их решения.
Больше советов смотрите в ЧаВо: Как улучшить навык реализовывать задачи/задания в программах (алгоритмическое мышление).
Будьте систематичны
Когда вы пишите и отлаживаете код, ни в коем случае не привыкайте просто пробовать сделать что-то, рассчитывая, что это случайно сработает. Будьте максимально чётки и последовательны — метод «проб и ошибок» здесь не подойдёт.
Во время написания кода остановитесь на минуту и составьте на листе бумаги приблизительные план действий. Попробуйте нарисовать какие-то схемы или набросать что-то вроде псевдокода. Если вам придётся изменить свой план (что вы, скорее всего, и сделаете), подумайте, для чего вам нужно это изменение и каким будет ваш новый план действий. (Этот этап планирования — также подходящая возможность, чтобы потренироваться декомпозировать задачи!)
Во время отладки кода ставьте чётки цели. Попробуйте мыслить, как учёный: проводите эксперименты, чтобы либо попытаться исправить баг, либо сузить область его поиска, и запишите результаты. Если ваша догадка/предпринятая попытка оказалась неверной или произошло что-то, чего вы не предусмотрели, остановитесь и разберитесь, в чём причина. Можете фиксировать эксперименты и тесты в блокноте, если это поможет вам придерживаться плана.
Баги возникают тогда, когда ваши предположения не совпадают с реальностью. Если что-то кажется неправильным, не игнорируйте это: продолжайте искать, пока не выясните, в чём дело/какое из ваших предположений было неверным.
Не делайте что попало, пока что-нибудь не сработает — будьте последовательны.
Не расстраивайтесь, если приходится исправлять баги или гуглить
Не все новички понимают, что проводить большую часть времени за исправлением багов и поиском информации — абсолютно нормально даже для профессиональных программистов.
Отладка (и трудности!) — неотъемлемая часть программирования. Если получится, постарайтесь не отчаиваться и не злиться. Отнеситесь к этому как к занимательному квесту или головоломке.
Даже когда из-за бага вы не можете продолжать работу над самим кодом, если вы будете последовательны, то в любом случае хорошо потренируете навык декомпозиции задач, хоть и несколько другим образом.
В конечном итоге, даже если у вас уйдёт много часов на один-единственный баг, это время будет потрачено не зря. Отладка — один из лучших способов научиться решать задачи.
(Это станет ещё вернее по мере того, как вы будете приобретать всё больше опыта. В жизни с ростом вашей компетентности сложность багов, с которыми вы будете сталкиваться, будет только увеличиваться. Иногда даже опытным программистам приходится тратить месяцы на то, чтобы найти один особенно проблемный баг.)
Не бойтесь попросить помощи
И наконец, если вы совсем не можете сдвинуться с места и понятия не имеете, что делать дальше, не стесняйтесь обратиться за помощью!
Программисты в основном очень отзывчивы. Многие из нас — тоже самоучки и понимают, как трудно начинать и каково это, когда ты безнадёжно застрял.
Всё же сначала постарайтесь сделать всё возможное (декомпозировать задачу, отладить код, погуглить и т.д.) и хорошо продумайте ваш пост. Как и любая другая субкультура, среди программистов есть свои негласные правила и порядки. Одна из ключевых вещей — вопрос должен быть доходчиво описан (даже если это что-то элементарное).
Больше информации читайте в руководстве о том, как задавать вопросы на reddit.
Пройдите более интенсивный вводный курс
Этот пункт касается только тех, кто лишь поверхностно знакомился с программированием на вводных курсах вроде тех, что предлагает CodeCademy. Подобные сайты дают отличное представление о том, что такое программирование, и обучают некоторым основам, но могут быть почти бесполезны, если вы хотите продвинуться на средний уровень.
Железное правило: если вводные курсы по программированию, которые вы проходили, не вызвали у вас особых трудностей или не содержали заданий, упражнений и мини-проектов, вам нужно поискать более требовательные курсы. Постоянная практика (и трудности!) — неотъемлемая часть учебного процесса.
Хорошо обдумаете это правил, ведь понятие программирование очень сложно в использовании.
Желаю успехов и удачи в начинании!!!