Вот почему так сложно научиться программировать (и что с этим делать)

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

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

Но вот чего я не мог предвидеть: после использования сотен письменных, видео и интерактивных руководств я обнаружил, что методы преподавания технических тем в Интернете были невероятно… примитивными.

Состояние онлайн-руководств по программированию

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

Не тот случай. Вместо этого учебники по программированию просто переупаковывают методы обучения 20-го века в технологии 21-го века.

Видеоуроки имитируют урок в классе с доской. Или учебный DVD, который можно купить в рекламном ролике.

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

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

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

Специалисты по информатике с высшим образованием спросили меня: Вы пробовали читать документацию в« W3 Schools или Mozilla Developer Network

Другие предприимчивые люди говорили мне: «Сдавайся сейчас. Я не мог выучить это, когда пытался.

Веб-разработчики-самоучки спросили меня: «Почему вы со мной разговариваете? У вас остались сотни часов, если вы хотите изучить веб-разработку ».

Чтение документации. Сдаться. Вкладывай больше часов. Это были мои варианты.

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

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

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

Вот 5 причин, по которым Интернет, полный учебных пособий по кодированию, все еще не может дать удовлетворительных уроков (и как сделать это лучше).

Ошибка №1: обучение, показывая фрагменты кода

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

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

Нет четких ассоциаций между разными строками в приведенном выше фрагменте кода, если вы не являетесь промежуточным разработчиком Node.js и не знаете, как написать HTTP-сервер.

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

Это нарезанный кубиками тофу? Лук нарезанный кубиками? Нарезанный кубиками фенхель? Насколько велики куски? Какой инструмент мне следует использовать, чтобы нарезать их кубиками?

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

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

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

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

Вот несколько способов, с помощью которых ваш мозг может лучше понять компоненты HTTP-сервера:

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

Ошибка no 2: игнорирование правила 80/20

Если вы проведете собеседование с учителем веб-разработки или 10 новыми веб-разработчиками, вы будете слышать о одной и той же задаче снова и снова. CSS-позиционирование. Плавает. Обратные звонки. Это самые распространенные проблемы за последние 10 лет.

Однако по какой-то причине учебные пособия по-прежнему будут обучать каждой концепции одинаковое количество времени. Если урок вводного CSS состоит из 10 уроков и, как ожидается, займет 5 часов, каждый урок будет длиться примерно 30 минут. Легким изучаются ровно столько же, сколько и сложным, даже если существует хорошо задокументированный консенсус по самым сложным темам!

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

Новые разработчики решают эту проблему двумя способами:

  1. Предположите, что они тупые, и сдайтесь.
  2. Проконсультируйтесь с другими руководствами по той же теме, которые будут часто повторяться и иногда низкого качества. Подход «распыляй и молись».
  3. Переходите к следующей теме, предполагая, что они «поймут это позже»

Учителя других дисциплин будут использовать анализ 80/20, чтобы переориентировать свои усилия. Это означает, что 20% новых концепций потребуют 80% учебного времени учащихся.

Шесть тем CSS могут быть одинаково необходимы для создания красивого веб-сайта. Но их НЕ так легко выучить. Некоторые создают часы борьбы.

В идеальном мире полная учебная программа по CSS должна включать в 2–3 раза больше материала по этим общим сложным темам. Это будет включать в себя позитивное ободрение («Все с этим борются!») И дополнительные возможности для практики. Но этого еще не произошло, и я не ожидаю, что это когда-либо произойдет с большинством популярных сервисов.

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

  1. Выберите концепцию
  2. Научите этому малыша
  3. Определите пробелы и вернитесь к исходному материалу
  4. Обзор и упрощение (необязательно)

Ошибка № 3: обучение с точки зрения опытного инженера

Многие вводные руководства по программированию написаны инженерами с опытом работы более 10 лет. Откуда мне знать? Потому что мне приходилось пересматривать или перечитывать учебники снова и снова, пока я не понял: «Они не собираются объяснять эту ключевую концепцию! Мне нужно будет поискать в Интернете объяснение, прежде чем я смогу продолжить ».

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

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

Если вы вспомните, как ваш мозг хранит воспоминания сверху, это на самом деле имеет биологическую основу! Гиппокамп учителя сформировал ассоциации, которых нет в мозгу учеников.

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

Ошибка №4: преподают код как новую загадочную систему

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

Но не существует «базовой» версии обучения веб-разработке! Даже если вы изучали R или Java в прошлом, все равно не так много уроков, которые можно было бы перенести.

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

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

Теперь я знаю, что это кажется невозможным. Поскольку весь код выполняется в браузере или на сервере, как он может подключиться к нашим чувствам? И я не имею в виду наблюдать, как ‹div› масштабирует экран, пока вы переключаете его свойства CSS. Это не способствует обучению.

Я также мог подумать, что воображаемые числа из математики невозможно связать с человеческими чувствами. Помните i, i², i³ и i⁴? Похоже на новую систему, которую вам просто нужно запомнить, чтобы применить.

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

Ошибка № 5: Отсутствие немедленной обратной связи

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

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

  1. Во-первых, нарезал это слишком тонко
  2. Слишком сильно нагрелся
  3. Слишком поздно положить в кастрюлю
  4. Слишком долго оставил его в кастрюле

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

Вот сообщение об ошибке, которое вы получите, если бы это произошло в командной строке:

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

Изображение выше показывает, что на шаге 2 «Самая высокая температура» что-то пошло не так, что испортило вывод.

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

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

Ученики-самоучки страдают больше всего

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

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

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

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