Учился программированию самостоятельно

Я родился в Карши. Еще будучи школьником, в классе седьмом, впервые попробовал программирование. Мы тогда на уроках изучали один из наиболее известных языков программирования — Pascal. По правде говоря, я тогда ничего толком не понимал, домашние задания делал без особого интереса и для галочки.

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

Я тогда даже не знал, кто такой Цукерберг, и о языке никакого представления не имел.

Как-то летом вспомнил про этот наш с ним разговор и решил самостоятельно изучить C++.

Скачал по нему учебник, какую-то среду для разработки и начал читать. Дошел до первого примера программы — это был Hello World. Переписал с книжки код в среду, запустил и получил какую-то ошибку. Не понимал, как она возникла и как теперь ее устранить. Два дня пытался что-то с этим сделать, но все впустую.

После того раза подумал и решил, что С++ — действительно какой-то сложный язык программирования, решил взяться за другой. Начал гуглить и нашел похожий язык — С#. Все повторилось вновь: скачал учебник, если память не подводит, Герберта Шилдта «С# 4.0 — полное руководство», необходимую среду и в тот же день успешно написал Hello World.

Позже выяснилось, что в случае с С++ учебник был написан для одного компилятора, а у меня среда была с другим.

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

Потом уже в Академическом лицее при Вестминстерском университете я участвовал в кружке спортивного программирования и ездил на олимпиады. Часто с друзьями решали соревнования на codeforces.ru.

Тогда же я обнаружил сайт Coursera, на котором одним из самых популярных курсов был Machine learning от Эндрю Ына, создателя портала. Начал проходить курс, но довольно быстро понял, что не хватает математических знаний. Поэтому приостановил свое знакомство с машинным обучением и решил посмотреть что-нибудь еще. Нахватал немного знаний отовсюду: бэкенд, фронтенд, тогда же впервые попробовал язык Python.

Я готовился к поступлению в Высшую школу экономики в Москве. Изначально собирался стать экономистом — это популярное направление в Узбекистане. Но буквально в последний момент решил пойти на факультет бизнес-информатики.


Так, следующая встреча с машинным обучением была уже на первом курсе университета, к этому моменту (2016−2017 годы) образовательные онлайн-платформы сделали крутой скачок. Я закончил тот самый курс на Coursera и еще несколько курсов на YouTube. Особой системы не было. Я смотрел все, что казалось интересным, и старался выбирать те курсы, где в публичном доступе были домашние задания и системы самопроверки, чтобы отработать знания на практике.

Машинное обучение — это очень классная тема с точки зрения близости практики и теории. Например, на курсе Deep Learning for Computer Vision были примеры обучения и тюнинга нейросетей для разных задач, но в небольшом учебном масштабе. Сейчас в «Яндексе» я делаю то же самое, но уже с гораздо большим объемом данных и трачу на задачу не пару часов, как на курсах, а пару месяцев.

При самостоятельном обучении очень полезным с точки зрения прокачивания знаний и навыков было участие в олимпиадах. И еще это очень классное сообщество умных ребят, которые тратят по пять часов в день на дополнительное обучение. Это невольно добавляет тебе мотивации учиться.

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

В Ташкенте, к примеру, хакатоны обычно проводят IT-университеты и крупные компании. Еще, например, их устраивает IT Park. Так, я недавно участвовал в их хакатоне по машинному обучению.

Также есть специализированные сайты, которые проводят соревнования без привязки к локации, например, codeforces.ru (спортивное программирование) или kaggle.com (машинное обучение).

Помню, как мы участвовали с однокурсниками в хакатоне S7 Airlines по направлению геймификация мобильного приложения компании. Его нам удалось победить: нас было четверо и выиграли мы порядка $1600.

А еще я участвовал на олимпиаде от «Яндекс». Она была посвящена строительству лучшей ранжирующей модели ответов голосового помощника Алисы. Я тогда, кажется, 7 место занял.

Как я попал в «Яндекс»

На летних каникулах после первого курса решил не терять времени и устроился на свою первую стажировку в банке «Тинькофф» в августе 2017 года. По сути попасть туда не сложно. Объявления о наборе можно увидеть на сайте банка или в студенческих чатах.

Дальше надо будет отправить заявку, получиться тестовое задание и успешно его пройти. После чего дело останется за собеседованием.

По времени уходит пару месяцев. Я, к примеру, подавался в марте, а на работу вышел в августе.


В «Тинькофф» я занимался экспериментальными разработками: вместе с другими работал над технологией компьютерного зрения для валидации внутренних документов, а еще помогал с внутрикорпоративным приложением с элементами геймификации.

После второго курса я пришел на стажировку в «Яндекс». Направлений для стажировок у компании много: разработка (бэкенд, фронтенд), мобильная, инфраструктурная аналитика, машинное обучение, тестирование, инфобезопасность, дизайн.

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

Если подробно, то процесс проходит следующим образом: на почту приходит ссылка на тестовое задание, оно выполняется на платформе «Яндекс.Контест». Приступить к заданию необходимо в течение семи дней.

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

