Манифест по изучению программирования

Текст написан по мотивам моего опыта: я работал 6 лет программистом в разных командах разработчиков, 10 лет преподавателем в школе, 3 года автором в школе онлайн курсов.

Мы привыкли к обучению по принципу: смотри сюда и повторяй за мной. Обычно так обучают в школах. Такой подход перестает работать классу к восьмому. Ученики задают себе вопрос: зачем делать то, что не приносит удовольствия? В школе пытаются «вбивать» знания в каждого, независимо от его желания. Но обучение неэффективно без главного условия: ученик должен принимать самое активное участие в получении знаний.

Освоить IT-профессию невозможно без тысяч часов самостоятельного решения задач.

Обучение после школы — неважно, в колледже, вузе, на курсах или даже у личного ментора (обратите внимание!) — подразумевает по большей части самостоятельное освоение и проработку материала.

Роль преподавателя (ментора) сводится к следующему:

  • систематизация учебной программы, построение плана: от простого к сложному
  • помощь при затруднениях
  • указание на ошибки
  • подпитывание мотивации
  • моральная поддержка

Всю остальную работу учащийся выполняет сам.

Обучение — это на 80% самостоятельная работа. Потенциально успешный программист мне виден уже после выполнения первых домашних заданий: его решения основаны не только на материале, который разбирали на занятии в группе, но и на дополнительных сведениях, найденных самостоятельно.

Хочу выделить 4 принципа изучения программирования, которые по моему опыту работают.

1. В первую очередь тренируйте базовые навыки
В программировании (как, впрочем, и в других отраслях) существуют базовые вещи, и первое, на чем нужно сосредоточиться — доведение базовых навыков до автоматизма. Когда ваш мозг не расходует много времени на обращение с базовыми понятиями, вы способны действовать продуктивно и адекватно решать задачи. Азбуку нужно знать твердо, тогда скорость обучения и работы будет высокой. Каждый следующий уровень знаний ложится поверх предыдущего и содержит все меньше принципиально новой информации, поскольку опирается на усвоенные знания.
Именно поэтому наши курсы содержат так много задач.

2. Пишите код
В памяти надежно сохраняется только то, что мы подкрепляем собственными действиями, опытом. Так устроен мозг. Когда читаем чужой код или смотрим видеолекцию, часто все настолько понятно, что кажется: “Зачем мне это повторять, ведь все ясно”. Это иллюзия! Стоит попытаться повторить логику, написать код своими руками, как тут же столкнемся с кучей сложностей и непонятных вещей, которые не удастся разрешить без подсказок. Копирование чужого кода тоже не способствует глубокому пониманию и усвоению навыка.

Нужно как можно больше разбираться с кодом и самостоятельно писать программы. В идеале — работать над собственным проектом, пусть это будет даже калькулятор. Можно создать крутой калькулятор и при этом повторить (освежить в памяти) множество тем, начиная от переменных и заканчивая лямбда-функциями. И не старайтесь делать всё идеально, достаточно просто хорошо. Мы растем, и то, что сегодня хорошо, успеем в будущем сделать идеальным (если это кому-нибудь нужно).

Чтение книг и просмотр лекций — хорошо, но без использования теории на практике мы не учимся.

3. Занимайтесь регулярно
Рекомендую уделять учебе каждый день по 2-3 часа (можно и больше). Это полезнее, чем 10-часовой интенсив раз в неделю.
Нерегулярные занятия абсолютно неэффективны, потому что навыки не закрепляются, знания рассеиваются, про мотивацию и говорить не приходится.

Важно выработать привычку учиться постоянно.

4. Вам должно быть непонятно
Звучит странно, правда? Если вам что-то непонятно и вы тупите, это абсолютно нормально. Не нужно в такой ситуации считать себя недостаточно умным и неспособным изучить программирование. Думаете Senior программисты не тупят? Еще как. Они могут не сразу что-то понять, но не сдаются и изучают вопрос глубже! Даже очень опытные, матерые программисты часто не могут разобраться с чем-то новым. Они не стесняются обращаться за помощью. Но! Здесь есть одно важное “но”. Спрашивать нужно только после того, как с десяток раз попытаетесь разрешить проблему сами.

Классический вопрос на форуме наших курсов: “Что не так с моей программой?” Открываю проблемный код, запускаю программу, сразу выдается ошибка с расшифровкой. Интересно, человек, который задал вопрос, пытался запустить СВОЮ программу? Явно нет. Такой подход не позволит стать хорошим программистом. Задавая вопрос на форуме или в комментариях, нужно уточнять, что конкретно вы уже предприняли для решения, какие ваши шаги оказались безуспешными.

Многие темы наших курсов — например, элементы функционального программирования, анонимные функции, функции высшего порядка, итераторы, генераторы — не самые простые вещи. Требуется время и труд, чтобы эта информация уложилась в голове.

Если кажется, что учиться программированию легко, значит, вы не учитесь.

О себе

Если думаете, что мне было легко изучить программирование, то глубоко заблуждаетесь. Я стартовал достаточно поздно по меркам программистов, аж на первом курсе ВУЗа. С преподавателем повезло (Мария Макаренко, здрасте). Было тяжело, как сейчас помню, даже вложенные циклы понять, а про рекурсию вообще молчу. Однажды поймал себя на мысли: “А может быть, не твое это — программирование? Ну математик и математик, раз рекурсию не можешь понять”. Но я не сдался, отложил непонятное в дальний ящик, и дальше изучал программирование. Когда в следующий раз вернулся к рекурсии, был приятно удивлен: понял как она работает и мог решить практически любую задачу на эту тему. Какой вывод? Не сдавайтесь! Если что-то непонятно, читайте книги, читайте интернет (в мое время информации было намного меньше, чем сейчас), пишите код, реализуйте проекты. Отложите сложное, чтобы рассмотреть еще раз позже, при этом работайте над собой, развивайтесь. Всегда можно вернуться с новыми знаниями, силами, умениями. Вы будете приятно удивлены. Поверьте мне.

Вывод

Никакой курс (даже наши курсы 😢) не сделают из вас программиста без самообразования. Курсы — лишь способ достижения этой цели. Они могут сделать путь к успеху удобнее и быстрее.

Цель образовательных курсов — сделать процесс обучения проще и эффективнее. Но никто в мире не сможет учиться за вас.

Тимур Гуев, автор курсов “Поколение Python”