Две самые сложные вещи, которые я когда-либо делал в своей жизни, — это изучение JavaScript и завершение кампании Ultra Nightmare в Doom Eternal. Хотя изначально я был уверен, что эти две попытки будут так же тесно связаны друг с другом, как Давид Микеланджело связан с тако Кампечано, я был сбит с толку, обнаружив, что они связаны четкой концептуальной нитью.

Я говорю об аду туториалов.

Многие, если не большинство программистов, со временем знакомятся с «адом туториалов». Поразительно, но игра в Doom Eternal на самом деле не научила меня ничему полезному, как выйти из этой ситуации.

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

Позвольте мне рассказать вам о них. А также о Doom. Я чувствую, что Doom будет иметь значение.

Что такое учебный ад?

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

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

Вкратце, вот как работает обучающий ад:

Шаг 1 — Вы проходите обучение кодированию и изучаете навык Y.

Шаг 2. Вы пытаетесь построить что-то, используя навык Y, и вдруг понимаете, что вам не хватает навыка X, и вы понятия не имеете, что делаете.

Шаг 3 — Вы проходите обучение, чтобы изучить навык X.

Шаг 4 — промойте, повторите, как указано выше.

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

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

Космодесантник в Doom — именно тот парень, который никогда не застрянет в обучающем аду (я не упускаю из виду иронию этого предложения). Его воля непоколебима. Он не знает сомнений. Его знаменитая зеленая броня вам не поможет, но какой бы умственной рутиной он ни занимался перед тем, как встать утром, готовым сжечь мир дотла, это, вероятно, может научить вас кое-чему или двум.

Почему так сложно выбраться из ада учебных пособий?

Причина, по которой я играю в Doom, заключается в том, что, в отличие от реальной жизни, я всегда чувствую, что делаю какой-то прогресс. Учебники питают вас той же иллюзией, что и делает их соблазнительными: вы заканчиваете учебник по программированию, скажем, по SQL, и думаете про себя: «Эй, я только что кое-что узнал! Теперь я на один шаг ближе к своей цели отлично работать с SQL».

На самом деле в этом есть доля правды, поскольку то, что вы тратите свое время на обучение, не является пустой тратой времени, о которой вы гарантированно пожалеете на смертном одре (в отличие от того, что я играл в Doom на Ultra Nightmare).

Учебники, которые делают, обучают новым полезным навыкам программирования. Но у них также есть определенный «потолок» навыков, которым вы можете научиться. Вы можете подняться только так высоко (или так глубоко, даже если это противоречит метафоре потолка).

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

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

Тот, кто разработал ваше руководство, позаботился об отладке, тестировании и т. д., а затем оптимизировал весь процесс, чтобы вы сами не столкнулись с этими проблемами. Таким образом, вы даже не видите «потолка», но при этом получаете полное ощущение прогресса и достижения космодесантника, стреляющего ракетой в глотку адского рыцаря (возможно, это не лучшая аналогия, которую я когда-либо придумывал*).

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

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

Опять же, без стрельбы. Разочаровывает, как это может быть. Или нет.

*Это утверждение, вероятно, относится ко всей статье.

Хорошо, теперь скажи мне, как выбраться

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

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

Вот три шага, которые я бы рекомендовал.

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

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

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

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

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

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

Короче говоря — создавайте, читайте, работайте над Open Source. И купите себе BFG 9000 на случай, если возникнут проблемы.

Последние мысли

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

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

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