Найти в Дзене
Руслан Елебесов

Как стать программистом? Основные принципы изучения программирования, и почему новичкам следует ими овладеть.

Оглавление

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

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

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

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

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

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

Итак, давайте посмотрим, с чего следует начать начинающим программистам.

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

Разработка через тестирование ( test-driven development, TDD) — техника разработки программы, которая основывается на повторении очень коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти тест, и под конец проводится рефакторинг нового кода к соответствующим стандартам.

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

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

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

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

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

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

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

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

Основы в первую очередь

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

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

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

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

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

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

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

Основы важны. Не двигайтесь дальше, пока они не решатся.

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

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

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

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

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

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

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

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

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

-2

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

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

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

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

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

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

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

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

-3

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

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

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

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

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

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

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

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

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

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

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

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

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

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