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

«Любой может научиться программировать».

Понятно пытаться представить кодирование таким образом. И, конечно же, здесь, в Grok Learning, мы тоже виноваты:

«Учиться программировать еще никогда не было так легко и весело!» - Grok Learning

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

До недавнего времени кодирование обычно не входило в обязательную школьную программу (но теперь в Австралии это так!). Приобщение взрослых и школьников к программированию потребовало от них выбора, чтобы начать его изучение. Это должно было быть в свободное от учебы время, внеурочная деятельность или факультативная единица обучения. Чтобы привлечь больше людей к программированию, преподаватели и онлайн-ресурсы по программированию начали обещать большие результаты при минимальных затратах времени и усилий.

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

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

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

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

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

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

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

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

Утес замешательства и пустыня отчаяния

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

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

Избегая обрыва

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

1. Научите отладке с самого начала

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

2. Установите ожидания

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

3. Празднуйте борьбу и обучение, а не достижения.

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

4. Подавать пример

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

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

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

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