Из фотоники в IT на 24 часа: как магистрант Университета ИТМО выиграл хакатон крупнейшего банка в Сингапуре
Найти подозрительные транзакции, создать свой биткоин, подобрать уникальное предложение для клиента и в итоге выиграть хакатон крупнейшего банка в Сингапуре DBS Hack2Hire Singapore — все это оказалось под силу Павлу Дмитриеву, магистранту Университета ИТМО, инженеру кафедры нанофотоники и метаматериалов, который сейчас находится на стажировке в одном из красивейших городов мира. В интервью ITMO.NEWS он делится опытом и рассказывает, зачем ученому-фотонщику уметь программировать, как не сдаться, когда все, что ты делал почти сутки, перестает работать, удивить жюри на презентации и в итоге все-таки отказаться от работы в банке в пользу науки.
Это уже не первая твоя поездка в Сингапур. Чем ты занимаешься там на этот раз?
В прошлом году я проходил трехмесячную стажировку в Институте хранения данных при местном Агентстве науки, технологий и исследований (A*STAR) в рамках международной краткосрочной программы для студентов Singapore International Pre-Graduate Award (SIPGA). Тогда я занимался проектом в области диэлектрической нанофотоники, а также учился работать на высокотехнологичном оборудовании — например, на ближнепольном микроскопе фирмы Nanonics. Это была хорошая возможность поработать с ведущими зарубежными специалистами и научиться работать на оборудовании, которым мало кто в мире может управлять.
Во второй раз я поехал в Сингапур в январе этого года уже на весь семестр. Сейчас я завершаю обучение в магистратуре, учеба закончилась, осталось только защитить магистерскую диссертацию по оптическим эффектам в диэлектрических наночастицах, результаты по которой я получил еще в прошлом году. Работаю я там же — в Институте хранения данных в Сингапуре – и сейчас фактически продолжаю все начатые год назад проекты.
Расскажи о хакатоне крупнейшего банка в Сингапуре DBS Hack2Hire Singapore. Почему ты решил попробовать свои силы в непрофильной для себя сфере?
Объявление о проведении хакатона я нашел в интернете почти случайно. Его проводил DBS — крупнейший банк Сингапура. Это такой традиционный банк, который в последние годы пытается менять свой профиль, процессы и правила, чтобы стать высокотехнологичной компанией, банком цифровых технологий. Для этого в ноябре прошлого года открыли новый офис, куда активно набирают сотрудников-программистов, а недавно был организован хакатон, после которого лучших из лучших приглашали на интервью в компанию.
Почему меня это заинтересовало? Во-первых, мне давно хотелось поучаствовать в хакатоне. К слову, лет пять назад, еще на первом-втором курсе я работал программистом-разработчиком, плюс у меня была хорошая база по итогам школы. Таким образом, у меня уже есть определенный опыт, и я стараюсь поддерживать свои навыки программирования на уровне. А во-вторых, можно представить: крупнейший банк Сингапура организует хакатон с серьезным отбором: насколько мне известно, изначально заявки подавали 1000 участников, из которых в финальный раунд были отобраны порядка 100 человек. Поэтому было понятно, что мероприятие будет организовано на высоком уровне.
Что требовалось сделать за 24 часа на финальном этапе? Все испытания — реальные задачи от бизнеса?
Было три задания, и все они были очень конкретные: больше на реализацию, чем на оригинальное решение. Первое — разработка системы обнаружения подозрительных операций по банковским картам. Нам выдали базу данных операций по кредиткам, и нужно было научиться по этой базе определять, какие операции являются подозрительными, чтобы потом с учетом этих данных выявлять потенциальных мошенников. Ключевые слова, которые для этого нужно было использовать, это, собственно, машинное обучение и классификация в реальном времени.
Вторая задача заключалась в том, чтобы мы написали свой биткоин. То есть фактически мы должны были написать скелет какой-либо валюты. А в третьем задании нам выдали базу данных звонков, с помощью которой необходимо было подобрать для разных клиентов разные виды предложений. Если клиент, допустим, регулярно звонит за границу, предложить ему скидку на международные звонки и так далее.
Кто оказался в твоей команде и как распределялась ответственность?
Изначально планировалось, что в финальном раунде — непосредственно на 24-часовом хакатоне – будет 100 человек, то есть 20 команд по пять человек в каждой. Но в последний момент кто-то не смог, кто-то просто не пришел, поэтому организаторам пришлось раскидывать участников по группам буквально перед самым началом. В итоге у нас вышло 19 команд.
С командой мне очень повезло, и, наверное, это основная причина того, что мы в итоге победили. Нас было четверо: сингапурец, который разбирается во фронтенд-разработке, девушка из Индии, которая знакома с машинным обучением, парень из Индонезии, который нормально работает с базами данных, и я. Мне досталась разработка бэкенда. Хотя это, конечно, не совсем мой профиль.
К слову, девушка из Индии по своему основному профилю тоже не программист. Она data scientist, работает с большими объемами данных. Поэтому чистых программистов у нас было только двое.
Что было сложнее всего?
Первая и главная сложность: я изначально попросту не представлял, как все это должно работать. Предварительно у нас заработало все, наверно, где-то в четыре утра. То есть, учитывая то, что в 10 утра мы сели, только в четыре утра следующего дня у меня уже был хоть какой-то бэкенд, сервер, который мог взаимодействовать с нашим фронтендом. В качестве фронтенда у нас была карта, на которую можно было кидать точки и цветом обозначать, является ли операция подозрительной.
К шести утра встала задача не «рандомно» раскидывать точки, а уже с учетом машинного обучения. И да, под утро у нас это все благополучно сломалось, поэтому где-то до восьми часов мы думали, как в итоге решить эту проблему. К счастью, справились, и к 10 — непосредственно к презентации — все заработало. Кстати, примерно за час до конца у меня появилась куча идей, как это сделать проще и еще круче, но переделывать уже не хватило ни сил, ни времени.
Как удивляли жюри на презентации? Зачастую ведь именно эта часть определяет победителя.
Да, создать рабочий прототип — это еще полдела, нужно еще это все очень хорошо презентовать. У нас был красивый фронтенд, карта, на которую с большой скоростью бэкенд сервер кидал обработанные транзакции — геолокацию и классификацию (в зависимости от того, подозрительная она или нет). В общем, демонстрация имела успех.
Немаловажно, что у нас в команде оказался очень хороший фронтендщик, который помог сделать эффектную визуализацию.
И была еще одна удачная, почти спланированная фишка нашего фронтенда и бэкенда: если один из них отваливается, это не выводит все приложение из строя, что мы и продемонстрировали на презентации под громкие аплодисменты. То есть фактически у нас был ноутбук, на котором мы все представляли, а на отдельном сервере сидел мой бэкенд. Отключили Wi-Fi, все упало, фронтенд поругался, что он потерял связь с сервером, включили обратно Wi-Fi, он снова быстро его подцепил и дальше продолжил работать. Уже к презентации это был запланированный эффект, а обнаружили мы его почти случайно. Но в целом, как мне кажется, это и сыграло ключевую роль в нашей победе.
Одним из призов хакатона было приглашение на интервью в банк. Уже воспользовался этой возможностью?
Лично для меня основным призом стал все-таки новый MacBook Pro. Мысль о нем, среди прочего, мотивировала не сдаться, когда в шесть утра все, что я делал почти сутки, сломалось. Так что сейчас у меня появился хороший компьютер для работы, чего мне давно не хватало.
Что касается работы, в течение интервью довольно быстро стало понятно, что мы друг другу не подходим. Меня отправили в команду, которая занимается бэкендами, но это все-таки не совсем то, чем я хотел бы заниматься в жизни. Если я перейду из университетской научной среды в корпоративную, то мне будет интереснее R&D.
b=01,center
Программирование — это, безусловно, хороший план B на тот случай, если что-то в моей жизни в будущем поменяется. Но пока приоритет для меня — наука. Поработав программистом пять лет назад, я понял, что мне надоело заниматься задачами, которые стояли передо мной. На мой взгляд, в науке сейчас интереснее: задачи более открытые, сложные, разнообразные. И здесь тоже можно зарабатывать, поэтому по всем параметрам мне это подходит.
Как навыки программирования могут пригодиться в фотонике?
Любая работа в высокотехнологичной области требует таких навыков, потому что любые численные расчеты, обработка данных — это уже программирование.
Есть определенный набор инструментов, например, для расчета распространения электромагнитных полей или расчета рассеяния света на частицах разной формы. И для этих численных расчетов можно использовать либо готовые продукты, либо можно что-то из этого написать самому.
У меня уже есть определенный набор самописных кодов для численных расчетов, которые я писал и потом оптимизировал для работы на кластерах. Например, как-то мне были нужны относительно простые виды расчетов для распространения света в анизотропных слоистых структурах, и я написал собственную реализацию. Это помогает лучше понять, как работают все эти методики, что позволяет эффективнее ими пользоваться. Это все относительно простые вещи, но довольно муторные и, как часто оказывается, не всегда под это есть хорошие готовые реализации.
Хотя если у человека нет серьезного навыка в программировании, то ему будет достаточно использовать довольно большое количество уже готовых программных продуктов. Но, если хочется больше контроля над тем, что происходит, как все это работает, иногда проще написать самому.