«ChatGPT и Midjourney не было бы без математики»
В социальных сетях полно историй о том, как быстро добиться «успешного успеха». Пройди краткосрочные курсы, и тут же ты устроишься на высокооплачиваемую должность. Я же за каждой историей успешного профессионала вижу серьезную работу над собой, которую не проделаешь за пару месяцев. О том, как стать классным востребованным программистом, нам рассказал ведущий разработчик российской IT-компании Александр Моршинин.
- Как ты попал в отрасль IT? Шел к этому целенаправленно?
- На параллели в омской гимназии, которую окончил с золотой медалью, я был лучшим учеником. Но это не лучшая школа города, а вполне себе обычная. И там мне было немного скучновато. Скажу честно, администрации важно, чтобы были медалисты, поэтому порой мне не приходилось прилагать большие усилия в учебе: она давалась достаточно легко. Я решил поступать на физфак ОмГУ, так как больше всего в школе нравился этот предмет. Но мама предложила подумать о матфаке. Она прочитала в газете, что с таким образованием проще стать программистом. В итоге я поступил на оба факультета и выбрал матфак. Но знаю много айтишников, которые выпустились с физического и химического факультетов.
- Получилось быть лучшим учеником и в вузе?
- Не совсем. Университет - это другой мир. Поначалу я не мог смириться с тем, что к учебе надо относиться серьезнее, чем раньше. На первый курс поступило человек 90, из них дипломы получила треть. Не тянешь программу - до свидания! А я первое время переживал период подросткового бунтарства. Хотя все равно был на потоке одним из самых сильных студентов: мог не ходить на некоторые занятия, потом прийти на экзамен и сдать. Но мне ставили тройку за пропуски. Считаю, что правильно: таким образом прививали дисциплину. Пожалуй, поворотным моментом стало мое трудоустройство в одну из IT-компаний, которая занималась веб-разработкой. За две недели я понял, что это абсолютно не мое. Ушел оттуда совершенно разбитым и начал переживать о своем будущем.
- И что предприняли дальше?
- Стал серьезнее относиться к учебе в вузе. Если бакалавриат я окончил со средним баллом 4,2, то магистратуру уже с одними пятерками. В 2017 году поступил в аспирантуру в Омский филиал Института математики при Российской академии наук, которую окончил с отличием. Два года назад в Новосибирске успешно защитил кандидатскую диссертацию. Мои научные интересы - машинное обучение и кластеризация данных. Во время обучения получал стипендию от компании Huawei, куда меня приглашали трудоустроиться. Сейчас я уже сам сотрудник Института математики: взял полставки, так как большую часть времени занимает основная работа. Также вхожу в исследовательскую группу Института, которая получила президентский грант для молодых ученых, занимаюсь теорией кластеризации. То, что я делаю в науке, помогает мне при решении задач в компании, где я работаю по найму, и наоборот. Я периодически читаю для коллег лекции по искусственному интеллекту и машинному обучению.
- Так как же ты нашел себя после первого неудачного опыта в веб-разработке?
Во время работы в магистратуре мой одногруппник позвал меня в компанию «Промобит», где он работал. Сейчас эта фирма известна как создатель российского ноутбука. На момент моего прихода компания как раз начала заниматься софтом. Я пришел как разработчик C++. Это был язык, который я лучше других освоил в вузе. Опыт получился крутой, так как в команде оказались такие же джуны, как и я, начинающие специалисты без особого опыта. А работать нам пришлось над серьезным продуктом. Так я освоил Linux, особенности Hardware и Software разработки. Это была настоящая айтишная школа жизни. И в первую очередь на мне была работа с данными, чем я уже занимался и в науке. Только в компании я это делал с иным подходом: мне надо было проработать качественные решения, как хранить данные, передавать пользователям, поддерживать их безопасность и консистентность.
Через полгода начали прорабатывать админку - инструменты для системных администраторов поверх Linux, которые затем были импортированы на отечественные процессоры. Довольно вязкую штуку писали на Python, то есть мне снова пришлось осваивать новый язык. В какой-то момент дошло до абсурда, когда я остался единственным разработчиком, пишущим код. Плюс было пару ребят, которые отвечали за архитектуру. Мы проводили демо, я на них один отчитывался, поэтому перегорел.
- Как вышел из кризиса?
- Мне вовремя поступило предложение о трудоустройстве от другой компании, где у меня работал друг. Он закинул HR-специалистам мое резюме. Мне предложили устроиться Java-разработчиком. Условия были лучше, чем в «Промобите», я согласился. Так начал осваивать еще один язык программирования. Еще одним плюсом стало то, что не возникло проблем с тем, что я параллельно занимаюсь наукой. Мой руководитель сам закончил тот же Институт математики, но на 20 лет раньше. На новом месте во многом оказалось проще, так как я стал работать над готовым продуктом, который уже приносил деньги. В целом все процессы были отлажены. Год я занимался системой принятия решений, даже вводил новые разработки. И тут выяснилось, что компании нужны специалисты по машинному обучению. На рынке их найти непросто, а мне это было интересно. И был создан отдел машинного обучения из трех человек. Мне подкинули несколько практических задач, и они пересекались с теорией кластеризации, которой я занимаюсь в Институте. Плюс я стал заниматься обучением нейронных сетей. Было сложновато, так как я и еще один коллега были новичками в этой теме, а наш тимлид в силу должности перестал заниматься непосредственным решением технических задач. Кроме того, какое-то время я еще должен был доделывать задачи, которые мне поручили на предыдущей должности. Следующие два года росла наша экспертность в машинном обучении. Один из руководителей компании предложил создать новую систему принятия решений: в старой был плохой код с тяжелой логикой. Задачу выполняли с использованием машинного обучения. Меня сделали руководителем команды из пяти человек, и все знания, что я копил пару лет, мы реализовали в продукте. Проект занял полтора года. Но все эти затраты окупились. Проект успешен, так как благодаря ему компании удалось серьезно увеличить прибыль. Но за это время я понял, что мне тяжело находиться во главе отдела. Я скорее интроверт, не склонный руководить. И сейчас я с удовольствием работаю на должности ведущего разработчика. Люблю улучшать код, мне это очень нравится.
- Александр, ты уже назвал свои научные интересы. Расскажи, пожалуйста, подробнее об этих исследованиях.
- Для начала сразу назову несколько продуктов из области искусственного интеллекта, при разработке которых используется машинное обучение. Это хайповые ChatGPT и Midjourney. Многие люди пользуются этими инструментами, в основе которых лежит математика.
Какие задачи помогает решить кластеризация? Например, библиотека с огромным количеством книг, научных статей. Можно их разбить на группы по определенному признаку (например, создав связи по авторству) и хранить документы в разных геораспределенных базах данных. Это снижает риск “падения” базы данных. Если с каким-то фрагментом возникнут проблемы, то остальные кластеры будут доступны.
На эту тему работает много исследовательских групп в мире. Проблема в том, что подобные задачи в математике труднорешаемые: когда за приемлемое время невозможно найти оптимальную схему в так называемой задаче коммивояжера (курьера), которому нужно объехать 50 пунктов. Из-за возможных перестановок факториал при решении растет со страшной скоростью, которую не обработает современный компьютер. Если представить, что Земля - это компьютер, а каждая молекула - микропроцессор, то он не справится с решением даже за все время, что существует Вселенная.
Но ведь в реальности задачу с курьером бизнесу нужно решать. Это делается с помощью построения алгоритмов и применения кластеров. У меня получилось разработать шесть алгоритмов, когда решение как минимум в два раза не хуже оптимального (как я сказал, которое реально невозможно вычислить). Более того, в ряде случаев решения с помощью этих алгоритмов могут отличаться всего лишь на 5% от идеала.
- Получается, что образование, наука и трудолюбие помогли тебе устроится на престижную и высокооплачиваемую работу?
- Да, хотя, конечно, к вузовскому образованию есть вопросы. В университете нас толком не учили так называемым soft-skills. Эти гибкие навыки, например, как общаться с коллегами, заказчиком, правила тайм-менеджмента и прочие, я приобрел на работе. Считаю, что таким вещам студентов стоит обучать в вузе. Программирование, как и любая другая сфера, - она о людях, о взаимодействии. Если ты не умеешь хорошо коммуницировать, то адаптироваться, социализироваться и найти свое место в профессии, да и в жизни будет сложно, даже если ты крутой разработчик.