Научите меня писать интерфейсы для космолётов!
Показать человеку, как решается задача, ещё недостаточно. Он может повторить знакомую последовательность и растеряться, когда условия немного изменятся. Мне важно, чтобы после обучения человек умел применять свои знания в работе, где никто не обещает задач точно по образцу.
Когда мы начинали заниматься вебом, спросить совета часто было не у кого. На вещи, с которыми теперь можно помочь новичку, уходили годы. В HTML Academy мы стараемся сократить этот путь, сохранив основу, с которой человек сможет развиваться дальше. Но что именно должно входить в эту основу, школы понимают по-разному.
От учебного проекта к работе
Основной формат Академии — профессия: подготовка человека без опыта к первой работе. В конце 2021 года на этот путь мы отводим год с небольшим, примерно по 20 часов в неделю. Совмещать его с работой можно, и мы стараемся этому помогать, но это тяжёлая нагрузка. Обещания войти в профессию за месяц мне не нравятся именно потому, что скрывают необходимую работу.
Мы разделяем подготовку на учебную и производственную части. На учебной студент работает с личным наставником — действующим разработчиком уровня мидла или сеньора. Днём этот человек решает задачи своей компании, а в другое время помогает трём-пяти студентам проходить программу.
Программу при этом составляет другая команда. Наши авторы работают в Академии постоянно: это опытные программисты, которые готовят материалы, ведут лекции, сами делают учебные проекты, а затем разбирают их на шаги. Наставнику не приходится каждый раз придумывать курс заново. Он помогает конкретному человеку разобраться с тем, что уже подготовлено.
В учебной части мы даём знания и начинаем формировать навыки. Производственная нужна, чтобы проверить их в новых обстоятельствах. У человека появляются менеджер проекта и тестировщик, требования к качеству, сроки. На первом проекте мы смотрим, с какой скоростью он работает и какой результат получает. На следующих — что изменилось и с чем ему ещё нужна помощь.
Так устроены градирование, акселерация и переход в «Лигу». Во время первых этапов студент продолжает учиться и денег за работу не получает. В «Лиге» он уже стажируется в настоящем производстве: наша аутсорсинговая компания делает фронтенд для заказчиков, и эта работа оплачивается.
На всём пути остаётся команда сопровождения. Кураторы и другие специалисты помогают человеку справляться с трудностями, когда он уже вышел за пределы учебной программы. Производственная практика не означает, что его оставили одного.
Для нас главный показатель — трудоустройство в компанию. Работу в собственной «Лиге» мы в этот результат не включаем: она остаётся частью подготовки.
Наставник, группа и собственный темп
Александр Патлух описывает другую организацию обучения в Яндекс Практикуме. Студент начинает с группой, изучает теорию в тренажёре, делает проект и отдаёт его на проверку. Материалы готовят авторы, редакторы, иллюстраторы и разработчики, а код проверяет отдельная команда ревьюеров.
К наставнику можно прийти с вопросом, но готовое решение он обычно не выдаёт. Его задача — подсказать направление поиска, помочь подумать, поделиться своим опытом. За это Практикум иногда критикуют: студент ждёт, что ему объяснят, как написать код, а получает предложение разобраться с частью задачи самостоятельно. Саша считает такого наставника старшим товарищем, а не ещё одним лектором.
Наставники проходят собственную школу. Для опытного разработчика это возможность потренироваться в общении и сопровождении людей, которая затем пригодится, например, в работе тимлида. Помимо ответов на вопросы и разбора проектов возникают неформальные встречи: можно обсудить рабочие истории, которые не помещаются в учебный материал.
Называются эти люди наставниками и у нас, и в Практикуме, но я бы не делал вывод, что роли одинаковы. Для такого сравнения нужно подробно разобрать обязанности и процесс, а не сопоставить два коротких описания.
В Практикуме к этому моменту есть программы веб-разработчика на 10 и 18 месяцев. В первой спринт длится две недели, во второй — месяц. Разница не сводится к темпу: в длинную программу добавляют TypeScript и проектные месяцы. Во время таких месяцев студенты сосредоточены на разработке для некоммерческих организаций. Мастерская договаривается с заказчиками, участники распределяют задачи, осваивают совместную работу с Git. Это время для практики без очередной порции теории.
Есть и программы для тех, кто уже работает: интенсивное изучение React и обучение для разработчиков, которые хотят вырасти после первой джуновской позиции.
Кирилл Мокевнин рассказывает, как разнообразие форматов появилось в Hexlet. Проект начинался с небольших автоматизированных курсов, ориентиром служила Codecademy. Уже в 2013 году у Hexlet были тренажёр и автоматические тесты: человек мог проходить материал самостоятельно. При этом люди устраивались на работу, хотя первоначально команда даже не строила продукт вокруг обещания трудоустройства. Она давала знания, которые хотела видеть у программистов.
Потом появились проекты, занятия в группе и персональная работа. Из одной базы курсов можно собрать разные маршруты: пройти профессию самостоятельно по подписке, заниматься с наставником или учиться в группе. Между вариантами можно переходить. Кому-то становится понятно, что дальше он справится сам; кому-то неудобно задавать вопросы при других и нужна личная работа.
Кирилл приводит пример своей сестры: она сама оплатила подписку, прошла обучение и нашла работу. О покупке подписки он узнал из уведомления в Slack.
При этом групповое обучение в Hexlet асинхронное: без общих жёстких дедлайнов и спринтов. Ориентир для профессии — восемь месяцев, но человек может двигаться медленнее, если выделяет меньше времени на занятия. Сложность для школы — сохранить общение и пользу группы, когда её участники находятся в разных местах программы.
Командной работе тоже приходится учиться
У Школы разработки интерфейсов Яндекса другая отправная точка. Сергей Бережной объясняет, что ШРИ ждёт людей с некоторой подготовкой и даёт достаточно сложное вступительное задание. За три-четыре месяца участники проходят теоретическую часть с лекциями практикующих разработчиков и домашними заданиями, затем делают реальный проект в команде и защищают его.
Сергей предлагает относить к профессиональным навыкам и умение проводить ревью кода, и парное программирование. Знать язык недостаточно, когда работаешь вместе с другими. Для многих участников именно проект в ШРИ становится первым таким опытом.
К обучению Сергей пришёл через найм: Яндекс не мог найти на рынке столько разработчиков, сколько требовалось, и пришлось готовить их самим. При этом у него долго сохранялось университетское предубеждение, будто преподавать идут те, кто не справляется с практической работой. Со временем вопрос перевернулся: кому учить, если не людям, которые сами умеют делать?
Кирилл тоже начинал с найма и подготовки программистов при открытии филиала компании. Саша Патлух пришёл в образование после собственного трудного самостоятельного старта: ему хотелось делать обучение, которого не хватало ему самому. Разные форматы появились из разных задач, поэтому искать среди них единственный правильный было бы странно.
В опросе зрителей эта перемена уже видна. Самостоятельно учились 41% ответивших, на курсах — 27%. А рекомендовали бы знакомым курсы 47%, самостоятельное обучение — 35%, вуз или колледж — 16%. Это ответы аудитории конкретной трансляции, но разница между собственным путём и советом другим показательна. Люди не обязательно хотят, чтобы новичок повторял все их затруднения.
Сергей вспоминает, как учил брата разработке: старался провести его более коротким путём. Саша замечает, что установка «я страдал — пусть и другие страдают» всё ещё встречается и мешает начинающим.
Инженерное мышление и первые задачи бизнеса
Hexlet Кирилл строил вокруг инженерии. Первые курсы опирались на «Структуру и интерпретацию компьютерных программ» — SICP. Начинающему без подготовки там было тяжело. Программы с тех пор изменились, но замысел сохранился: через JavaScript учить программировать, чтобы затем человек мог перейти к другим языкам и подходам.
Иногда другой язык помогает объяснить и сам JavaScript. Например, каррирование в Hexlet показывают через Haskell, не акцентируя название языка. По наблюдениям Кирилла, так студенты понимали идею лучше. Он также предлагает знакомиться с Clojure и Elixir: задача шире освоения одного привычного синтаксиса.
До React студенты делают несколько проектов, в том числе фронтенд без фреймворка. Разбирают архитектуру и конечные автоматы. На этом фоне React, по отзывам выпускников, оказывается одной из более понятных частей программы. Курсы проходят и опытные разработчики: им нужно собрать разрозненные знания и разобраться глубже. Кирилл вспоминает действующего разработчика Яндекса, который возглавлял рейтинг Hexlet и участвовал в его открытых проектах.
Тестирование начинается примерно со второго месяца. Сначала студенты видят проверки без специального фреймворка, затем работают с Jest и React Testing Library. Фундаментальный подход не означает отказа от инструментов, которыми пользуются в работе.
У нас точка приложения другая. Мы готовим джунов, причём берём людей с очень разным прошлым, без входного тестирования. Новичок нужен бизнесу для конкретных задач: сделать форму, сверстать сайт, запрограммировать часть интерфейса. Проектирование космолёта будет потом, если человек захочет в эту сторону развиваться.
Моя задача — дать прикладные навыки и одновременно заложить основу для дальнейшего роста. Ограничиться набором рецептов нельзя, но и строить всю начальную подготовку вокруг будущих задач сеньора было бы неверно.
Чтобы понять, чему учить, приходится изучать саму работу. Последние три года мы много общаемся с рынком и используем опыт «Лиги»: она делает проекты для разных компаний, поэтому через неё видны повторяющиеся задачи. Между производственной и авторской командами есть обратная связь. Авторы могут включать в программу то, с чем выпускник действительно столкнётся.
Практикум тоже отталкивается от первой работы. Саша говорит о постоянных разговорах с тимлидами и исследовании требований к джунам. Но выделяет ещё одну сторону — повседневное состояние студента. Если человек перестал понимать материал, приходится менять объяснение, искать другой формат, помогать ему вернуться к работе. Программа может быть сильной технически, но этого мало, если студент не способен её пройти.
Когда переходить к React
Вопрос «зачем вообще учить фреймворку, если его можно освоить на работе за неделю» звучит разумно только до встречи с конкретным новичком и конкретной вакансией.
Кирилл сначала обращает внимание на ожидания самих студентов. Человек читает вакансии, выписывает названия технологий и ищет их в программе курса. Если React отсутствует, объяснить ценность остального становится трудно. Одному знакомому можно подробно рассказать, почему важен фундамент. В массовом обучении такое объяснение приходится доносить до каждого заново.
С алгоритмами в Hexlet возникла обратная проблема. Команда считала их необходимыми, в том числе для собеседований, но название курса вызывало возражения: зачем алгоритмы фронтендеру? Тогда отдельные алгоритмические задачи включили в курс по массивам. Люди изучали нужные идеи, не спотыкаясь о само слово.
Момент перехода к React Кирилл определяет по умению работать с коллекциями: преобразовывать данные, делать агрегации. Ему важнее увидеть, что человек начал мыслить алгоритмически, чем выдержать одинаковое для всех число недель. При этом слишком долго откладывать прикладной результат тоже нельзя: он поддерживает желание учиться.
У Практикума был болезненный опыт проверки идеи на рынке. Перед запуском команда поговорила с тимлидами. Те просили хорошее знание JavaScript. Программа с React уже была задумана, но после исследования её переделали в пользу JavaScript.
Когда первые выпускники пошли устраиваться, они получили тестовые задания на React. На выполнение давали три дня. Даже при хорошем знании языка новичку трудно одновременно освоить незнакомый инструмент и сделать работу в такой срок. На второй год React пришлось добавить.
Саша при этом не предлагает начинать с фреймворка без HTML, CSS и JavaScript. Нужна база, с которой человек понимает происходящее. Дальше можно писать на React и получать первую работу, продолжая изучать программирование. Одна библиотека эту учёбу не завершает.
Выбор React в Практикуме связан и с доступной экспертизой внутри Яндекса, и со спросом на рынке. Веб-программа включает также Node.js и Express; для длинного формата планируется Nest, на котором удобнее показывать некоторые архитектурные идеи и TypeScript. Обсуждая альтернативы, Саша упоминает переход между версиями Vue и ещё молодой SvelteKit: включение нового инструмента в большую программу требует устойчивой основы.
Мне в исследовании требований не хватает ещё одного вопроса: какие задачи будет выполнять джун? Фраза «нужен React» сама по себе мало что объясняет. Иногда за ней стоит небольшая форма, иногда — ожидание, что человек со временем возьмёт гораздо больше. Это разные требования к началу работы.
Даже в нашей профессии React-разработчика около 80% времени занимает не React. Студенты изучают JavaScript и в середине программы проектируют архитектуру без помощи фреймворка — такую, с которой позже будут работать через React. Мне важно, чтобы они понимали устройство решения и могли менять инструменты.
И когда мы говорим, что кто-то освоил фреймворк за неделю, стоит уточнить, какой опыт у этого человека. Для мидла или сеньора это вполне возможно. Но мы учим людей, которые ещё вчера работали экономистами, а сегодня хотят делать интерфейсы. Им только предстоит накопить тот опыт, который ускоряет освоение нового.
Что показывать работодателю
Стоит ли скрывать пройденные курсы из-за предвзятого отношения к выпускникам? Саша считает, что прятать проделанную работу странно. После неё остаются проекты и коммиты, по которым можно увидеть результат. По его наблюдениям, предубеждение постепенно ослабевает: разобраться во фронтенде самостоятельно становится сложнее, и необходимость помощи признают даже те, кто раньше относился к курсам скептически.
Я смотрю на это со стороны навыков. Если человек устраивается разработчиком после экономического вуза, сам факт такого диплома мало говорит о его пригодности. С сертификатом Академии, Hexlet или Практикума та же история: он ничего не гарантирует. У кандидата есть более сильное доказательство — то, что он умеет делать.
Кирилл добавляет другой опыт. Ещё до Hexlet он нанимал много джунов и настораживался, когда видел резюме из сплошных сертификатов. За ними иногда оказывался человек, увлечённый прохождением курсов, но не практическим результатом. Это не утверждение, что любой большой список обучения плох. Кирилл говорит именно о своём опыте найма и советует не превращать резюме в коллекцию свидетельств из пяти школ с одинаковым направлением.
При этом некоторые работодатели сами рекомендуют Hexlet в вакансиях, потому что довольны выпускниками. Отношение к школам неодинаково.
Откуда возьмутся следующие мидлы
Большое количество резюме начинающих не отменяет нехватки разработчиков. Компании нужны люди, способные выполнять её задачи. Число откликов и число подготовленных специалистов — разные вещи.
В конце 2021 года я называю около 300 выпускников профессий Академии за год, не включая самостоятельное обучение. Кирилл ожидает порядка тысячи человек после завершения текущего цикла профессий Hexlet, но сравнить общие числа мешают разные форматы. У Практикума в разговоре нет сопоставимой цифры именно по веб-факультету. По этим ответам невозможно посчитать весь рынок, но масштаб собственной работы школ пока не выглядит причиной его переполнения.
Сергей вспоминает, как ещё в университете решил не идти в веб: ему казалось, что веб-разработчиков уже слишком много. К 2021 году рынок вырос, а спрос никуда не исчез. Он видит программирование как новую грамотность, которая будет нужна во всё большем числе областей.
Кирилл уточняет: не все джуны со временем доходят до старших позиций. Кто-то перестаёт расти, у кого-то меняются обстоятельства. Нельзя взять число выпускников и считать, что через несколько лет столько же людей станут сеньорами.
Но без начинающих будущим мидлам вообще неоткуда взяться. Несколько лет назад компании боролись за опытных разработчиков и перекупали их друг у друга, а новых людей приходило мало. Само появление потока джунов уже позволяет строить дальнейшую работу.
Она не обязана целиком переходить от образовательных компаний к работодателям. В начале карьеры школа занимает почти всё информационное пространство человека. Позже её участие уменьшается, меняются форматы помощи. Но вопрос «как мне стать мидлом» остаётся трудным: слишком много направлений и слишком мало понимания, какое нужно сейчас. Помогать с этим можно и после первой работы.