Через тернии к звездам. История программы стажировки

c28ad9df02594837bdb7f7e01994f48f.png Не нравится мне нынешний рынок веб-разработчиков. В частности — московский. Активно не нравится. Запросы высокие. Опыт невелик. А если и велик, что код часто — страшен, командные практики — не развиты. Где трудились эти N лет — непонятно, почему не развивались — неведомо. И редко встретишь в резюме хоть что нибудь из XP (ревью и CI, не говоря уже о парном кодинге с TDD)… А так, чтобы не просто «слышал и всегда хотел», а сразу «умел готовить» — работу, как видно, особо не ищут и, по всей вероятности, прикованы в офисах к батареям вполне себе счастливы в ролях ведущих/тимлидов/архитекторов.А даже если договариваешься о сотрудничестве с адекватным на вид человеком, то еще неизвестно что с ним получится, как сработаемся, впряжётся ли так, как ожидаешь. И предстоит еще проверить, соответствует ли впечатление о человеке тому, как он себя проявит в роли специалиста.

Итак, проблема есть — будем действовать.

И открыли мы программу стажировки. Ну как… чтобы не соврать: не то чтобы прям Открыли, и не совсем даже Программу, но с источником теоретически подготовленных, но практически неопытных ребят нашлись и договорились, на форуме источника объявление вывесили, и стал я ждать у моря погоды.

Дальше — лирическая история о том, как оно было.Было дано:

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

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

Еще несколько вводных данных, авоськиных решений и душевных томлений.Стажировать, конечно, будем на PHP (чаще нужны именно php-разработчики, да и язык для новичков — вполне подходящ). И придется смириться, что это будет Win. Но планку будем брать высокую. Поскольку на «чистом» php уже давно почти никто не кодит, возьмем фреймворк. Разумеется, Laravel (широкая функциональность + пользуемся в наших проектах + мне самому лично нравится). И еще у Laravel присутствует недостаток в русскоязычной поддержке (пусть сразу поймут, что придется уметь работать с англоязычной документацией… только безжалостный хардкор). Т.к. времени нет, то «детский сад» недопустим, следовательно, необходим быстрый «отсев» ребят, к такой активной практике морально не готовых. Плюс нужна автоматизация процесса, опять же, из-за отсутствия времени.

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

Два слова о высоте планок: у нас сложные проекты. В основном b2b-сервисы на финансовую тему (где даже нет фронтов), только api-сервисы и реализация всяких гейтов по спецификациям. И стажировку мы решили делать (напомню) не просто так, а для развития деятельности в нашей сфере и для обеспечения кадрового резерва.

8b25a6cf757940af8d432e8c5e1a26d2.png И еще — «пинки» с моей стороны должны отсутствовать полностью. Если стажер действительно хочет получить практический опыт, если мотивирован и заинтересован — будет пушить меня сам. Я же дал себе зарок: своевременно реагировать и конструктивно помогать. Провоцировать активность в тех, кто сам не шевелится, смысла не видел (опять же — время!), и быть по сему.

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

ПлощадкаВвиду необходимости командной работы и абсолютной бесполезности для кого бы то ни было нашего собственного «корпоративного сайта», сайт компании ФИНТЕК_ФАБ и был выбран как площадка для стажеров. Сама собой родилась идея, что стажировка будет открытая, все будем делать на гит-хабе. Никакие дополнительные «заморочки» в виде дев-серверов и тикет-систем не пригодились.

Пытаясь поначалу хоть как-то систематизировать свою работу по этому проекту (я таки все же управленец, и опасаясь большого потока хаотично настроенных стажеров, не мог обойтись без острого приступа «управления»), пытался формализовать процесс то в Trello, то еще в каких-то тикет-штуковинах, но эта температура быстро спала и в итоге все осталось на уровне задачек + коммитов в гит-хабе и никак не регламентированного общения в скайпе. Я даже эксель-файлом не обзавелся, чтобы вести учет участников — не потребовалось.f59adbdbbca7403e9d3dba78ff62e797.jpg

