Наш опыт создания «Интенсива», или почему избежать ошибок не удастся

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

Предисловие

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

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

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

Критерии отбора

С критериями отбора все было одновременно и просто, и сложно. Стек команд – Python/Django – популярное сочетание. Версии не самые последние по номерам, но в актуальных ветках. Обвязка вокруг основного стека пусть и обширная, но в большинстве своем стандартная. Собственные библиотеки есть, но при базовом понимании принципов работы основного фреймворка – можно было достаточно быстро разобраться и с ними. СУБД – PostgreSQL. 

Из обязательных критериев сразу был убран PostgreSQL – первичный поток задач явно не подразумевал погружения в БД дальше ORM, а остальное можно было получить уже в рамках «Интенсива» и последующей работы. Обязательное знание Django заменили на формулировку «Django либо иной Python-фреймворк/ORM» с пояснением, что в ряде случаев (например, человек пришел из другого стека и знает пока только Python) и этот критерий может не являться обязательным. От Python решили не отказываться, поскольку тогда отбор мог бы затянуться на продолжительное время.

Программа «Интенсива»

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

Теория

  • Python.

  • Django.

  • PostgreSQL.

  • ООП.

  • Паттерны.

  • Структуры данных.

  • Алгоритмы

  • Окружение.

Практика

  • Разворот проекта.

  • Основные компоненты продуктов.

  • Работа с задачами.

Процессы и инструменты

  • Основные ресурсы и процессы подразделения и компании.

  • Основные процессы команд.

  • Основные инструменты работы.

По процессам и инструментам в результате получилось так: часть тем были распределены на первые дни, а оставшиеся – по другим дням и смежным темам. После составления «скелета» курса стало понятно, что он займет тридцать один день (в конечном итоге их будет тридцать два).

Кроме того, было сформировано расписание типового дня:

  • 09:30 - 10:00 - Теория. Проверка тем предыдущего дня.

  • 10:00 - 11:30 - Теория. Новая тема.

  • 11:30 - 12:30 - Самостоятельный разбор дополнительных источников.

  • 12:30 - 13:30 - Обед.

  • 13:30 - 14:00 - Разбор задачи.

  • 14:00 - 16:30 - Самостоятельная реализация задачи.

  • 16:30 - 17:30 - Разбор решений.

  • 17:30 - 18:30 - Самостоятельная доработка замечаний по задачам.

Чтобы различные дни «Интенсива» выглядели согласовано, был выработан небольшой перечень рекомендаций для менторов:

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

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

  • Подберите к каждой теоретической теме материалы для самостоятельной работы. Минимум один-два источника (книги, вопросники и т.д.).

  • Проводите разбор задач (кроме первой) по схеме:

    • Демонстрация: прочтение текста, уточнение вопросов.

    • Определение времени, за которое каждый из участников должен решить ее.

    • Проверка реализованных решений (выполнение реализации в отдельной ветке), разбор ошибок.

    • Демонстрация верного решения, если ни у кого его не было в полном виде.

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

Собеседования

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

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

Наконец, завершилась встреча с последним кандидатом. Офферы выданы и приняты: участники отрабатывали положенные им две недели на своих прежних местах, мы – готовили занятия первых дней и дополняли программу. В итоге студентами «Интенсива» стали 6 человек.

До старта 10, 9, 8….

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

- А у меня ядра по количеству только виртуальные, ничего? 

- Ничего.

- А прямо со старта 200 ГБ понадобится? 

- Нет, но в процессе могут понадобиться. 

- У меня все есть, но на Mac. А есть жесткий меньше, но на Убунте. Что лучше?

- Пока можно остаться на Убунте. 

- А у меня винда!

- И у меня! (немая сцена). 

На тот момент казалось «некритично» – просто придется сделать больше действий для достижения конечной цели. 

«Оглядываясь назад, первый вывод, который был сделан – требования к железу и ОС следует делать конкретнее и именно те, с которыми вы готовы работать. И если вам кажется, что главное *nix-система, а там срастется – вероятнее всего не срастется и тем более не взлетит».

Но все были на месте и готовы работать.

Поехали!

