Владимир Олохтонов о работе старшего разработчика в Авито
easy

Владимир Олохтонов о работе старшего разработчика в Авито

Путь от монтажника локальных сетей до инженера машинного обучения.

👨‍💻 Герой: Владимир Олохтонов, 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 для определения проблемных машин → перезагрузка через IPMI → 10 минут ожидания → ещё одна перезагрузка → 10 минут ожидания → если не помогло, то автоматическая переустановка ОС → ещё полчаса ожидания → дальше починка руками, потому что почти наверняка это проблема с железом.

  1. программа mon_check.sh выдаёт список машин, которые не отвечают по ssh (протокол удаленного управления)
  2. для всех машинок из списка мы делаем запрос на перезагрузку через IPMI
  3. для тех машинок, которые через 10 минут не поднялись, мы делаем ёщё одну перезагрузку
  4. для тех машинок, которые через 10 минут не поднялись, мы делаем запрос на переустановку ОС
  5. ждём полчаса, те машинки, которые не поднялись, скорее всего имеют проблемы с железом и дальше чинятся руками

Из сисадмина в разработчики

Python-разработка

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

Моя задача заключалась в обслуживании key-value-хранилища на 300 машин — это такая база данных, в которой можно что-то сохранить и потом получить обратно с помощью специального ключа. Некоторые части поисковой системы Яндекса хранили часть информации в нашей системе, а нашей задачей было быстро обновлять эти данные и быстро отвечать на запросы по ним.

Для функционирования key-value хранилища нужны две подсистемы: первая отвечала за сохранность и поиск данных, а вторая доставляла эти данные до пользователей. Первая система работала хорошо, а вот с доставкой были проблемы — система доставки данных постоянно ломалась.

Проблемы с доставкой данных возникали постоянно, и для их решения требовался полный рабочий день старшего разработчика — человека, чьё время стоит дорого. Я придумал систему, которая помогла автоматизировать все процессы и настроить бесперебойную доставку данных.

Упрощённая схема доставки данных из key-value-хранилища к пользователям: шардированные индексы делят информацию на компактные части, а сервисы ZooKeeper и BitTorrent помогают доставить эту информацию до вычислительных узлов.

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

Рабочее место в Яндексе. Люблю использовать несколько мониторов: на одном можно кодить, на втором открыть браузер с документацией, а на третьем вести переписку в чатах.

Backend-разработка

С приходом в команду поиска я узнал о Школе анализа данных Яндекса и захотел туда поступить — мне было интересно познакомиться с машинным обучением и понять работу искусственного интеллекта. Я начал готовиться, поступил и к концу учёбы задумался о смене работы — с новыми знаниями можно было претендовать на более высокую зарплату, которую из-за внутренних правил Яндекса пришлось бы ждать около трёх лет.

Я попробовал собеседоваться в других компаниях и получил предложение от компании Joom — так я удвоил зарплату и освоил язык Go.

В Joom у меня была задача разработать подсистему email-нотификаций — это когда пользователь покупает какой-то товар и через некоторое время получает от интернет-магазина уведомление с приглашением вернуться за дополнительными покупками. Я проработал около трёх месяцев и решил найти новую компанию — мне хотелось заниматься машинным обучением, а задачи исключительно по бэкенду делали работу неинтересной.

Переварив эту мысль, я открыл резюме и получил приглашение от HR-службы Авито.

Из разработчика в инженеры машинного обучения

Переход в Авито

Я попал на должность инженера в команду автомодерации объявлений — это ребята, которые борются с нарушениями правил на сайте. Они не позволяют продавать гречку по 2000 рублей за кило и заниматься всяким мошенничеством. Чтобы это делать — нужна автоматизация процессов, и именно этим я занимаюсь.

Например, в какой-то момент в разделе «Недвижимость» появилось много объявлений, когда одна и та же квартира продавалась в разных местах — её одновременно могли продавать в Астрахани и Екатеринбурге. Это было очевидное мошенничество, для борьбы с которым у нас была система определюящая иерархию объявлений: первая запись становилась главной, а все последующие получали блокировку и фиксировались в базе как нарушители сайта. Сначала всё работало хорошо.