Начало. Автоматизация — наше всё Первое, что было сделано — это, конечно же, вики-ресурс, в котором был описан длинный и нудный процесс приготовления рабочей среды на win-платформе. Который, теоретически, должен быть простым и универсальным, даже для совсем нулёвых практиков. Следуя задаче «высокой планки», Денверы и прочие LAMP-очки под WIN исключались полностью. Для счастливых умельцев linux-ов была сделана приписка «делайте все сами, вы сможете».Если кратко, то автоматизация включала в себя конфигурацию Vagrant, специально подготовленный и настроенный со всем lamp-овым софтом бокс (VirtualBox) на убунту-сервере, и кучку инструкций про то, как все это запустить на windows. Также было необходимо, чтобы все это заработало вместе с PhpStorm (по двум причинам: данная IDE используется в наших командах, и мне никак не хотелось вникать в тонкости других сред). В идеале у стажеров легким движением руки должна была запуститься рабочая копия проекта со всеми нужными обвесами.

Примечание: когда начал уже жалеть об этом решении с IDE (100 баксов то за персональную лицензию — не лишние!), то под программу стажировки (точнее, под результат в виде open-source библиотек) в JetBrains выдали нам бесплатную лицензию, за что им — отдельное сенкью.

После появления Laravel Homestead, инструкция быстро перекочевала на эту фичу, т.к. с первой версией я достаточно намучился (всё недосуг), а она (фича) уже предоставляет довольно мощный и гибкий конфиг для Vagrant-а и поддерживаемую (ура! больше не мной) виртуальную бокс-машину. (Кто еще не знаком с инструментом: Laravel Homestead можно использовать далеко не только для разработки на Laravel).

340f04d62445423ea124c673843c63c6.jpg

Первые заявки Собеседований как таковых, критериев отбора и так далее — попросту не было. Отвечал (и продолжаю действовать в том же духе до сих пор) — всем подряд. Человек присылает заявку, я его прошу найти меня в скайпе. Далее связываемся, объясняю что к чему, отвечаю на вопросы. Озвучиваю основные положения: Сотрудничество — нефинансовое. Обязательств и сроков — никаких. Работаем исключительно на взаимном интересе. Если интереса нет — не работаем. Попадание в штат — возможно, но маловероятно. Вознаграждение за решенные задачи — возможно, но еще менее вероятно. И, началось. Это было весело. Переживал, что слишком сильно разжевал настройку среды для разработки и чересчур много буков написал на вики-ресурсе. Что придут эдакие подготовленные чуваки и не будут меня за это уважать. Но все оказалось значительно прозаичнее. На входе ожидались люди, которые получили платную (О_о) теоретическую подготовку в течение 1–2 месяцев по разработке на PHP (о_О). Но сразу же выяснилось, что в эту подготовку не входили даже слухи о:

фреймворках композерах гит-ах паттернах (было немного MVC) правилах и стандартах оформления кода консольных командах не говоря уже о прочих бубунтах Зато отлично угадал про бэкграунд в виде софта а-ля всемогущий Денвер. Я б таких даже в космонавты не взял, не говоря уже о том, чтобы кодить в какой-либо из наших проектов. Но в стажировке — что ж поделать! подумал я. Взялся, как говорится, за гуж… Вики-ресурсы были дописаны еще подробнее. Первые участники принесли много профита в виде понимания, что же мне теперь со всем этим делать.

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

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

Тогда же вырисовался и стажерский профит:

Стажеры получают все, что необходимо знать в современной веб-разработке (не только кодинг, но и инструменты и процессы). Могут выбрать, в каком направлении себя тащить. Все что ни сделают — авторство сохраняется в виде коммитов на гит-хабе. Если задача касается веб-интерфейсов — она навсегда останется доступной для демонстрации на нашем «корпоративном сайте». Качественное ревью, включающее придирки всех мастей — от мелочно-злобных до названий переменных, до серьезных на уровне архитектуры приложения. Эх. Дали бы мне такие возможности для практики, когда я только начинал свой путь в веб-разработке…

О результатах: через пару месяцев первая группа закономерно распалась. Успели сделать раздел со стажировкой (для подачи заявок напрямую, а не через форум источника), пару задач так и не попавших в гит-хаб, отправку писем и что-то еще простое. Кроме кодерского профита, получили от меня вагон с тележкой всяческих умных советов по жизни разработчика — и о том как лучше искать работу, и о том как дружить с возможным будущим коллективом и т.п. Один из ребят потом успешно советами воспользовался (устроился на работу и по слухам — вполне доволен), один так и остался с нами. Сделал полезный сервис — эмулятор системы киви. Сейчас помогает мне с новыми стажерами. Остальные «пропали без вести», и надеюсь только что моя деятельность принесла им значительную долю пользы.4a05af413c5646b48f6ea48b2143d815.jpg

