
Пару лет назад я понял, что хочу заниматься машинлернингом, а спустя год обучения и поисков, полсотни откликов и десяток проваленных собесов, я наконец устроился на свою первую работу дата саентистом.
За это время меня пару раз уже спрашивали о советах на этом пути, поэтому я подумал, что неплохо было бы их записать где-нибудь в одном месте. В этом рассказе приводится состояние рынка джуновых вакансий Москвы в 2019 году. Как говорится, лучшее время, чтобы написать этот пост было год назад, второе лучшее — сейчас.
Как обстояли дела на старте
За спиной у меня были 4 года бакалавриата по прикладной информатике в почившем ныне вузе. Звучит плюс-минус релевантно, но по факту из универа я вынес как подсчитывать человеко-часы на разработку CRM-системы, а как писать код — учился потом сам. Так что помогала мне скорее лычка, чем знания из того времени.
После универа — 5 лет работы в IT техническим писателем. Как бы мне не нравилось слово “технический” в этой должности, для разработчиков и иже с ними оно не особо звучало, и каждый раз свою причастность приходилось доказывать со стартовых позиций не-технического специалиста.
Первые шаги
Итак, в январе 2019 я решил что быть техписом мне надоело, 100-й API reference функционально едва ли будет сильно отличаться от 99-го, а по деньгам — и от 50-го. Тогда я начал думать чем бы еще заняться и вскоре обратил внимание на машинное обучение. Благо, Каггл был уже у всех на слуху, а их раздел kaggle/learn — это, пожалуй, самое нежное окунание в область, которое я встречал. Лучшая и одновременно худшая фича этого раздела — он знакомит именно с машинным обучением, а не со всем дата саенсом. Вам покажут что такое питон и как в нем на раз-два обучить модель, а о стоящей за этим математике и статистике — практически ни слова.
Долго ли, коротко ли, но я прошел весь этот раздел и даже поучаствовал там же в паре тренировочных соревнований. С тех пор на память осталась эта запись:
Оказавшись в топ 90% участников, я подумал “Господи, как же я хорош”. Тот факт, что участники выкидываются из лидерборда спустя полгода и что это учебный конкурс, который не считается вообще никем и никак, меня нисколько не смутил. Было решено, что можно уже и писать по знакомым с вопросом “Ну че, возьмешь к себе?”.
Спустя пару таких бесед выяснилось, что знать команды fit и predict это мало, а хорошо бы знать еще кучу всего. Мне понакидывали ссылок на настоящие курсы и отправили восвояси. 🎵А когда всё пройдешь — приходи на собес🎵.
Уроки с этого этапа:
- Использование fit&predict — невероятно маленькая часть дата саенса, хорошо бы еще знать математику и статистику, хотя бы на уровне первых курсов чего-либо околотехнического.
- Дата саенс разный. Где-то это построение отчетов для бизнеса, где-то — машинное обучение в проде, где-то — вообще изобретение новых алгоритмов. Для начала реши что из этого тебе по душе, а потом уже копай более конкретно.
Обучение без подкрепления
Вооружившись ссылками, я пошел учиться. Общий подход у меня был не особо структурированный, а здесь я попытаюсь собрать более-менее полный список ресурсов, которые мне помогли.
Из маст хэв:
- Специализация на Курсере, основа основ. Пожалуй, лучшее и наиболее полное изучение темы. Да, 6 курсов каждый по 4 недели. Да, задания над каждым из которых можешь просидеть все выходные. Да, второй питон (сейчас, говорят, переписали наконец на третий в 2020 году). Но это прям то что надо, фундаментальнее только ШАД. Курс необходимый, но не достаточный. Мелкий лайфхак: говорят, Курсера разрешает проходить всю спецуху бесплатно, если написать им что угодно в письме и попросить финансовой поддержки. Мне показалось, что это опция скорее для студентов, а если ты и так уже сейчас работаешь (и благополучно крадешь рабочее время проходя курсы), то просить еще и халявы от Курсеры — не солидно.
- Статистика на Степике, 2 коротких курса. Что-либо более сложное на собесах не спросят. Лично мне объяснения оттуда заходили гораздо лучше, чем аналогичные объяснения из специализации. Задачки отсюда спрашивались чуть ли не в 60% компаний.
Из того, что помогало еще:
- sql-ex.ru. Древний, но хороший задачник. Берешь и решаешь постепенно, никаких хитростей. В последствии выяснится, что из 10 собесов SQL будут спрашивать едва ли на одном, и ничего сложнее оконных функций не потребуется.
- ODS. Лучшее русскоязычное сообщество по data science. Инвайты в слак аппрувят когда как, наберитесь терпения. Внутри — куча инсайтов, профессионалов и объявлений о вакансиях. Лишним не будет, хотя именно как место для поиска первой работы помогает не сильно. Но об этом чуть ниже.
- Мамкин Data Scientist — канал в Телеге про изучение DS. Куча рекомендаций и подробные планы изучения конкретных тем.
- Плейлист про алгоритмы и структуры данных + литкод. Если еще не в курсе про алгоритмическую сложность и все такое — сначала решите, надо ли оно вам. Rule of thumb: дата-аналитику, строящему графики для бизнеса, это не надо. Машин-лернинг-инженеру, чей predict вызывается в проде в реалтайме — надо. Смотрим и охреневаем от разницы того, что преподавали на программировании в вашей шараге и что преподают на первом курсе Физтеха. Плакать о 4 потерянных годах — по желанию.
- Pet projects. Все нанимающие товарищи как один говорят что хорошо, когда у кандидата есть пет проджекты, но по моему опыту про мои спрашивали крайне редко. Возможно это потому, что в них не было ничего особенного. Подумайте, если ваш проект отличает кошку от собаки, то таких уже тысячи, ими никого не удивить. Не стоит тратить время, если цель проекта именно выделиться, а не самому получше разобраться в какой-либо теме.
Пройдя эти курсы, я вновь решил, что ну теперь-то я молодец и начал рассылать резюме. Делал я это на Хедхантере и уже буквально через пару недель и 10 откликов у меня было первое приглашение на собес.
Первые онсайты
Перед собесом я нервничал и повторял все подряд. И как в pandas вывести конкретные колонки, и зачем нужна кросс-валидация, и джойн табличек в SQL, и как в общих словах работает алгоритм случайного леса.
В итоге все собеседование строилось на том, то интервьюер просил меня по памяти написать на бумажке какую-либо формулу, а я отвечал, что помню где и для чего она используется, но воспроизвести смогу разве что перебором. Товарищ говорил “ну всё понятно с тобой” и… задавал написать следующую, сука, формулу.
С собеса я вышел спустя 15 минут после начала, мой антирекорд за все время поисков. Судя по тому, что на последних двух NIPS’ах доклады этих ребят замечены не были, такой стиль интервью был скорее прихотью собеседующего, чем необходимым этапом отбора. Из положительного — нигде дальше такого формата не встречал, явный outlier.
Еще 2–3 недели рассылок резюме и меня зовут на второй собес. На нем — просто разговор за culture fit, пара задачек в стиле почему люки круглые и “мы пришлем задание на дом”. В самом задании ничего особенного. Найти/заполнить пропуски в данных, написать запросы для вывода интересующей информации, построить пару графиков. Вскоре после тестового — оффер. Так, подождите. А почему в задании не было ни слова про машинное обучение? И вопросы только за жизнь? Паучье чутье забило тревогу и я слился.
Забегая вперед: последующие полгода мотаний по собесам и отказов я думал “какой же я идиот”. Следующий год работы над чем-то более интересным — “слава Богу”. Есть ли тут мораль? Нету. Мог и полтора года потом мотаться, мог и спустя 2 месяца после выхода к ним в край заскучать.
После этих двух собесов остальные были гораздо менее примечательные и более редкие. На 10 отправленных резюме реагировали максимум на 1–2. Между каждым онсайтом проходило по 3 недели, я резался на различных вопросах от объяснения AUC-ROC до понимания как работает backpropagation. Одной подобной оплошности хватало для того, чтобы мне в итоге приходил отказ, но я уже проходил собесы до конца и расставался “на добре”. Видимо, всегда довольно быстро находится кто-то без таких проколов.
Там, где я тупил, мне даже довольно подробно поясняли как будет правильно, хотя и выглядело это в тот момент примерно так:
Уроки:
- Курсы надо было не только пройти, но и понять практически на МАКСИМАЛЬНО глубоком уровне. Бывает, смотришь рассказ про вывод какой-нибудь формулы, думаешь “а, ну тут примерно ход мысли понятен” и идешь дальше. А потом обязательно срежешься на вопросах про детали. Так было кучу раз, для меня самый важный совет этой главы.
- Канал #jobs из слака ODS помогал не сильно: количество джуновых вакансий там крайне мало. Да, конверсия “написал по поводу вакансии — пригласили на собес” стремится к 50%, но, учитывая количество джуновых вакансий, работало оно хуже Хедхантера.
- Единственная разница в собеседовании на стажера и на джуна в том, какие деньги предлагают. По вопросам всё примерно одинаково, так что не стоит ограничиваться только первым типом вакансий.
Хэппи-энд
Сказать, что все это время я пребывал в подавленном состоянии — ничего не сказать. Отказ за отказом, между которыми по 3 недели игноров — едва ли рецепт для хорошего настроения и уверенности в своих силах. Единственное что сглаживало ситуацию — у меня была основная работа, а значит хотя бы вопрос денег не стоял. Реши я предварительно ротироваться на мороз, было бы еще сложнее.
Так продолжалось до середины ноября, пока наконец после очередного отправленного резюме меня не пригласили в продуктовую команду небольшого интегратора. Собес в целом стандартный — поговорили за предыдущий опыт, попросили решить Two Sum, рассказал какие задачки решал до этого (кроме задач с курсов на тот момент уже приводил и тестовые задания других компаний). На следующий день — звонок и приглашение поговорить с биг боссом, после выходных — оффер, спустя 3 недели — новая ксива и новая работа.
Статистика всего процесса:
На новой работе — куча всего. И изучение Скалы, и временные ряды, которых до этого я практически не касался, и первые чтения arXiv’а, и увлекательный мир Спарка. Но все это — когда-нибудь потом.
Видимо, в таких случаях подводят к мысли, что в итоге все будет хорошо. Достаточно просто ходить на собесы и рано или поздно сойдутся 2 фактора: ты выучишь все пробелы, которые вскрывались на предыдущих собесах и ты встретишь команду, которой нужно от тебя именно та часть DS, которую ты умеешь.
На этом всё. Если что-то из этой статьи тебя зацепило, хочется пожаловаться на жизнь или рассказать мне, что я не прав — пиши в комментах здесь, в twitter или telegram.