Программистам всегда не хватает времени. Особенно эта проблема актуальна для тех, кто только начал изучать программирование. Они хотят учиться, причем очень быстро.

Меня это удивляет, ведь программирование — это навык. А освоение любого навыка — кропотливый процесс, требующий времени.

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

Забудьте о вопросах, касающихся скорости обучения программированию или выбора языка. Спросите другое — с чего начать? Какие знания основные?

Это стоит потраченного времени

Допустим, вы хотите сделать карьеру в программировании. Естественно, вы захотите побыстрее пополнить свое портфолио. Ведь именно так ваши перспективы будут расширяться.

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

Быстрее? Легче? Разве нет?! Нет, это иллюзия.

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

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

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

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

«Быстрый» подход вырабатывает в таких программистах плоское, одномерное мышление. Если задача или программа, с которой они работают, попадает в нужную плоскость — все в порядке. Но выход за ее пределы или отсутствие опыта — огромная проблема. У них нет прочной базы знаний, на которую можно положиться.

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

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

Более того, знание основ придает уверенность и спокойствие. Такие программисты вложили время и силы на поиск ответов на вопросы как, что, почему и зачем. У них прочный фундамент знаний. Им не нужно думать над выбором структуры данных — они уже знают лучший вариант.

Так что начинайте путь изучения программирования правильно, чтобы получить прочный фундамент знаний.

Начните со ствола, а уже потом добавьте листья

Основы — это принцип работы любой технологии, которую вы хотите изучить.

Основы структурируют ваши знания. Об этом говорил Илон Маск:

«Рассматривать знания как семантическое дерево — невероятно важно. Вам нужно быть уверенными, что вы отлично знаете основы — ствол дерева и его ветви. Если вы сразу приступите к листьям или другим деталям, то держаться вам будет не за что».

Допустим, у вас прочная база (ствол). Когда вы начнете изучать что-то новое, вы всегда можете на него опереться.

Например, вы изучаете цикл for. Но вдобавок вы узнаете случаи, когда его нужно применять. Понимаете, почему для решения одной задачи нужно использовать for, а для другой — while. Вы изучаете, что происходит на каждой итерации цикла. Понимание всего этого образовывает «ствол».

Когда есть база (ствол и ветви), детали (листья) растут сами по себе. Например, вложенные циклы перестают казаться чем-то сложным, ведь вы знаете, как работает for. Ценность деталей также возрастает, когда вы можете их грамотно применить. А освоить их — задача нетрудная — вам «есть за что держаться».

Итак, в следующий раз, когда вы намереваетесь изучить что-то, задайте себе вопрос — как работает «х»?

Закладывание фундамента

Вам знакомы имена Энди Уорхол или Джексон Поллок?

Мы помним этих художников за их новаторские работы. Но учились они классическим способом: начинали с основ искусства и только потом стали писать шедевры.

Как сказал Пабло Пикассо — тоже известный художник, получивший классическое образование: «Сначала выучи правила: чтобы знать, как их нарушать».

Творческий потенциал

Изучение основ — подготовка почвы, в которой расцветут цветы креативности. Джон Вуден, легендарный тренер по баскетболу, так и учил своих подопечных.

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

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

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

Вы готовы к повороту

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

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

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

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

Интуиция программиста

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

То есть, подобный уровень подготовки поднимает уверенность в себе. Вы будете чувствовать себя более подготовленным программистом — и это действительно так.

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

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

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

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

Я прекрасно понял одно — фундаментальные основы во время изучения чего-то нового я определяю сам. Один из способов сделать это — узнать общую картину.

Составьте общую картину

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

Цель состоит в том, чтобы получить общее представление о самых необходимых частях. Если у вас есть какой-то опыт, отделить важное от мелочи — очень просто.

Допустим, вы собираетесь изучить классы в Python. Чтобы получить общую картину, прочтите заключение в конце главы книги о классах. Изучите введение, прочтите заголовки в каждом разделе главы. Ознакомьтесь с задачами и упражнениями.

При этом задавайте себе следующие вопросы:

  • Какие темы повторяются?
  • На чем делается акцент?
  • В чем основная суть?

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

Это не значит, что детали не имеют значения. Это важно — но только после изучения основ.

В деталях очень легко потеряться, особенно если вы не готовы к ним. Это замедляет ваш прогресс и уменьшает вашу эффективность. Аналогия Маска с деревом гласит: детали не будут иметь смысла, если им не за что держаться. Говоря языком Маска, общая картина — «ствол» и «большие ветки», а детали — «листья».

Определите фундаментальные знания, сфокусируйтесь на них. Начинается все именно с них.

Перевод статьи: Why Asking “What’s the Fastest Way to Learn to Program?” Is the Wrong Question