Удалёнка По результатам первых участников после оптимизации процессов «вхождения» и стажерского инструментария, решил я распахнуть поле деятельности на удаленных участников. Намеренно усложнил себе жизнь, мягко говоря. К тому же пришлось остаться в одиночестве (штатные наши бойцы не могли помогать по формату удаленной работы). Для удаленных участников стажировки строгим условием входа стала самостоятельная настройка рабочей среды. Что по результату оказалось довольно серьезным барьером.

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

Примерно четверть: задавали вопросы, помогал советами и ссылками на материалы (разжевывать по шагам я себе запретил), но судя по всему они ожидали чего-то более простого; кто-то не справлялся с ssh-ключами для убунты, кто-то останавливался на этапе работы с гит-ом.

Еще около 10% со всем справились, но потом тоже пропали. Наверно потому что лето и огороды :-). Тем не менее, причина в данном случае была очевидна — стартовый «запал» уходил куда-то в другую сторону. Об этом мне писали, извинялись, обещались вернуться к задачам, но так и не возвращались. Все что мог — это утешать тем что «вы мне ничем не обязаны, а наоборот — я вам, поэтому обращайтесь в любое время».

В целом ребята обращались в большинстве совсем «нулёвые». Вероятно моя политика по уровню вхождения и отказу в детальной помощи являлась преградой для дальнейшей работы (но это только предположение). Многие (я так думаю) попросту нашли себе другую (более официальную) стажировку и учатся тому же (о качестве умолчим), но уже не бесплатно.6d3e8a7ad69049319f965af28ca76581.jpgПризнаться мне совсем не интересно, почему они не захотели или не смогли продолжать. Т.к. это пока не входит в цели и задачи стажировки. А мне нужны были те, кто самостоятельно пройдет первый этап, проявив достаточный уровень терпения, и тогда я смогу учить их правильно кодить (в правильной среде и на правильных инструментах).

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

Но достаточно о печальном Оставшиеся проценты успешно (а отдельные люди, имея опыт — очень быстро) — преодолевали стартовый кусок и получали задачи. Любопытно, что никто не принес задачи сам. Приходилось придумывать, изобретать то, что должно быть полезным и интересным.Для того чтобы избежать индивидуальной работы, принялся «копать» разные штуки для вебинаров с демонстрацией рабочего стола, с возможностью удаленно «тыкать в код пальцами». Об этом можно написать отдельную историю. Исследовано было штук 20 разных софтов на эту тему. Многие не работали вовсе. Многие работали, но только у некоторых участников. Плюс трудно было собрать несколько человек вместе в одно время, а тут еще оказывалось, что они ничего не видят или не слышат… И все заново. В итоге полностью рабочим все оказалось только в citrix (но все равно лагала доставка моего скрина в реал-тайме), и в конечном итоге — остановился на webinar.ru (вот уж где все заработало без нареканий, печаль была только у ребят с узким интернет-каналом).

И теперь когда все проблемы с инструментарием были решены, эффективность удаленных «семинаров» оказалась значительно ниже офлайновых мастер-классов. Это не тот вебинар — когда просто «вещаешь» (и пусть будет богато тому, кто слушал и бедно — всяким бездельникам). Здесь мне требовалось понимание и «услышание» — не мог себе позволить потом повторять каждому то, что было озвучено целой группе. Впоследствии количество сдержанных в себе, непроизнесенных вслух фраз «я же говорил» просто зашкаливало.

2091c98db96d471fbd1e867ad07c5253.jpg