Затем мошенники быстро раскусили алгоритм и научились его обходить с помощью любого графического редактора: достаточно было чуть-чуть изменить фотографию — и два одинаковых объявления снова на сайте. Для системы это были разные файлы.

Мы решили построить систему на основе нейросети. Она должна была помочь нам находить одинаковые картинки, даже если они были серьёзно изменены - размыты, вырезана часть, изменено разрешение и т.п.

Так получилось, что в ШАДе я занимался похожей задачей — строил индекс для векторных поисков. То есть я знал, как создать нейросеть, которая умеет распознавать одинаковые фотографии несмотря на выставленные фильтры. Я прописал системные требования, передал нейросеть в разработку и следил за тем, чтобы программа получилась не слишком тяжёлой и хорошо работала в рамках общей архитектуры. Это действующий проект, технические подробности которого вы можете прочесть на Хабре в статье «Использование faiss для поиска по многомерным пространствам».

Примерный принцип поиска фейков: пространство сравниваемых картинок делится на фрагменты → фрагменты расслаиваются на уровни → по каждому фрагменту и уровню идёт поиск совпадений → все результаты складываются, и нейросеть находит фейковое изображение.

Рабочий график

Я приезжаю на работу к 12:00 и нахожусь на месте примерно до 20:00. Если что-то идёт не так — не страшно. На мой взгляд, много успевать и ориентироваться на отработанные человеко-часы — это не эффективная концепция, поэтому я стараюсь в первую очередь думать о качестве и функциональности.

Инструменты

Я меня установлена ОС Ubuntu и эмулятор терминала Tilix — это позволяет делить рабочее пространство на несколько частей и располагать их в удобном порядке. Код пишу в PyCharm. Браузер — Firefox. Общаюсь через зум и телеграмм. Если нужно что-то спланировать вместе с командой — создаю тикеты в Jira.

Домашнее рабочее место: ноутбук LENOVO ThinkPad T480, удобный стул и много баночек чая.

Совет новичкам

Если у вас есть возможность — поступайте в самый лучший вуз, который можете себе позволить. Так вы досконально познакомитесь с профессией и уделите всё свободное время получению знаний. Если упустите момент — придётся доучиваться в промежутках между работой и временем на семью. Это далеко не у всех получается.

Если нет возможности поступить в вуз — прочтите книги Андрея Столярова. Это краудфандинговый проект, который состоит из четырёх томов и называется «Программирование: введение в профессию» — после изучения вы получите базовый каркас знаний и понимание того, как развиваться в профессии. Желаю удачи :)

Обложка:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
Найти высоту: задача про стол, кота и черепаху
Найти высоту: задача про стол, кота и черепаху

Китайская задача про стол, кота, черепаху и взрыв мозга.

easy
Кто такой технический директор? Почему он главный, но не пишет код?
Кто такой технический директор? Почему он главный, но не пишет код?

Как перейти от программирования к управлению.

easy
Мама против вирусов
Мама против вирусов

Коронавирусная задачка на математику.

easy
Препроцессор Sass — с чего начать новичку
Препроцессор Sass — с чего начать новичку

Верстаем по-взрослому

easy
Как писали игры для приставок: чудеса оптимизации и жёсткий кодинг
Как писали игры для приставок: чудеса оптимизации и жёсткий кодинг

Для всех, кто вырос, проходя восьмибитного Марио.

medium
Компьютерная лингвистика. Как машины учатся понимать людей
Компьютерная лингвистика. Как машины учатся понимать людей

Конспект подкаста «Запуск завтра»

easy
Чего боятся начинающие разработчики и что с этим делать
Чего боятся начинающие разработчики и что с этим делать

Мы все проходили через это

easy
Программисты из SpaceX отвечают на вопросы про разработку
Программисты из SpaceX отвечают на вопросы про разработку

Переводим для вас популярный тред из Reddit.

easy
Какие бывают хостинги
Какие бывают хостинги

Выделенный сервер, VPS, KVM, VDS и прочие умные слова.

medium
easy