April 22, 2021

Как стать дата саентистом. The hard way

Поделюсь своим путем в эту "самую сексуальную профессию 21 века". До 2018 я занимался не очень связанными с Data Science и Machine Learning (далее DS/ML или по-русски) штуками, я и программировать-то толком не умел! Поэтому у меня регулярно интересуются, как же я дошел до такой жизни, что для этого нужно и как именно я учился-вкатывался. Вот и решил написать пост, а в него положить всяких полезных ссылочек и своих впечатлений, о том, что работает хорошо, а что - так себе.

В анализе данных я работаю уже три с лишним года, с начала 2018 года начал делать первые робкие шаги, в декабре 2018 устроился полноценным Дата Саентистом, да так и продолжаю. Буду периодически по тексту упоминать даты, чтобы было понятно, сколько занимали по времени разные этапы.

0. Вводные данные


Почти сразу после окончания универа (Бонч-Бруевича, "телефонная" специальность) в 2010 году я устроился в мониторинг, он же NOC. Мониторинг - это такая работа, которая требует от инженера знать всего понемножку, а так же уметь из этих (обычно весьма поверхностных и обрывочных) знаний составить картину поломки и понять, кого из "взрослых" будить среди ночи для оперативного устранения. С одной стороны - никакой специализации, с другой - возможность прокачиваться в любом направлении и становится уже полноценным инженером в какой-либо области - сети, железки, администрирование серверов - выбирай, что душе ближе. Лично я в разных качествах, от мальчика на подхвате до старшего смены работал в NOC-е почти 8 лет. И, наверное, 6 из них пытался понять, что же делать дальше, тыкался в разные прилегающие области, но дело как-то совсем не шло.

Типичный мониторинг, когда всё работат в штатном режиме, без аварий

Первые несколько лет разбирался в сетях, наиболее близкой теме к тому, что изучал в универе. Дело шло ооочень медленно. CCNA в конце 2015 года сдал, только для того, чтобы понять, что дальше я коммутаторы-маршрутизаторы изучать не хочу, уж слишком это всё низкоуровневое. После краткого экскурса в информационную безопасность решил, что мне больше подойдет роль ДевОпса - этакого суперадмина, который и в линуксах понимает, и программирует немножко, и вообще совмещает в себе лучшее из программистов и системных администраторов. Сказано - сделано! Начал с изучения всяких линуксовых штук, даже пару экзаменов (LPIC) сдал в 2016 году. В том же году сменил работу, попал в еще более крутой NOC, в котором начал называться SRE-инженером. Официально - Service Reliability Engineer, де факто - Simply Restart Everything :). И стал на еще один шажок ближе к заветной должности DevOps-а. Там же посмотрел на этих самых ДевОпсов поближе и понял что? Правильно, что нафиг мне это на самом деле не нужно. И вообще ни в какие ветки админства мне уходить абсолютно не хочется. Альтернатива, прокачиваться по управленческой ветке, тоже не очень цепляла. Даже если станешь начальником, то руководить будешь NOC-ом. И это не то чтобы плохо, но весь мой предыдущий опыт показал несколько предвзятое отношение со стороны и коллег-руководителей, и более высокого начальства к подразделениям мониторинга. Итог - есть два стула, ни на один садиться не хочется. Что же делать? Учиться дальше.

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

1. Учиться дальше


В некотором карьерном ступоре я продолжил по инерции изучать всякие навыки, необходимые абстрактному ДевОпсу. Один из них - программирование, и я решил освоить Python. Начал с книги-сайта Learn Python the Hard Way (на тот момент ещё полностью бесплатной), в целом, понравилось, неплохой вариант начать хоть что-то делать, если нет вообще никакого опыта кодинга, или, как у меня, с универских лет всё позабылось. После продолжил курсом Complete Python Bootcamp на Udemy. И вот на нем случилось очередное "озарение". Мне очень понравился стиль преподавания, и я решил посмотреть, какие еще у преподавателя есть курсы. Приглянулся Python for Data Science and Machine Learning Bootcamp. И хоть я я на тот момент еще думал "Ну где я, а где машинное обучение, там ж ПРОГРАММИРОВАТЬ надо вовсю, да и матан на статистике сидит, да теорвером погоняет!" Но курс запомнил. В конце концов, раз преподаватель смог мне Python объяснить, то и с чуть более сложными темами справится.

И с математикой, и с программированием в итоге разобрался. С Божьей помощью

Любопытный момент - последним доводом купить курс стала реклама специализации на "Машинное обучение и анализ данных" на Курсере. Я тогда посмотрел на ту специализацию, загорелся DS/ML, пооблизывал слюни - они обещали очень обстоятельно научить всему-всему, от необходимой математики-статистики до нейронных сетех, и за разумное время. Но специализация стоила для меня дорого, около 5000Р в месяц (я тогда не знал, что "финансовую помощь" на Курсере раздают с минимальной проверкой), поэтому я в итоге пошел на Udemy и купил там упомянутый курс. Аж за 10$. Учиться начал в апреле 2017, эту дату можно считать стартом, моментом, когда осознанно покатился в сторону DS. У меня от старта до первой полноценной работы вышло 1.5 года.

