Почему моя траектория обучения программированию отражает мой тренировочный режим в качестве бегуна

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

Нет ничего быстрого в обучении программированию, по крайней мере, по моему опыту. Не только нужно время, чтобы изучить - и по-настоящему понять - огромное количество задействованного материала. Но также нужно время, чтобы научиться думать как программист.

Вот почему я считаю обучение программированию видом спорта на выносливость. Как бывший бегун на длинные дистанции, это одна из причин, почему мне это так нравится. Фактически, моя траектория обучения программированию отражает мой тренировочный режим как бегуна. Речь идет о том, чтобы иметь план, устанавливать устойчивый темп и настойчиво.

Создайте выносливость с планом

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

Я усвоил урок и использовал тренировочный план для каждой последующей гонки. Эти планы тренировок предусматривали несколько месяцев тренировок, которые подготовили меня к предстоящей гонке. Они также принесли мне желаемые результаты: я потерял десятки минут своего времени на гонке и чувствовал себя прекрасно, делая это.

Сегодня я следую другому плану тренировок: плану обучения программированию. Это дает мне структуру обучения, заставляет меня подотчетно и помогает мне максимально эффективно использовать часы программирования.

Все начинается с квартального плана, которым я буду учиться на следующие несколько месяцев. Когда я бегал, я следовал разным тренировочным планам, основанным на гонке, в которой я участвовал, или времени после нее. Теперь я создаю квартальные планы с конкретной целью обучения и следую им. Например, в этом квартале он изучает основы информатики с помощью Python.

Как только план составлен, я определяю ресурсы, которые помогут мне достичь моих целей. Затем я добиваюсь этого, создавая еженедельные и ежедневные планы, которые помогают мне распределять свое время и определять свои цели на предстоящий день. Таким образом, я целенаправленно вхожу в каждую сессию программирования и точно знаю, что мне нужно делать.

Следуя программе бега, я знал, сколько миль мне нужно пробежать и как быстро мне нужно их пробежать. То же самое и с программированием. Я не мог предположить, что мне делать сегодня утром, когда открыл свой ноутбук. Я продумал эти детали вчера вечером, когда составлял план на день вперед. В результате я сразу погрузился в набор задач, которые мне нужно было решить.

Этот процесс планирования - не просто приятная возможность - это необходимость для меня. Мое время ограничено, потому что я работаю полный рабочий день и учусь программировать в нерабочее время. Так что мне нужно считать каждую минуту, потраченную на программирование. Мой план программирования помогает добиться этого.

Какой у вас темп?

Было ясное солнечное ноябрьское утро, когда я преодолел полумарафон. Перед началом забега я заметил группу бегунов, сбившихся в кучу; один держал флаг со своим беговым темпом. «Я останусь с этой группой», - сказал я себе и ушел. Я должен был знать лучше.

Эта группа шла намного быстрее, чем я тренировался. Мое время было отличным на отметке в пять миль, но вскоре моя энергия была истощена. Следующие 8,1 мили мне не удавалось поддерживать темп группы, похожий на спринт. Но к тому времени, как я замедлился, ущерб был нанесен. Я начал слишком быстро и вложил много энергии в процесс, что сделало оставшуюся часть гонки долгой и трудоемкой.

Как я узнал из той гонки, старт в спринте даст вам отличную фору. Но это не является устойчивым в долгосрочной перспективе, если у вас есть много вопросов. Последовательность имеет решающее значение. Это имело значение, когда я бегал на длинные дистанции, и сейчас, когда я учусь программировать, это важно.

Каждое утро в 5:25 мой будильник заставляет меня просыпаться. Я направляюсь к своему стоячему столу, где провожу следующие несколько часов за программированием. Эти драгоценные часы я могу потратить на выполнение своих ежедневных программных целей до того, как начнется моя дневная работа. Никаких ночей. Никаких 16-часовых дней на программирование в выходные. Вместо этого я трачу несколько часов целенаправленных усилий каждый день, шесть дней в неделю, чтобы стать лучшим программистом.