Дальше результаты направляются в команду стажировок. Если всё хорошо, то кандидата зовут на серию технических интервью: обычно их два или три и длятся они от часа до пяти часов. Если кандидат с ними справляется, то переходят к финальным интервью. А еще на этом этапе можно выбрать команду, с которой хочется пройти стажировку.

По сравнению с «Тинькофф» в Яндекс попасть куда сложнее и дольше. Время ожидания может занимать до полугода, но из раза в раз по-разному.

Задачи, которые необходимо решить, связаны с программированием и знаниями о математике, а на интервью вопросы больше по части hard-skills, но компания уделяет значение и личным, гибким навыкам, ведь так или иначе, но человеку придется работать в команде и коммуницировать и с другими в компании.

Лично мне очень понравился ментор из команды машинного обучения рекламы, да и сама тема меня привлекала, поэтому я пошел к ним.

Если стажировка прошла успешна и у команды есть возможность оставить человека в штате, то «Яндекс» его нанимает. Если места нет, но у человека есть потенциал сильного разработчика, то ему подбирают новую команду, с которой он мог бы работать.

Мне после стажировки предложили фултайм-контракт, и я с радостью согласился.

И да, к слову, стажёры не работают за еду — они, как и остальные сотрудники, получают зарплату. В «Тинькофф» в то время я получал порядка $500, а в Яндекс мне платили около $800.

Дополнительно к зарплате «Яндекс» начисляет на электронный пропуск определённую сумму на питание. Бейджиком можно расплачиваться в офисной столовой, окрестных кафе и барах, «Яндекс.Еде» и «Яндекс.Лавке». Для тех, кто задержался на работе допоздна, в офисах есть «едоматы» — автоматы с едой. Они тоже принимают бейджики.


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

Лично я этим не пользовался, так как работы было достаточно, чтобы утолить жажду к знаниям. Чуть позже, уже в процессе работы, я все-таки просмотрел пару лекций, но быстро это дело забросил. Спустя время я пришел в ШАД студентом, так как мне как раз-таки и удалось поступить в магистратуру в кафедру ШАДА.

Таким образом, стажировки — это один из способов стать сотрудником компании. А стажёр — это сразу полноценный сотрудник «Яндекса», у которого при этом есть свой руководитель на время обучения: компания подписывает с ним трудовой договор и стажер начинает участвовать во всех внутренних процессах.

Чем занимается старший разработчик

Сейчас я работаю в команде, которая занимается машинным обучением (ML) в сфере рекламы. Обычно нерелевантные объявления раздражают пользователей, а для продавцов создают неэффективные затраты. Поэтому в рекламе сейчас стали использовать ML и нейросети, которые помогают бизнесам найти своих покупателей и подобрать самые подходящие площадки для размещения конкретной рекламы. Я, в свою очередь, учу такие нейросети на больших данных различной природы.

К примеру, есть рекламодатель, который продает товары или услуги, и площадка — сайт в интернете или приложение — которая продает место для рекламы, а еще есть рекламная система, которая объединяет две эти сущности так, чтобы каждый получил свою выгоду и при этом реклама не надоедала основному потребителю — пользователю.

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

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

Помимо работы в «Яндекс» я преподаю в ВШЭ. Мне нравится делиться знаниями. Мой первый опыт преподавания был еще в Ташкенте, в кружке по программированию в лицее, где я учился.

В ВШЭ же есть факультет в котором есть базовая кафедра «Яндекс». Там искали специалистов, которые могли бы стать преподавателями и прочесть студентам определенный ряд лекций по одному из предметов. Я согласился и сейчас веду семинары первокурсникам бакалавриата ВШЭ по алгоритмам и C++.

О жизни в Москве. Это большой и невероятно развитый город. Я приезжал сюда и до поступления в вуз, в том числе с друзьями, поэтому процесс адаптации прошел плавно. Здесь много удобных сервисов: различные доставки, онлайн-покупки. Еще много узбекской кухни, что тоже не может не радовать. В то же время есть стандартные проблемы больших городов: дороги, большие расстояния, шум и свет.


Советы выпускникам и планы на будущее

Банальные советы понятны — нужно постоянно учиться и развиваться. Но такой «верхнеуровневый» совет, который я дал бы и себе — это смотреть на себя и свою карьеру как на марафон, а не как на спринт.

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

Не стоит расстраиваться, если не попал в крупную компанию. Если ты будешь стараться, развиваться и фокусироваться на наращивании экспертизы, через какое-то время достижения придут сами.

Про планы говорить сложно. Но я могу довольно уверенно сказать, что хочется и дальше развиваться в программировании и машинном обучении. Я вообще считаю, что только начинаю свой путь в этой науке. Хочется исследовать новое и применять свои знания для решения важных проблем. Перспективы карьерного роста есть, в «Яндексе» можно пробовать себя в разных ролях. Да и сейчас очень развит рынок IT — возможностей действительно много.

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

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