Об учебе в Университете ИТМО
Почему вы решили пойти учиться именно в Университет ИТМО?
После школы я плохо понимал, кем хочу быть, знал только, что мне интересна математика. У меня была олимпиада по этому предмету, поэтому поступать я мог в целом куда угодно. Мне заинтересовало, что в ИТМО была кафедра Высшей математики, а на ней специальность «Прикладная математика и информатика». За несколько месяцев до поступления я ходил на день открытых дверей в ИТМО, мне понравились люди, которые на этой кафедре все организовывали, и после общения с ними мне показалось, что учиться там будет интересно.
Какие впечатления были, когда начали учиться?
Первые два года бакалавриата было очень интересно, на кафедре Высшей математики действительно оказалось много математики, очень много, и это было классно. Но были и кое-какие программистские предметы, через которые я и заинтересовался программированием, куда впоследствие и сместился из чистой математики.
В ИТМО так устроено, что после второго курса студентам дают больше свободы, поощряют их работать, помимо учебы, поэтому на третьем курсе я, как и большинство моих одногруппников, пошел работать. К концу четвертого курса я понял, что пока не знаю в этой жизни всего, чего хотел бы, и стал рассматривать варианты поступления в магистратуру.
Тут предстояло выбрать ― либо идти в простую магистратуру, где можно что-то делать в фоновом режиме, совмещая с работой, или же пойти на очень серьезную программу. Я выбрал второй вариант. Дело было в 2018 году, в Питере в математической и программистской тусовке негласно было понимание того, что лучшая магистратура по прикладной математике и программированию была в Академическом университете.
Как раз в тот момент она переехала в Университет ИТМО ― сейчас это корпоративная программа с JetBrains. Я поступил на нее, и действительно, там оказалось очень сложно. Но это был, несомненно, очень интересный и захватывающий опыт. Но cамое главное — знания, которые были получены, действительно актуальны и пригождаются каждый день.
Что больше всего запомнилось в этой магистратуре?
Самое клевое ― ты не просто прослушиваешь курс лекций и забываешь его. К тебе приходит уверенность, что ты действительно что-то знаешь и можешь применить полученные знания на практике. Зачастую бывает, что в курсе есть сложные вещи, интересные темы, но ты сдал экзамен и всё забыл. В нашей магистратуре, может быть, после прохождения курса некоторые вещи и забылись, но у тебя точно осталась уверенность в том, что ты владеешь необходимыми инструментами, знаешь, откуда достать релевантную информацию и как всё применить. У тебя есть уверенность в знаниях, которые ты получаешь, и это круто.
Как попасть на работу по специальности на третьем курсе
Вы сказали, что устроились на работу еще во время учебы. Это была подработка, не связанная со специальностью, или удалось уже применять свои знания на практике?
Моей первой работой сразу стал BIOCAD, где я работаю и сейчас. На втором курсе у меня был преподаватель Павел Андреевич Яковлев, который в то время был директором департамента вычислительной биологии, а сейчас вообще возглавляет всю раннюю разработку в BIOCAD. Он пригласил нескольких студентов, в том числе и меня, на стажировку. Там нам выдали задачи, которые касались больше структурной биологии, но все подходы к их решению были аналитическими и математическими. Надо было анализировать данные и проводить моделирование. На третьем курсе я прошел еще одну стажировку в BIOCAD, она была, скорее, программистской ― компании нужен был еще один аналитический инструмент. После этого меня взяли на работу.
Однако в магистратуре пришлось сделать перерыв в работе?
Не совсем. У меня хорошие отношения с руководством, это, можно сказать, мои преподаватели из ИТМО. Поэтому мне просто пришлось перейти с полной ставки, на которой я к тому времени работал, на 2/5 ставки на время обучения в магистратуре. То есть основной фокус у меня был на учебе, но два дня в неделю я заезжал на работу. К этому тут нормально относятся, я здесь не один такой.
Какой путь вы прошли в компании за это время?
Сначала я был специалистом по анализу данных. У меня как раз на втором году обучения был курс, посвященный этой теме. Нам дали хороший объем знаний, сформировавший кругозор в данной области. Это позволяло спокойно прийти на работу и применять то, чему учили, к реальным задачам. Потом меня стали больше привлекать к алгоритмическим проектам и непосредственно к структурной биоинформатике ― так состоялся мой переход с должности аналитика на должность разработчика биоинформатического программного обеспечения.
Ну а структурная биоинформатика ― это прямо кладезь интересных вычислительных задач, которые зачастую решаются с использованием уже известных среди алгоритмистов подходов.
Как алгоритмы помогают создавать лекарства
А чем вы занимаетесь сейчас в компании?
Дело в том, что есть, грубо говоря, два способа создания лекарств. Первый ― вы можете просто загнать в лабораторию ученых, которые будут синтезировать там кучу разных молекул, отбирая из них те, которые имеют терапевтический эффект. Второй подход называется рациональным дизайном лекарственных средств. Вы проводите компьютерное моделирование, по результатам которого можно сфокусироваться на меньшем числе молекул, заведомо имеющих некоторые полезные свойства.
Моделирование биологических процессов ― это сложная, многогранная область, там есть много разных задач, причем почти все они как раз из области алгоритмов. К примеру, одним из этапов создания лекарства является предсказание того, какую структуру будет иметь комплекс, сформированный молекулой лекарства и какой-то целевой молекулой в теле человека, с которой будет взаимодействовать наше средство. Определение того, как этот комплекс будет выглядеть, называется задачей докинга. Сейчас я занимаюсь разработкой алгоритма для решения именно этой задачи.
Допустим, в организме человека есть раковая клетка, мы можем сделать молекулу, которая при взаимодействии с этой клеткой привлечет внимание иммунной системы и даст ей понять, что это плохая клетка и что ее надо уничтожить.
Еще один пример: известно, что один из видов гемофилии вызывается отсутствием в теле человека специального белка, который помогает взаимодействовать двум другим белкам, ― в результате кровь не сворачивается. Если совсем упростить, то мы можем сделать заменитель этого белка, который бы соединял нужные белки и таким образом излечивал бы людей от гемофилии.
Оба этих примера, по сути, про молекулярные взаимодействия и структуру этих взаимодействий. А её уже можно предсказывать вычислительно. Собственно, я занимаюсь разработкой алгоритма, который это делает.
А как работает ваш алгоритм?
В первом приближении все сводится к простому перебору ― то есть у нас есть одна молекула, есть вторая, и мы хотим найти положение первой молекулы относительно второй. Мы перебираем все возможные варианты. Однако перебор этот не простой ― в нем применяются различные эвристики, призванные уменьшить пространство поиска.
Дело в том, что мы не можем запускать перебор в полном виде ― это слишком долго, а в процессе создания лекарства этот процесс может повторяться сотню раз. Поэтому очень важна скорость работы. Есть специальные методы, которые позволяют сократить пространство поиска. На основе таких методов и работает алгоритм докинга: он состоит из трех последовательных этапов, на каждом из которых работает своя эвристика, позволяющая так сократить пространство поиска, чтобы при этом не выкинуть какие-то правильные ответы.
Вы проходили магистратуру JetBrains, поэтому в чем-то можете сравнивать. В чем разница между программистом в фармацевтической компании и в классическом IT?
Если говорить об алгоритмической биоинформатике, в которой я работаю, то здесь намного больше исследовательской работы. Если вы работаете в большой IT-компании, то там есть какие-то лекала, по которым нужно действовать. Если вы пишете какой-то плагин, то, скорее всего, аналогичных плагинов уже миллион, надо просто взять и закодить. Конечно, есть моменты для креатива ― всегда надо что-то оптимизировать, но обычно задача уже достаточно известная.
Когда же речь идет об исследовательских проектах, в частности в алгоритмической биоифнорматике, то тут зачастую сначала даже непонятно, что делать и как это делать. Все начинается с литературного анализа, который может продолжаться месяц. За это время нам надо понять, как решается задача сейчас, надо ли придумывать другое решение или улучшать существующие. Потом уже идет создание алгоритма. В процессе у нас рождаются гипотезы ― что будет, если сделать что-то вот так или иначе. И гипотезы нередко не оправдываются. Это намного сложнее и креативнее, чем то, чем занимаются в крупных IT-компаниях, да простят меня мои коллеги.
А вы никогда не думали сами уйти в классический IT?
Я думаю, что могу применить свои знания и опыт и в исследовательском проекте, и в IT. Для меня важно, прежде всего, чтобы проект, над которым я работаю, имел бы конечного пользователя, важно, чтобы это приносило пользу людям.
Почему обучение в вузе действительно полезно
Недавно вы опубликовали статью на Хабре, она имела большой отклик. Не могли бы рассказать, о чем она?
Я хотел рассказать, что процесс предсказания структуры двух взаимодействующих молекул, достаточно важная штука при создании лекарственного средства, происходит с помощью компьютерного моделирования, основанного на понятных математических идеях. Это если давать сухую выжимку содержания.
Но у статьи есть более глубокий подтекст ― мне хотелось показать, как важно учиться, как важно получать высшее образование, которое расширяет ваш кругозор, позволяет видеть неочевидные подходы к решению задач. Те знания, которые я получал и в бакалавриате, и в магистратуре действительно оказываются полезными на практике и, опять же, далеко не самым очевидным образом.
Есть расхожее мнение, что зачем, мол, нужна магистерская степень, если человек работает с третьего курса и уже знает свою специальность. Я сам работаю с третьего курса и вижу, что магистратура все равно позволяет получить новые знания и расширить кругозор.
К примеру, прямо сейчас в своей работе я использую те алгоритмы, которые буквально год назад обсуждались на наших лекциях. Тогда я думал: «Господи, чего же так душно? Зачем нам все это?» А сейчас я успешно применяю эти алгоритмы на практике.
А можете привести пример?
Есть достаточно известный алгоритм быстрого преобразования Фурье, который обычно проходят в курсе алгоритмов и структур данных. В отрыве от контекста ты знаешь только, что его часто применяют физики, но с ходу непонятно, зачем он нужен человеку, связанному с программированием или биоинформатикой. Мне было неочевидно, где бы я мог с ним повстречаться. А когда я начал заниматься алгоритмом докинга, оказалось, что данный алгоритм чуть ли не полностью построен на использовании быстрого преобразования Фурье.
Какие отзывы вы получили на статью?
Я изначально хотел, чтобы она была понятна и человеку, не погруженному в биологию, и человеку, не очень глубоко погруженному в математику и программирование. Самым клевым было, когда мне писали, что все понятно, люди, не погруженные в биологию или математику. На Хабре вот написали, что даже биологам все ясно (смеется). Когда люди такое говорят ― это очень приятно.
Планируете продолжать писать такого рода популизаторские статьи?
Сначала такого намерения не было. Но сейчас думаю, что можно было бы продолжить делать что-то такое вместе с образовательными проектами JetBrains или с Biocad. Кажется, что какой-то потенциал у этого есть.