Теоретические занятия показали, что участники многого не знают, но ребята старались и работали как сплоченный коллектив: и на звонках, и в чатах. Было интересно наблюдать за тем, как они взаимодействуют друг с другом, пробуют разные варианты, ошибаются и начинают сначала. После практических задач стало понятно, что студенты не привыкли писать комментарии и документацию. Потребовалось время, чтобы синхронизироваться в этой части, а также «утрясти» процесс работы через  репозиторий и pull-request’ы.

Выводы первой недели:

  • Чистая система и Docker по официальному мануалу, никак иначе.

  • Bash-скрипты уместны, только когда они запускаются под Linux, так как при запуске в macOS – появляются проблемы.

  • Команда хорошо умеет скрывать слабые стороны отдельных людей.

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

Но несмотря на трудности, мы старались не отставать от программы и продолжали двигаться дальше. От базовых тем постепенно перешли к расширенным, началось погружение в СУБД и ООП, с которыми у обучающихся было меньше опыта, чем, например, с Python. Если говорить о продуктовых задачах, то их сложность тоже постепенно увеличивалась. Мы перешли к задачам, где требовалось большего взаимодействия с предметной областью, а работа не ограничивалась только кодированием. Хотелось, чтобы ребята научились лучше анализировать взаимосвязи компонентов, постарались понять суть бизнес-процессов продуктов (это важные навыки).

Финиш

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

P.S. Во время обучения к группе присоединились два сотрудника компании, которые работали в смежном стеке.

Вывод

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

  • Будьте готовы к тому, что придется начинать с основ.

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

  • Оценивайте не командную работу, а отдельно взятого человека.

  • Для проверки необходимы автоматические тесты.

  • Старайтесь, чтобы для всех учебных заданий была одна среда, но не в ущерб удобству их выполнения.

  • Старайтесь оставлять в учебных заданиях «пасхалки», связанные с дополнительными материалами.

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

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

  • Ограничивайте время работы с участниками.

И главный вывод – не бойтесь действовать. Да, мы допускали ошибки, но все получилось. За это спасибо нашей невероятной команде!

Полезные материалы

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

  1. https://realpython.com/ – познавательные статьи, подробно рассказано про базовые инструменты.

  2. https://medium.com/ – для общего развития.

  3. https://refactoring.guru/ru – примеры по паттернам и рефакторингу.

  4. https://postgrespro.ru/education/courses – курсы по PostgreSQL. Обратите особое внимание на DEV1 и QPT.

  5. https://habr.com/ – без любимого Хабра никуда :)

  6. https://www.djangoproject.com/ – полезно и кратко про документацию. Много примеров, а также комьюнити.

Кроме этого, в список рекомендаций к курсу попали несколько книг:

  1. Python. К вершинам мастерства | Лучано Рамальо

  2. Чистый Python. Тонкости программирования для профи | Бейдер Дэн

  3. Django by Example | Antonio Mele

  4. Эффективная работа с унаследованным кодом | Майкл К. Физерс

  5. Head First: Объектно-ориентированный анализ и проектирование | Маклафлин Бретт

  6. Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих | Бхаргава Адитья

Источник: https://habr.com/ru/company/barsgroup/blog/596613/


Интересные статьи

Интересные статьи

Я работал в IT консультантом, программистом, продавцом в общей сложности более 18 лет. За эти годы я перепробовал разные методы взаимодействия с клиентами и подходы к составлению технических заданий. ...
Добрый день!Меня зовут Александр. В настоящий момент прохожу обучение по программе DevOps компании GeekBrains. Решил поделиться своим опытом. Надеюсь, это поможет вы...
Автоматизация игроков всегда была большой проблемой в глобальных многопользовательских онлайновых ролевых играх (MMORPG), таких как World of Warcraft и Runescape, и этот ...
«Я волком бы выгрыз бы бюрократизм…», хотя в разумных дозах он необходим, но когда его заносит за пределы здравого смысла, злость выплёскивается в коротких опусах, помещая бюрократа в обы...
Пилоты Формула-1 испытывают перегрузки, равные тем, что испытывали астронавты «Аполлона» во время приземления. Давайте рассмотрим как проектируются и создаются их болиды. Вот у...