DS курс на Udemy, несмотря на его скромный размер, проходил достаточно долго. Тут виновата была уже не прокрастинация, а другие штуки. Во-первых, почти сразу я осознал огромный объем того, что я не знаю (забыл, знаю посредственно) - от теории вероятностей до SQL. Постоянно приходилось брать паузы на минимальное изучение той или иной области. Во-вторых, текущая работа на тот момент не особо позволяла расслабленно проходить курсы прямо на рабочем месте (как я обычно делал ранее). Первая половина дня выдавалась очень напряженной, и совсем неудивительно, что второй учёба шла туго. Но это очевидно сейчас, а в моменте я очень расстраивался и винил себя за "лень" и "прокрастинацию". Что радует - в моменте уже не возникало мыслей "А может, это не мое, надо попробовать что-то другое". В отличие от сетей и линуксов я точно понял, что Дата Саенс, не важно, в каком именно воплощении, это моё, и продолжать определённо хочется.

Вывод второй - совмещать учёбу и фултайм работу может быть тяжело. Не надо расстраиваться и корить себя, если не получается проходить курсы в "рекомендованном" темпе и вовремя решать домашки. И точно в такой ситуации не стоит записываться на (платные) курсы, которые будут отчислять за несданные вовремя работы. Учёба - это марафон, лучше добраться до финиша в своем темпе, чем потратить всю энергию на полпути, выгореть и сойти с дистанции.

2. Набираем опыт


До окончания своего первого курса по DS я даже особо и не думал насчет того, чтобы ходить по собесам. Да и после окончания я понимал, что теперь я не знаю еще больше, чем представлял себе в начале обучения. Классическая ситуация! А делать-то что? Усугублялось всё тем, что ни одного знакомого ни в области DS, ни в чем-то смежном у меня не было, совета спрашивать было не у кого. Сейчас я понимаю, что надо было спрашивать вообще у всех худо-будно айтишных людей - "Ты знаешь как быть, куда идти? А кто может знать?", это наверняка бы выгорело. Но я предпочел идти своим путём (см название поста). Суть моего пути была предельно проста - попытаться на текущем месте работы придумать себе задачи и опыт, который можно будет в резюме обернуть как максимально похожий на работу аналитика. Ну и параллельно продолжать самообразование.

С начала 2018 (9 месяцев с начала обучения) я начал бурную деятельность по поиску и решению любых задач в области NOC/SRE со словом "аналитика":

  • Разобрать крупные аварии и попытаться разделить их на категории? Да, запишем в резюме как "анализ инцидентов"!
  • Ковырять БД заббикса в поисках неправильно настроенных хостов для мониторинга? Да, потренируем SQL!
  • Накостылить кастомные запросы для Джиры на их несчастном JQL чтобы было понятно, кто из коллег в NOC-е сколько тикетов открывает и обрабатыавает? Дайте два, "метрики и анализ работы отдела!"
  • Автоматизировать сбор большого еженедельного отчета с кучей разных источников, и картинок? "Берём!" Тут даже и думать не надо, и python с pandas-ами пригодится, и картиночки красивые в Seaborn-е порисуем.

Примерно через 5 месяцев (апрель-май 2018) подобных упражнений я почувствовал себя достаточно уверенно, чтобы переписать своё резюме под нужным углом и попытаться пробиться на первые собеседования. Накопленного опыта, правильно составленного резюме и собственной наглости хватало, чтобы благополучно проходить HR-фильтр и попадать на технические собесы. Которые, конечно же, либо заканчивались фиаско, либо были в итоге совсем не про DS/анализ данных. Сейчас вспоминать забавно, но в моменте было очень досадно - год учёбы, а выхлопа никакого. Последней каплей стало собеседование в Okko, на котором я сначала долго тупил над простейшей задачей по теории вероятностей, а потом переволновался и не смог внятно ответить ни на один вопрос по машинному обучению. Правда, не то чтобы я знал ответы на все из них и в спокойном состоянии... В любом случае, после такого особенно громкого провала я окончательно расстроился и взял паузу на футбол, как раз начинался ЧМ-2018.

Собеседования, тем не менее, не прошли даром - я понял, какие вопросы задают потенциальному дата саентисту, какие знания - must have, а на что готовы закрывать глаза. И через некоторое время продолжил обучение...

Что прочитал за тот период:

  • Ч. Уилан, "Голая Статистика"; Д. Хафф, "Как лгать с помощью статистики". Не столько учебники, сколько развлекательная литература. Необходимый минимум знаний по статистике из них тоже можно почерпнуть.
  • К. Андерсон - "Аналитическая Культура". Хард-скиллы не прокачивает, но дает представление о том, чем вообще занимаются дата-саентисты. Оказывается, там далеко не только машинное обучение, но и множество других, не менее интересных направлений. Книга "на вырост", если вдруг захочется стать менеджером.
  • Д. Грас "Data Science. Наука о данных с нуля". Впечатления двоякие. В первый заход я ничего не понял вообще и бросил. Вернулся к ней через полгода, когда поднабрался опыта и понял основные концепции. Смысл в изучении и построении своих собственных ML-велосипедов, а книга именно про это, появился. Как первую книгу по DS точно не советую.

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

3. Больше самообразования, больше собеседований


Не могу сказать, что я после первых провалов как-то изменил свою тактику и добавил новых приемов. Досада сменилась дополнительной мотивацией, стало понятно, на какие моменты обратить дополнительное внимание. Первый курс по DS был пройден, что учить дальше? Тратить по 5000Р на ту самую специализацию от Яндекса и МФТИ мне было особо не по карману, поэтому я на той же Курсере нашел другой, бесплатный, курс - "Введение (АХАХАХАХА) в Машинное Обучение", от Яндекса и ВШЭ. В нём мне попалось супер-комбо - образование в стиле российского ВУЗа помноженное на косяки курсеровской платформы (это когда ты значимую часть времени тратишь не на то, чтобы сделать задание, а чтобы грейдер его принял). Курс у меня оставил очень яркие и противоречивые эмоции. Лекции - отвратительные, чистая теория, из которой понятно было процентов 30.

Увы, сопутсвующая лекция воспринималась так же тяжело, как пять этажей формул без пояснений

Причем, на лекциях вообще ни слова о том, как этим всем пользоваться на практике, кода лектор не показывал. После теории (на которой IDE ни разу не открывалась) идёт практика. Суть практических заданий "Ну вот вам датасет, покрутите на нем логистическую регрессию с разными видами регуляризации, ответ к заданию - качество предсказаний в сценарии X при условии Y. Вам понадобится библиотека ххх, вот тут можно доки-справочки почитать, как ей пользоваться. Ну вы взрослые, разберетесь. Удачи!" Казалось бы, зачем себя истязать и проходить такой курс? Но буквально с первых же домашек я понял, что "глаза бояться, а руки делают". И у меня, ОКАЗЫВАЕТСЯ, уже была накоплена критическая масса опыта и знаний, чтобы не только пробиваться через эти задания, но извлекать из себя что-то новое. На таких вот лютых квестах, на грани выполнимого, как раз и растет понимание того, как вся эта теория машинного обучения устроена под капотом. В общем, теоретическую часть курса я категорически не рекомендую, а вот практической все таки можно воспользоваться, в качестве задачника-тренажера.

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

Больше всего запомнилось два собеседования в этот период. Первое было в одну из дочек Газпрома, в качестве тестового задания они предложили провести расчеты того, как нефтепродукты по железной дороге путешествуют по стране. Сама позиция была не очень интересна, но все тестовые в тот момент я старательно делал для наработки скилов. Зарылся в это задание на пару дней, потом еще неделю мне снились все эти Омские, Нижегородские и Москвоские НПЗ, какой груз на них сколько времени проводит, и что в итоге доезжает до морского порта в Петербурге.

Второй запомнившийся собес был от Grid Dynamics, они тогда набирали начинающих спецов на что-то вроде обучения-стажировки. Очень хотелось попасть, по описанию было то, что нужно - и по-английски говорят, и в командировки в Америку отправляют, и всему научат, да еще и денег заплатят. Первый тест у них прошел относительно легко, а вот с основной технической частью случился провал. Тут я виню технику - у нас не сложилось офлайновое собеседование, общались в скайпе. В итоге, мы друга слышали примерно на 3 из 5, постоянно переспрашивали, уточняли, повторяли... Блеснуть умом, когда приходится повторяться и прерываться, очень сложно, а я с тех пор не люблю собеседования в онлайне. Хорошо, что я не знал тогда, что в 2020 у нас только такие и останутся :)

Параллельно с собесами, дальнейшим самообразованием и практикой на работе я так же начал пытаться себе создавать "правильную" информационную среду. Сходил на пару митапов, посвященных DS и анализу данных, начал слушать подкаст Data Framed (там разные эксперты в области DS рассказывают, как дошли вообще до такой жизни), стал читать все подряд о том, как весь этот дата саенс используется на практике. Таким образом, к концу осени 2018 у меня уже накопилась критическая масса знаний (как хардовых, так и околопрофессиональных), опыта прохождения собеседований и решения тестовых заданий, получение офера стало вопросом времени.

Символично, что офер пришел через пару дней после того, как закончил чтение эпичного лонгрида от Вастрика про Машинное Обучение. Статья определенно заряжена на успех! В конце ноября получил предложение от компании Semrush, в декабре начал там работать и до сих пор продолжаю. Успех? Ага, щас... Стало понятно, что по сути, всё только начинается, но это уже тема для следующего поста.

Вывод последний - иногда кажется, что наши долгосрочные усилия не приводят вообще ни к какому результату. А это совсем не так, просто мы ожидаем, что выхлоп будет линейным, а на самом деле он идет с небольшой задержкой (см ниже). Продолжайте, и у вас всё обязательно получится!