👨💻 Герой: Владимир Олохтонов, 29 лет, Москва. Выпускник Школы анализа данных Яндекса
🛠 Работа: Старший разработчик в Авито. Работает в офисе, 5/2. Обычно начинает в 12:00, заканчивает в 20:00
🧭 Рынок: Инженер машинного обучения в Москве: 55 вакансий
Из монтажника интернет-сетей в сисадмины
Первый опыт
Мой отец тридцать лет занимается программированием, поэтому ещё с детства я знал, что такое код и зачем его создавать. Однако долго эта тема меня не интересовала, и до армии я умел всего две вещи: я мог собрать компьютер и переустановить винду — это простые прикладные навыки, за которые мало кто из работодателей готов платить.
После армии я прочёл книгу «Локальные сети. Модернизация и поиск неисправностей» и устроился монтажником интернет-сетей в группу компаний «Филанко». Я отвечал за то, чтобы у людей был интернет: протягивал кабель в квартиры новых абонентов, подключал компьютеры к сети, ремонтировал сетевые узлы и устанавливал коммутационное оборудование — то есть я занимался рутиной, которую можно доверить новичку.
Помимо монтажников в компании работали системные администраторы NOC-центра — это сотрудники, которые отвечают за работу сети. Обычно к ним обращаются тогда, когда что-то перестаёт работать и нужно всё поправить. NOC, или network operations center, — центр управления сетью.
И вот представьте: я лезу на старый чердак с голубями, несколько часов мучаюсь с установкой коммутатора, замерзаю, включаю оборудование — и оно не работает. Тогда я звоню в NOC-центр, говорю о проблеме, и они быстро восстанавливают подключение. Так у меня появилась идея выучиться на сетевого инженера.
Я начал обучение с книги Cisco 200-101 — это руководство для инженеров, которые планируют работать с сетевым оборудованием. Книгу я выбрал случайно и, наверное, потому, что на тот момент компания Cisco Systems считалась популярным производителем и выпускала подробные обучающие материалы, которые, по отзывам интернет-пользователей, помогали пройти собеседование и устроиться на работу. Так я смог переквалифицироваться и вырасти до младшего системного администратора.
В 20 лет я начал изучать книги по Linux, и это позволило попасть в команду дежурных админов компании AT Consulting. Я проработал недолго, но успел познакомиться с SSH, Bash-скриптами и администрированием SVN — на то время это были востребованные технологии, которые помогли попасть в компанию «Комтех». Это было место, где в течение восьми месяцев я был единственным сисадмином и отвечал за все процессы. Здесь я набрался опыта, подтянул знания и получил приглашение от Яндекса — меня позвали в команду поддержки разработки поиска.
Переход в Яндекс
В Яндексе много продуктов — почта, рекламная сеть, хостинг и т. д. Поиск — это один из продуктов Яндекса. На работу поиска влияет множество систем, которые нужно постоянно обслуживать.
Я попал в группу, которая отвечает за работоспособность серверов и поискового облака Яндекс. Мы писали системный софт для устранения сбоёв оборудования — на тот момент поисковое облако насчитывало порядка 40 000 машин, и у них постоянно что-то ломалось. Это была нудная и непрерывная работа.
Я решил разобраться в процессе и придумал систему, которая могла всё чинить без участия нашей группы. В этот период я умел программировать примерно никак и поэтому учился на практике: прочёл книгу Марка Лутца «Изучаем Python», прошёл какой-то курс для понимания синтаксиса и получил первый прототип. Далее я пару недель ничего не делал руками и наблюдал за процессом: программа работала в автоматическом режиме и оказалась эффективней всей нашей группы. Чуть позже она обросла дополнительными функциями, и на её основе получилась система Walle — сейчас это один из инструментов администрирования машин в поиске Яндекса.
- программа mon_check.sh выдаёт список машин, которые не отвечают по ssh (протокол удаленного управления)
- для всех машинок из списка мы делаем запрос на перезагрузку через IPMI
- для тех машинок, которые через 10 минут не поднялись, мы делаем ёщё одну перезагрузку
- для тех машинок, которые через 10 минут не поднялись, мы делаем запрос на переустановку ОС
- ждём полчаса, те машинки, которые не поднялись, скорее всего имеют проблемы с железом и дальше чинятся руками
Из сисадмина в разработчики
Python-разработка
Опыт написания первой программы помог понять, что даже в крупных компаниях многие процессы нуждаются в доработке и если задачу можно формализовать, то она может быть автоматизирована. Я начал много кодить, перемещаться между командами и в какой-то момент оказался в команде разработки поиска в статусе Python-разработчика.
Моя задача заключалась в обслуживании key-value-хранилища на 300 машин — это такая база данных, в которой можно что-то сохранить и потом получить обратно с помощью специального ключа. Некоторые части поисковой системы Яндекса хранили часть информации в нашей системе, а нашей задачей было быстро обновлять эти данные и быстро отвечать на запросы по ним.
Для функционирования key-value хранилища нужны две подсистемы: первая отвечала за сохранность и поиск данных, а вторая доставляла эти данные до пользователей. Первая система работала хорошо, а вот с доставкой были проблемы — система доставки данных постоянно ломалась.
Проблемы с доставкой данных возникали постоянно, и для их решения требовался полный рабочий день старшего разработчика — человека, чьё время стоит дорого. Я придумал систему, которая помогла автоматизировать все процессы и настроить бесперебойную доставку данных.
Во время разработки системы я первый раз столкнулся с тем, что не могу написать корректный код без тестов, поскольку ошибка могла привести к потере огромного количества данных. В итоге я поймал несколько критичных багов, и теперь всегда пишу тесты и всем рекомендую поступать так же.
Backend-разработка
С приходом в команду поиска я узнал о Школе анализа данных Яндекса и захотел туда поступить — мне было интересно познакомиться с машинным обучением и понять работу искусственного интеллекта. Я начал готовиться, поступил и к концу учёбы задумался о смене работы — с новыми знаниями можно было претендовать на более высокую зарплату, которую из-за внутренних правил Яндекса пришлось бы ждать около трёх лет.
Я попробовал собеседоваться в других компаниях и получил предложение от компании Joom — так я удвоил зарплату и освоил язык Go.
В Joom у меня была задача разработать подсистему email-нотификаций — это когда пользователь покупает какой-то товар и через некоторое время получает от интернет-магазина уведомление с приглашением вернуться за дополнительными покупками. Я проработал около трёх месяцев и решил найти новую компанию — мне хотелось заниматься машинным обучением, а задачи исключительно по бэкенду делали работу неинтересной.
Переварив эту мысль, я открыл резюме и получил приглашение от HR-службы Авито.
Из разработчика в инженеры машинного обучения
Переход в Авито
Я попал на должность инженера в команду автомодерации объявлений — это ребята, которые борются с нарушениями правил на сайте. Они не позволяют продавать гречку по 2000 рублей за кило и заниматься всяким мошенничеством. Чтобы это делать — нужна автоматизация процессов, и именно этим я занимаюсь.
Например, в какой-то момент в разделе «Недвижимость» появилось много объявлений, когда одна и та же квартира продавалась в разных местах — её одновременно могли продавать в Астрахани и Екатеринбурге. Это было очевидное мошенничество, для борьбы с которым у нас была система определюящая иерархию объявлений: первая запись становилась главной, а все последующие получали блокировку и фиксировались в базе как нарушители сайта. Сначала всё работало хорошо.
Затем мошенники быстро раскусили алгоритм и научились его обходить с помощью любого графического редактора: достаточно было чуть-чуть изменить фотографию — и два одинаковых объявления снова на сайте. Для системы это были разные файлы.
Мы решили построить систему на основе нейросети. Она должна была помочь нам находить одинаковые картинки, даже если они были серьёзно изменены - размыты, вырезана часть, изменено разрешение и т.п.
Так получилось, что в ШАДе я занимался похожей задачей — строил индекс для векторных поисков. То есть я знал, как создать нейросеть, которая умеет распознавать одинаковые фотографии несмотря на выставленные фильтры. Я прописал системные требования, передал нейросеть в разработку и следил за тем, чтобы программа получилась не слишком тяжёлой и хорошо работала в рамках общей архитектуры. Это действующий проект, технические подробности которого вы можете прочесть на Хабре в статье «Использование faiss для поиска по многомерным пространствам».
Рабочий график
Я приезжаю на работу к 12:00 и нахожусь на месте примерно до 20:00. Если что-то идёт не так — не страшно. На мой взгляд, много успевать и ориентироваться на отработанные человеко-часы — это не эффективная концепция, поэтому я стараюсь в первую очередь думать о качестве и функциональности.
Инструменты
Я меня установлена ОС Ubuntu и эмулятор терминала Tilix — это позволяет делить рабочее пространство на несколько частей и располагать их в удобном порядке. Код пишу в PyCharm. Браузер — Firefox. Общаюсь через зум и телеграмм. Если нужно что-то спланировать вместе с командой — создаю тикеты в Jira.
Совет новичкам
Если у вас есть возможность — поступайте в самый лучший вуз, который можете себе позволить. Так вы досконально познакомитесь с профессией и уделите всё свободное время получению знаний. Если упустите момент — придётся доучиваться в промежутках между работой и временем на семью. Это далеко не у всех получается.
Если нет возможности поступить в вуз — прочтите книги Андрея Столярова. Это краудфандинговый проект, который состоит из четырёх томов и называется «Программирование: введение в профессию» — после изучения вы получите базовый каркас знаний и понимание того, как развиваться в профессии. Желаю удачи :)