Основные столбы обучения программированию — и почему начинающим стоит их овладеть.

1656594256 osnovnye stolby obucheniya programmirovaniyu — i pochemu nachinayushhim stoit ih

автор Райнер Ганекамп

CRPvRHpyZ6OVA6cZ-HSCzTzlqP1sYv5PcCcx

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

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

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

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

Цель новичка — овладеть основами программирования и понять важность библиотек и фреймворков.

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

Давайте посмотрим, с чего должны начать новые программисты.

Разработка, ориентированная на тестирование (TDD)

r0uu3i4euj5dIIHpOKxnsgpUunuqgk3mva2U

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

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

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

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

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

Кроме того, студенты должны знать, как использовать отладчик и иметь под рукой цикл Read-Eval-Print (REPL). Способность анализировать код во время выполнения и иметь площадку для небольших экспериментов важна в TDD.

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

Позже в профессиональной жизни они должны иметь антипатию к проектам без модульных тестов. Они должны интуитивно воспринимать отсутствие модульных тестов как антишаблон.

Основы Прежде всего

ItdR01O9Fye8a-YtpGWDAQz0k2iU7rXNwZR8

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

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

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

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

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

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

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

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

Библиотеки и фреймворки

lr7vOKfzzdX85fkOoW4u8INUBxuCCNyu5xfM

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

Как уже писал: Современные разработчики знают и выбирают правильную библиотеку. Они не тратят часы на написание ошибочной версии самостоятельно.

Чтобы этот переход мышления был успешен, примеры из «фазы фундаментальных» следует решать с помощью хорошо известных библиотек, таких как Moment.js, Jackson, Lodash или Apache Commons.

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

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

Когда дело доходит до фреймворков, у студентов не будет проблем с пониманием важности, когда они поймут полезность библиотек.

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

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

Мастер и ученик

Qarg7eqV5gyX7psyf7frI1dz4oZjICxiFXP6

В свои 20 лет я хотел научиться играть на пианино. Я не хотел учителя и думал, что смогу научиться самому. Через пять лет я обратился к профессиональному репетитору. Ну, что я могу сказать? За 1 месяц я научился больше, чем через пять лет.

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

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

Вместо этого должны быть отношения «мастер и ученик». В начале мастер дает правила, которых ученик должен соблюдать – вслепую! Мастер может объяснить правила, но обычно рассуждения выходят за пределы понимания учащегося.

Эти внутренние правила формируют своеобразную сеть безопасности. Если кто-то заблудится, у него всегда есть безопасное место, куда можно вернуться.

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

Как только подмастерья достигнут определенного уровня мастерства, их следует поощрять исследовать новую территорию. Мастер превращается в наставника, делящегося «мудростью» и открытого для дискуссий.

Вызов и мотивация

MwvSLxKLBGo0m-FuB8CK9wGJoDg6MdPKpGBk

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

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

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

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

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

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

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

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

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

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

Окончательный совет

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

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

Первоначально опубликовано на www.rainerhahnekamp.com 10 июня 2018 года.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *