Сегодня ровно шесть месяцев как после двадцати лет в науке я ушел в стартап, разрабатывающий ПО для создания синтетических данных, в котором я занимаюсь интеграцией систем машинного обучения в конечный продукт. Поскольку здесь есть люди, которые еще только решаются на такой шаг, я опишу свой путь или, вернее, изменение направления своего пути.
Академия
Я профессиональный физик и получил степень к.ф.-м.н. на Физфаке МГУ. Работал как в теоретической физике, так и в экспериментальной. Статьи в Nature и PRL, более 700 цитирований и индекс Хирша 14. Эти подробности не для того, чтобы помериться с кем-то чем-то, а для понимания общей картины. Если брать контракты длительностью более года, то на таких длительных позициях проработал в четырех странах западной Европы. Все было бы хорошо, но в последнее время наука стала превращаться в бизнес. Люди в университетах только и думают о получении постоянной позиции. Постоянный поиск денег на исследования — написание заявок на гранты начало занимать больше времени, чем занятия непосредственно наукой. Если не имеешь ERC (European Research Council) проект, то ты не заинтересуешь ни один более менее нормальный европейский университет, даже если у тебя есть куча отличных публикаций и проектов. При этом все усилия в конечном итоге могут обернуться просто ничем. Каковы конечные шансы получить позицию? От 0.5 до 2% при попадании в нужное время в нужное место, т. е. это вопрос удачи (привет Даниэлу Канеману и Нассиму Талебу). Десять лет исследований могут оказаться никому не нужными, не «модными». Такая деятельность стала приносить все больше разочарований. А если работа перестает приносить удовольствие, то и все вокруг перестает радовать. Да и статистика указывает на то, что ситуация вряд ли улучшится. Итак, решение закончить академическую карьеру было принято. Вопрос о дальнейшей деятельности для меня был очевиден — программирование. Но быстро сказка сказывается, да не быстро дело делается...
Программирование
Почему программирование, а не датасайнс? Здесь все просто — в программировании и разработке ПО у меня был хоть какой-то опыт. Да, это был ограниченный опыт разработки для личного и внутри-академического пользования, но мой софт работает и им пользуются другие люди в лабораториях и при расчетах. Я разрабатывал системы для сбора данных и контроля больших экспериментальных установок (н-р, рефрижератор растворения с ядерной размагничивающей подсистемой), анализа и визуализации данных на Python. До этого очень много использовал Fortran и немного C++ для численных расчетов. В любом случае, этого опыта было не достаточно для перехода. Надо было «подтянуть» или освоить много нового как в программировании (в том числе, алгоритмы и структуры данных), так и в проектировании ПО. Поставил себе временное ограничение в один год, т. е. это был крайний срок для моего перехода, так как мой контракт тогда заканчивался, а продлевать его я был не намерен, хотя такая возможность у меня была. Также «набросал» небольшой план практического обучения, в который вошли, н-р, создание игр на Python с использованием сценариев из книги «Программирование игр и головоломок» (Jacques Arsac, 1985) и различных небольших программ из «The Programmers Idea» (Coders Lexicon). Кстати, первую книгу я еще использовал много лет назад, когда писал игры для Spectrum ZX. Параллельно начал изучать еще два языка программирования — JavaScript и Go. В принципе, все шло хорошо, благо обучающих ресурсов, книг, примеров в интернете сейчас хоть отбавляй. Однако через какое-то время я стал ощущать необходимость в личном общении с людьми непосредственно занимающихся разработкой ПО, а также в совместной работе над каким-нибудь проектом. Я стал искать такие возможности, учитывая, что я продолжал работать в университете и заниматься самообучением. И, конечно, выручили митапы...
Встречи, проекты
Одна из первых групп была FreeCodeCampVienna, которая в основном сфокусирована на веб-программировании, но это было нормально, так как мне важны были общение и контакты, а также получение опыта совместной работы. После третьей или четвертой встречи мы организовали маленькую группу из пяти человек (потом остались только трое) для работы над проектом WebTags, позволяющим оставлять сообщения друзьям или группам на любом вебсайте. Я занимался бэкэндом, так как с веб-дизайном я не очень дружу, мягко говоря. К сожалению, проект мы довели только до MVP и сделали пару презентаций на митапах, а дальше дело как-то не пошло, но необходимые знания я приобрел. Как в прочем и другой проект, «CarTalk — A community designed for car enthusiasts», начатый в Chingu Voyage-7 команде (свободная глобальная платформа для тех, кто хочет научится работать над совместными проектами) не был закончен. К тому времени я уже начал посещать и другие группы, в том числе и связанные с датасайнс — Vienna School of AI, Deep Learning Meetup in Vienna, Vienna Data Science. Мои интересы начали смещаться в сторону машинного обучения и ИИ, так как в них присутствовала некая «научность», что ни могло не заинтересовать меня...
Немного о науке о данных
Возможность не отдаляться от науки и в тоже время заниматься программированием меня заинтриговала. Я нашел и прошел несколько курсов по машинному обучению, ИИ, работе с большими данными. На митапах была практика, хотя и не столько, сколько хотелось бы. Однако основным приоритетом для меня оставалось общение и контакты. К тому времени уже прошло около восьми-девяти месяцев установленного мной переходного периода и я начал переделывать свое резюме. Кто работал в науке, тот знает, что в научной среде используется curriculum vitae, которое включает в себя практически все детали научной деятельности. Надо было ужать восьмистраничное CV в одностраничное резюме. С одной стороны, проблема небольшая, так как в научном CV много нерелевантной информации, которая никого, кроме университетов не интересует. С другой стороны, было не понятно какая информация может оказаться полезной. В конечном итоге включил почти все, что касалось разработок ПО и анализа данных, а также работа над сторонними проектами. На переработку резюме у меня ушло где-то две недели. Из отведенного мной срока оставалось около двух месяцев и я начал подавать на открытые позиции. Надо отметить, что это был декабрь — месяц, в котором много праздничных дней, да и вообще, все уже обычно в ожидании Рождества и новогодних праздником. Я также понимал, что моих навыков и знаний для работы непосредственно, н-р, инженером машинного обучения еще недостаточно, поэтому я сосредоточился на компаниях, занимающихся датасайнс, но имеющих открытые позиции разработчиков...
Поиск
И я начал рассылать свое резюме. В большинстве случаев отвечали достаточно быстро — за два-три дня. К моему удивлению, не все отвечали мгновенным отказом. Пригласили на пару интервью после телефонных собеседований и тестовых заданий. Однако потом получил отказы. Таких было около десяти. Все это время я продолжал самообразование и общение на митапах. Слушал, вникал, задавал много вопросов. Может быть кому-то надоедал, но в большинстве своем получал дружелюбные комментарии. Меня тогда поразило датасайнс сообщество своей открытостью, чего я уже давно не наблюдал в «обычной» научной среде или крайне редко. Заинтересовало несколько тем, в том числе генерация синтетических данных и защита частных данных. Это выглядело как магия, на самом деле. Создание человеческого лица или генерация вполне себе адекватного C кода с помощью систем машинного обучения. В детстве я прочитал в какой-то книге или журнале о программе, которая могла писать стихи. Потом я написал такую для Sinclair Spectrum ZX, но это был просто перебор в массивах и подстановка правильных слов в правильные места. А тут нет никакого жестко запрограммированного алгоритма создания чего-то нового, что не существовало, но имеющего при этом смысл! Одним словом — круто. Я начал чуть глубже вникать в эти темы, читать литературы и искать алгоритмы. Написал несколько писем людям, которые работали в этой теме в Австрии и где-то в январе я получил приглашение пройти телефонное интервью с тех. директором стартапа. В то же время я получил приглашение от одной из компаний, которая разрабатывала научное ПО, но мне хотелось в датасайнс...
Предложение
После телефонного интервью с директором стартапа меня пригласили на интервью в офис компании и прислали несколько практических заданий, одно из которых было просто на алгоритмы, а другое связано с анализом и трансформацией данных на Python. Задания не вызвали никаких трудностей, только названия некоторых функций мне показались странными. Как я потом узнал, эти задания были «вычленены» из реального кода, первоначально написанного на R. Интервью проходило в конце января, означая, что я вполне мог уложиться в запланированные сроки и не продлять свой контракт в университете. На интервью в основном говорили про программирование, обсуждали тестовые задания и общие вопросы на адекватность и психологическую устойчивость. Проговорили в общей сложности около двух часов. Все проходило так, как-будто мы были знакомы много лет — никакого напряжения. Через несколько дней я получил предложение на позицию Senior software engineer. И вот тут и стало страшно. Во-первых, я отказался от предложения в другой компании, разрабатывающей научное ПО, но это было без особых терзаний. Основная проблема состояла в том, что я сделал то, что задумал. И теперь необходимо было сделать последний (или первый?) шаг — уйти из науки, которой я занимался последние двадцать лет. На решение у меня было пять дней, самых длинных в моей жизни. Но, как говорится, сказал «А», говори и «Б». И, отработав положенный месяц в университете, я ушел в стартап...
Стартап
На сегодняшний день я могу сказать, что я рад, что начал свою новую жизнь не в большой компании, а в маленьком стартапе. Мне нравится, что я могу общаться с каждым членом компании. Все делают свою работу. И более того, мы знаем, что мы делаем и для чего. Первая неделя была не самая сложная, занимался в основном багфиксами. Но маленькие компании такую роскошь себе позволить не могут, так что через десять дней я уже занимался интеграцией алгоритма differential privacy в наш «движок», что потребовало более глубокого изучения и понимания Tensorflow и Keras, а также самого алгоритма. После этого разработка и имплементация кодировщика, который мог бы обрабатывать файлы, содержащие десятки миллионов строк и несколько тысяч колонок разного типа за разумное время. Для этого изучил Spark и облачные вычисления. Теперь SaaS внедрение и интеграция… Каждый день что-то новое. Десять-двенадцать часов в день, которые пролетают как один час…
Автор: psitronic