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

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

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

Работодатели действительно хотят нанять разработчиков, которые будут эффективно изучать JIT.

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

Я думал об этом сегодня утром, за последние 3 недели я выучил и использовал в коде:
- Go
- gRPC
- GraphQL
- k8s (с Helm)
- NATS

Однако ни одна из этих тем не освещена в нашей учебной программе здесь, в Launch School. Так что почти вся его работа за эти три недели была основана на JIT-обучении.

Загвоздка в том, что способность к обучению JIT развить непросто. Ниже я расскажу, почему это так и как разблокировать JIT-обучение, но сначала давайте разберемся, почему существует такое несоответствие между тем, что, по словам работодателей, хотят объявления о вакансиях, и тем, что на самом деле хотят работодатели.

Суть проблемы

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

Давайте сделаем шаг назад и посмотрим на это с точки зрения работодателя. Каждый день они слышат, как собеседники говорят им: «Я не знаком с языком X и структурой Y, но я подберу их на работе». Кандидаты искренни, когда говорят это, думая: «Мне просто нужен шанс». У всех есть желание, но у большинства нет необходимых навыков, чтобы действительно выполнить это обещание.

Итак, если JIT-обучение так важно, как люди могут достичь этого навыка? Разработчикам необходимо сосредоточиться на создании двух ключевых компонентов обучения JIT:

  1. твердое понимание основ программирования и
  2. знание того, как учиться

Эти две вещи открывают JIT-обучение. Не случайно эти две вещи составляют основу учебной программы Launch School - наша цель - помочь студентам отточить навыки обучения JIT, которые так востребованы работодателями.

«Необходимый опыт» - чтение между строк

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

2 ключевых компонента обучения JIT:

1) Прекрасное понимание основ программирования

2) Знание того, как учиться

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

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

Так что же делать неопытному разработчику? Ваша задача - доказать, что у вас есть основные компоненты обучения JIT: 1) сильные технические навыки, основанные на владении фундаментальными концепциями программирования, и 2) способность учиться быстро и эффективно.

Практика обучения и найма JIT

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

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

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

JIT Learning and the Launch School Curriculum

В Launch School наша основная цель - помочь нашим ученикам развить способность к обучению JIT, которая необходима для получения работы в ведущей инженерной компании. Если мы делаем свою работу правильно, то к тому времени, когда они заканчивают нашу программу, наши ученики уже сделали две вещи: 1) овладели основами программирования и 2) научились учиться. Объедините эти два компонента, и вы получите истинную способность к обучению JIT. Это самый важный навык, которым мы хотим, чтобы наши ученики ушли, когда они завершили Launch School.

Освоение основ

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

  • Как хорошо выучить язык программирования
  • Парадигмы программирования, такие как объектно-ориентированное программирование
  • Решение проблем с помощью кода, с особым упором на решение задач кодирования в обстановке, подобной интервью.
  • Тестирование
  • Сети
  • Базы данных

Обратите внимание, что в этот список не включены библиотеки frameworks-du-jour или продуктивные библиотеки или способы создания функций - это фундаментальные «атомарные» концепции.

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

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

Как учиться

Строя ментальные модели фундаментальных концепций программирования, вы одновременно строите ментальные модели обучения тому, как учиться, - второй компонент обучения JIT.

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

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

Помимо преимуществ MBL, вы также захотите немного разобраться в механизмах обучения. Для этого я рекомендую курс Барбары Окли Learning How to Learn на Coursera, а также книгу, прилагаемую к курсу.

Девиз Launch School - «медленный путь». Но, учитывая то, что мы знаем о JIT-обучении, мы можем уточнить это: мы идем по "медленному пути к изучению основ". И в конечном итоге медленное овладение основами - вот что дает возможность быстрого JIT-обучения. Когда работодатели говорят, что им нужны «самые умные люди», они на самом деле говорят, что хотят самых быстрых учеников JIT. Так что выбирайте медленный путь, потому что в конечном итоге медленное - это быстро.

Крис Ли - инструктор Launch School, онлайн-школы для инженеров-программистов. Он имеет более чем 16-летний опыт разработки программного обеспечения, от крупного предприятия до стартапов. Ему нравится программировать, преподавать и говорить о обучении, основанном на мастерстве.