Дело не только в количестве часов, которые я трачу на программирование, но и в том, как я их трачу. Опять же, это вопрос скорости. Общество заставляет нас действовать быстро во всем, что мы делаем. Однако я обнаружил, что этот подход не работает, особенно когда дело касается обучения. Если я двигаюсь слишком быстро, я упускаю из виду мелкие, но важные концепции или путаю концепции. Кроме того, для понимания некоторых вещей, например рекурсии, требуется время.

Так что часы, которые я трачу на программирование, стабильны. Я убеждаюсь, что действительно понимаю материал или проблему, прежде чем двигаться дальше. Этот процесс включает в себя много повторений, а это значит, что я двигаюсь медленнее. Я признаю, что сдерживаться сложно, поэтому мне постоянно нужно напоминать себе, что я строю фундамент знаний. Если я ускорю процесс сейчас, я пожалею об этом в будущем.

Этот темп для меня тоже устойчив. Это тот темп, который я сохраняю с тех пор, как начал учиться программировать, и он помогает мне добиваться того, чего я хочу.

Последовательность имеет значение

В последовательности есть что нравится. Во-первых, это делает обучение управляемым. Поскольку я программирую несколько часов каждый день, я сосредотачиваюсь только на небольшом отрезке времени.

Сегодня этот кусок разбирался в алгоритме сортировки и практиковался с ним. В других случаях нужно сдать один или два теста. Это достижимые цели. Они бросают мне вызов, но они определенно выполнимы.

Последовательность также помогает мне вспоминать. Когда я регулярно использую различные структуры данных, я помню, когда и как их использовать. Они свежи в моей памяти, когда я начинаю новую задачу. Неудивительно, что моя уверенность тоже возрастает. Например, чем больше я использую регулярные выражения, тем удобнее я с ними справляюсь.

Я быстрее замечаю прогресс при последовательных усилиях, потому что небольшие, постепенные улучшения со временем накапливаются. Возьмем, к примеру, рекурсию. Я определенно не «понял» ни на первом проходе, ни даже на втором или третьем. Фактически, я какое-то время боролся с этой концепцией. Каждая учебная сессия помогала мне прогрессировать, хотя и медленно, от понимания основной идеи до решения очень простых задач и, в конечном итоге, более сложных. Кульминация ежедневного обучения и практики окупилась, потому что наконец-то это произошло.

Пожалуй, самое главное, постоянство является устойчивым в долгосрочной перспективе. Если я сегодня потрачу несколько часов на качественное программирование, то я знаю, что у меня будет энергия, чтобы сделать это снова завтра, на следующий день, на следующей неделе, в следующем месяце и до конца квартала, пока не начнется новый план. и процесс начинается снова.

Последовательный - не значит легкий. Я чувствую себя комфортно из-за своего темпа программирования, хотя мне потребовалось некоторое время, чтобы определить лучший для меня темп. Постоянный темп, будь то бег или программирование, сохраняет немного энергии в аквариуме. Таким образом, когда вы действительно боретесь, у вас будет что-то в запасе, чтобы стать сильным.

Настойчиво

Когда вы бежите более 20 миль, ваши ноги кажутся свинцовыми. Вы устали, голодны и готовы остановиться. И все же вы идете вперед.

Требуется время, чтобы развить физическую выносливость, чтобы так много бегать, не говоря уже об умственной выносливости, чтобы довести это до конца. Программирование такое же. Редко бывает день, когда я решаю проблему за считанные минуты. На решение проблем у меня уходят недели, и я получаю больше ошибок и неудачных тестов, чем я хотел бы признать.

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

Чувство выполненного долга после решения сложной проблемы похоже на то, которое я испытал, когда пересек финишную черту гонки или завершил долгую утомительную пробежку. Все это время, усилия и душевные потрясения того стоили.

В жизни есть некоторые вещи, которым можно быстро научиться. На мой взгляд, программирование не входит в их число. Как только вы начнете, вы поймете, как много на самом деле нужно узнать - а это очень много! Это делает его захватывающим, но при этом гораздо более важным становится последовательность. Я не занимаюсь программированием слишком долго. Гонка для меня только началась - и это марафон, а не спринт.

Я писатель (amymhaddad.com) и начинающий программист.