Пять подходов, которые нужно усвоить начинающим программистам

11 июля 2018, 17:30

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

Читать далее

Иллюстрация: Райнер Ханекамп

Разработка через тестирование (test-driven development, TDD)

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

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

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

Также они должны уметь использовать отладчик и цикл REPL. В разработке через тестирование очень важна способность анализировать код в процессе исполнения и среда для небольших опытов.

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

Иллюстрация: Райнер Ханекамп

Основы превыше всего

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

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

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

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

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

Иллюстрация: Райнер Ханекамп

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

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

Сегодня разработчики умеют подбирать правильные библиотеки — им не приходится тратить часы, чтобы кое-как написать свою. Чтобы быстрее привить эту привычку, упражнения из предыдущей части следует выполнять с помощью известных библиотек, таких как Moment.js, Jackson, Lodash или Apache Commons.

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

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

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

Иллюстрация: Райнер Ханекамп

Модель «учитель и ученик»

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

Поначалу ученик должен слепо выполнять правила, которые приводит учитель. По ходу он может давать объяснения, но, скорее всего, ученику они будут ещё недоступны. Эти правила образуют своеобразную «подушку безопасности»: если ученик запутается, то всегда сможет вернуться назад, к основам.

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

Иллюстрация: Райнер Ханекамп

Сложности и мотивация

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

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

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

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

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

Иллюстрация: Райнер Ханекамп

Заключительный совет

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

Обсуждение