Эпоха индивидуализма Поток заявок был стабилен, но ребят в активной части оставалось не много. По причинам некомфортности вебинаров, а также небольшого количества активной аудитории, временно прекратил вебинарный подход и решил попробовать поработать индивидуально.Процесс шел теперь так: договариваемся о задаче (либо одна задача падает на целую группу), ребята кодят, по готовности пишут мне, я беру ветку с задачей, смотрю код, оставляю в нем комментарии и коммичу в отдельную ветку. Гитхаб отлично показывает все мои «придирки», стажер принимает (или не совсем) все их к сведению, и делает следующий «релиз». Все разногласия решаются по скайпу. Когда задача более-менее реализована, начинается самое времязатратное — нужно протестировать. И конечно сразу ловлю «косяки», блокирующие дальнейшую работу. Сообщаю об ошибках, и так далее.

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

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

О результатах Опыт — он такой опыт. Того, что опасался в самом начале — теперь и не вспомнить. Разность потенциалов участников стажировки — велика. Амплитуда горестей и радостей от провалов и успехов разных людей — высокая. Мозг периодически уходит в debug-mode и иногда не желает оттуда возвращаться. Способы решений одних и тех же небольших задач не то, чтобы поражают (какого кода я только не видел), но иногда вводят в совершенный ступор… вроде и «неправильно» сделано, но как правильно — непонятно). В отдельных вещах некоторых ребят переспорить не удается, со своего малого опыта они находят непробиваемые аргументы в пользу своих решений. А для меня лично данное мероприятие отлично снимает окисление с покрытого «сурьёзным многолетним опытом» мозга. И значительно расширяет горизонты восприятия технических и человеко-разработческих проблем.В сухом остатке, от меня выходят ребята, которые:

04f3d6b037bb497ba83d49aca0e29d72.jpg

Научены писать «чистый» код по правилам, понимают важность стандартизации при работе в команде; Умеют работать с гит-ом и гит-хабом, IDE; Излечились от денверов и прочих не трушных инструментов; Умеют работать с документацией, самостоятельно находить решения проблем; Условно знают фреймворк Laravel, умеют обращаться с миграциями, ORM, контроллерами-моделями-видами, понимают важность слоеной архитектуры и вынесения функционала в компоненты; Умеют находить готовые решения в сети и подключать их в проект; Умеют писать тесты и понимают, зачем они нужны; Знакомы с такими штуками, как очереди и асинхронные процессы; В какой-то мере умеют обращаться с фронтендом (bootstrap, jquery); Особо продвинувшиеся — получают рекомендации; Имеют общее понимание, какие могут задачи в веб-разработке. To Be Continued… В возможных скорых планах abb16cc5110b41c1871dd9c637930888.jpgУвеличить аудиторию — сделать все более системно и правильно, привлечь больше участников; Расширить технологический стек — увеличить сложность задач, поднять мобильное направление (мобильные фронты на веб-сервисах); Подружиться с московскими ВУЗами, проводить стартовые тренинги, читать студентам вводные лекции на разные высоко-философские и приземленные темы про их будущее в IT, помочь сориентироваться в выборе направлений развития; Систематизировать и расширить организационную работу — возможно привлечь одного-двух помощников; Привлечь время и средства — хочется отдельного помещения офлайновых встреч, и для прочих мелких расходов; За счет стажировки — раскачать направление опен-сорса, делать разные плагины и другие полезные миру разработки штуки; За тот же счет — экспериментировать в новых технологиях веб-разработки. Есть идея (пока что неоформленная) принимать заказы на «тренировку» разработчиков по командным процессам решения задач из других компаний (с возвратом); Каким-то образом раскачать тематику фронт-енд технологий (в нашей основной команде их практически нет). Пруфлинкc fintech-fab.ru/vanguard — раздел, где можно подать заявку. Он же — «корпоративный сайт» и стажерский пациент для экспериментов.wiki.fintech-fab.ru/doku.php — та самая, пугающая новичков, вики.github.com/fintech-fab/fintech-fab.ru — гитхаб.github.com/fintech-fab/fintech-fab.ru.homestead — конфигурация для vagrant.laravel.com/docs/homestead — документация по Laravel Homestead.fintech-fab.ru/qiwi/gate/about — пока что единственная доведенная до «полного ума» задача, реализованная с избыточной тщательностью, покрытая правильными тестами с моками и танцовщицами, использующая асинхронную обработку через очереди задач и http-коллбэки, оформленная в виде подключаемых через композер пакетов (согласитесь… записать такую штуковину в резюме для юниора не слабо, м?)

© Habrahabr.ru