Pet-проекты, заметки и практика. Как перейти из backend-разработки в ML
В «Криптоните» работает Сергей Аверкиев (@averkij). Он занимается исследованиями в области речи и текста в лаборатории больших данных и статистики. Но до этого много лет он работал бэкенд-разработчиком.
Мы поговорили с Сергеем и узнали, как происходил переход из одной сферы в другую, сложно ли было на это решиться, и что он посоветует тем, кто тоже думает сменить область. Бонусом – курсы и комьюнити.
— Чем ты занимался до того, как пришел в «Криптонит»?
— Я окончил МГТУ им. Н.Э. Баумана по направлению «Прикладная математика», работал бэкенд-разработчиком в разных компаниях около 10 лет. На последнем месте работы писал высоконагруженные инфраструктурные сервисы для бэкенда. Это была сложная инженерная задача.
— Почему ты решил сменить деятельность?
— Наверное, надоело писать инфраструктуру. В какой-то момент стало слишком просто работать, захотелось чего-то нового.
Тогда «data science» и «машинное обучение» были на слуху, и мне стало интересно. Для меня это не принципиально новая сфера, она связана с программированием. Но сама предметная область гораздо шире: машинное обучение применяется в медицине, для распознавания изображений, генерации текстов и т.д.
— Как происходил переход из backend-разработки в Machine Learning?
— Вначале я и не планировал менять сферу деятельности. Перед тем, как прийти в «Криптонит», я три года занимался машинным обучением на уровне хобби. В первый год проходил различные курсы на платформах Coursera и Stepik, смотрел тематические видео на YouTube.
Я увлекаюсь языками, поэтому поучаствовал в соревновании на машинный перевод с китайского на русский и выиграл его. Подарили часы. Больше ничего нигде не выигрывал?.
Потом придумал хобби-проект Lingtrain, связанный с языками и машинным обучением. Написал про него на «Хабре». Проект многим понравился и оказался полезным.
А ещё по просьбе бывших однокурсников провел в Бауманке [МГТУ им. Н. Э. Баумана] спецкурс лекций по обработке естественного языка (Natural Language Processing). И, когда постепенно накопились все эти знания и проекты, я решил перейти в новую область.
Переход на новое место работы занимает немного времени: ты открываешь резюме, откликаешься, а дальше все стандартно. А вот переход в новую область занял у меня два-три года.
— Как тебе удалось совмещать работу фултайм, серьезный pet-project и преподавание в Бауманке? Как хватило мотивации?
— Не нужно искать дополнительной мотивации, чтобы съесть мороженое или конфеты?. Когда долгое время работаешь на одном месте и занимаешься одной и той же работой, ты начинаешь быстрее и легче выполнять свои рабочие задачи – свободного времени становится больше. И тут ты можешь смотреть соцсети, а можешь потратить это время на курсы, свое хобби, личные проекты.
Есть такой вирусный ролик, где у программистов спрашивают, сколько часов в день они работают. Молодой программист отвечает, что работает по 8 часов в день, а опытный говорит, что вообще может не работать, и компания не сразу об этом узнает. На самом деле свободного времени достаточно.
— Трудно было найти работу в новом для тебя направлении?
— Нет, не очень. Мне стали писать после того, как я опубликовал статьи на «Хабре»: HR-менеджеры часто ищут там авторов и пишут им в LinkedIn.
На самом деле, труднее было даже не найти новую работу, а расстаться со старой.
Обычно люди работают 3–4 года и переходят в новое место. Но когда долго работаешь в одной компании, то притираешься к коллективу: у тебя есть друзья, много воспоминаний, комфортный офис, какие-то плюшки. Ты примерно знаешь, что будет в будущем.
Новое место – это всегда сюрприз. Если с рабочими проектами еще более-менее понятно, то какой будет коллектив — ты по собеседованию не поймешь. Вдруг ты придешь, а у тебя злой начальник, а коллеги ничего делать не умеют.
То есть труднее решиться на это. Но, если ты уже решился, то, имея опыт, гораздо проще перейти в новую область. Если опыта нет, то можно перейти на младшую должность, особенно если ты разработчик.
— Важен ли коллектив в твоей работе?
— Многие считают, что программисты – закрытые интроверты, которые любят работать в одиночестве. Такие тоже есть, но в среднем это обычные люди.
Для меня коллектив очень важен. В любой работе у тебя все равно будут возникать трудности. И тут важно, чтобы ты мог обратиться к коллегам с вопросами и получить на них ответы.
— Стоит ли бросаться в новую сферу, не сделав себе подушку безопасности?
— Ну, шанс ошибиться есть всегда. А копить деньги важно вне зависимости от того, переходишь ты на новую работу, или нет. Иметь у себя какую-то заначку всегда полезно.
Мой переход из бэкенда в ML был спокойным и постепенным.
Но всё зависит от ситуации. Я знаю пример, когда человек брал кредит на 600 тысяч, уходил со своей работы и изучал разработку под мобильные платформы. Когда деньги заканчивались, он перешёл на новую работу как Android-разработчик.
Я бы не сказал, что какой-то из этих путей неправильный. Среди тех, кого я знаю, все, кто искал – в итоге находили работу.
— Какое образование должно быть у ML-инженеров и что делать, если нет технического бэкграунда?
— Профильных образовательных программ по машинному обучению не очень много в стране. В основном это техническое образование, хотя у меня есть знакомые, которые становились разработчиками, имея гуманитарные специальности.
Много примеров, когда люди из бухгалтеров, аналитиков, помощников переходили, например, в тестировщики, где поначалу не нужен глубокий технический бэкграунд. Потом они росли как QA-специалисты или переходили в разработку. Если поставить себе цель, то через года-два спокойно станешь разработчиком.
— Что ты посоветуешь тем, кто хочет перейти из одной специальности в другую?
— Во-первых, с самого начала делайте практические вещи. Потому что, сколько бы теории ты ни учил – без практики она забудется, а твои наработки останутся. Потом ты сможешь показать их на собеседовании. Мне помог pet-project и GitHub. Все твои проекты выступят дополнительным аргументом при устройстве на работу.
Во-вторых, важно быть в теме той сферы, куда ты хочешь перейти: нужно следить за новостями, читать статьи, вступать в сообщества.
Если говорить о машинном обучении, то я бы посоветовал крупнейшее русскоязычное комьюнити — ODS (Open Data Science).
В этом сообществе десятки тысяч человек и более ста каналов на разные тематики, например: голос, обработка текста, NLP, поиск работы, вакансии и др. Там многие готовы помочь тебе с любым вопросом, даже с рабочим.
Ещё поделюсь полезным лайфхаком, как в Telegram не потерять важные сообщения в каналах. Допустим, у тебя 20-30 тематических каналов. Естественно, целый день ты не можешь их читать. Можно настроить бота «Feedgram»: просто скидываешь ему репосты каналов, которые ты хочешь читать, и задаешь ему время. А он тебе в заданное время присылает одним уведомлением все сообщения за сутки. Можно отписаться от 20 каналов и раз в день читать один.
В-третьих, не надо бояться новых, незнакомых задач. В любом случае придётся столкнуться с практической стороной решения задач, которую ты нигде, кроме как на работе, не узнаешь: на курсах и в университете все равно актуальных прикладных задач практически не дают. Не бойся ошибок – они все равно будут и придется их решать.
— Чтобы не сесть в лужу при переходе в другую сферу, какие три момента должны быть продуманы?
Должна быть финансовая подушка, которая придаст тебе уверенности. И должно быть понимание, что это – твоё. Мне кажется, этого достаточно.
И вот ещё несколько курсов, которые помогут освоиться в новой области.
◼ Вводные курсы по машинному обучению от МФТИ. Регулярно происходят перезапуски, рекомендую учиться во время них и делать домашние задания.
◼ Хороший курс по NLP на платформе сообщества ODS. Тоже периодически происходят перезапуски.
◼ Подборка открытых курсов Стэнфорда, связанных с машинным обучением. Тем много, по NLP выбирайте CS224U.
Во всех курсах есть отсылки к статьям, видео и упражнения, так что для постижения основ этих материалов точно хватит.