— Владислав, расскажите о том, как вы пришли в JetBrains? Вы же тогда еще были студентом?
— Я учился на математико-механическом факультете СПбГУ на специальности «Математическое обеспечение и администрирование информационных систем». На третьем курсе я поступил в Computer Science Center и на первой же практике попал в JetBrains — разрабатывал систему аудита финансовой информации. Собственно, после практики так и остался там работать — сначала в департаменте Internal Development, а уже потом присоединился к команде JetBrains Research.
— Расскажите подробнее про Computer Science Center.
— Это такие вечерние курсы переподготовки для студентов, увлеченных математикой и программированием. Computer Science Center был создан в Санкт-Петербурге в 2011 году на базе Академии современного программирования и Computer Science клуба в сотрудничестве со Школой анализа данных. В этом году ему исполняется десять лет.
В CS центре на тот момент было несколько направлений: анализ данных, современная информатика и разработка программного обеспечения. Как раз последнее направления я и окончил.
— Зачем тогда вам понадобилось поступать в магистратуру?
— У меня было ощущение, что меня еще могут чему-то научить. И хотелось найти такую магистратуру, где действительно будет интересная программа и чтобы при этом не приходилось каждый день ездить в Петергоф на пары, как было бы, останься я на матмехе в СПбГУ. В итоге я выбрал магистратуру JetBrains в ИТМО — потому что там был мой научный руководитель, было много преподавателей из Computer Science Center, которых я хорошо знал. Ну и плюс она была связана с JetBrains, где я, собственно, работал.
Еще меня заинтересовало, что, как мне сказали, многие курсы, которые я проходил в Computer Science Center, также входят в программу магистратуры, но в гораздо более расширенном объеме. Я тогда подумал: неужели и в без того углубленные курсы можно добавить что-то еще? Оказалось, что очень даже можно.
— И, все-таки, что вам как работающему специалисту могла дать магистратура, что нельзя было освоить в своей непосредственной работе, на практике?
— Магистратура была хороша тем, что многие из курсов были достаточно фундаментальными. Например, у нас была дискретная математика, которая в принципе очень полезна, но ты ее практически не используешь в работе. Зато когда сталкиваешься, то тебе требуются сразу все знания в ней, чтобы решить проблему. Или, например, были алгоритмы и структуры данных — предмет довольно стандартный для IT-специальностей, но Александр Смаль его ведет, конечно, удивительно хорошо.
Были и другие довольно специализированные предметы. Так, у нас был курс «Разработка IDE» который вел тимлид Resharper C++ (и уж он на практике знает, как IDE разрабатывать). Или вот в магистратуре мы изучали вычисления на видеокартах — и если в тот конкретный момент мне это было не нужно, то через два года выяснилось, что эти знания я использую постоянно. То есть когда-то на парах я мучительно рисовал зайцев, которые крутятся в трехмерном пространстве, а сейчас это все пригождается мне и коллегам для того, чтобы считать огромные матрицы.
Еще полезно то, что обучение в магистратуре позволяет переключаться: на работе часто приходится решать узкоспециализированные задачи. А в университете у тебя гораздо большее разнообразие: ходишь на разные пары, занимаешься разными направлениями и делаешь проекты, с ними связанные. Это все очень интересно.
— То есть, по-вашему, даже самые далекие от практического применения знания все равно нужны?
— Ну вот у меня было достаточно много математики на том же матмехе в СПбГУ — и пока что пригодилось абсолютно все, кроме разве что дифференциальной геометрии. В частности, сейчас я очень много занимаюсь машинным обучением, и там фактически все построено на теории вероятностей.
Вообще, когда делаешь какой-то большой инструмент, масштабную платформу, очень часто оказываются нужны знания из совершенно разных областей. И какая-нибудь теория алгоритмов позволяет находить решения таких задач, которые просто невозможно решить, если ты эту теорию не знаешь. А тут происходит инсайт — и возникает он из тех десятков лекций, которые ты когда-то прослушал в универе.
— Вы так рассказываете, будто в магистратуре у вас была только фундаментальная математика.
— В магистратуре дают, скорее, фундаментальные знания в прикладных областях. Например, чтобы разобраться в теории алгоритмов или вычислених на видеокартах, понять, как они работают, нужно прочитать учебник на 700 страниц. И магистратура хороша тем, что там у тебя нет вариантов не прочитать этот учебник.
Конечно же, в программу обучения входят и производственные практики после каждого семестра, работа над магистерским проектом. А еще дважды в год проводится хакатон — на нем можно поработать в команде в условиях жесткого дедлайна, разработать какую-то свою идею и предложить ее тому же JetBrains.
У меня уже был один проект, которым я занимался до поступления в магистратуру. Он называется Kotless — это система для удобного создания приложений и особой интеграции их с облачными вычислениями. С этим проектом я защитил магистерский диплом, несколько раз ездил рассказывать о нем на крупные конференции в Копенгагене, Сан-Диего.
Второй свой проект я придумал вместе с одногруппником Александром Хворовым как раз в ходе хакатона — это плагин, который проверяет грамматику текста (например, в комментариях к коду) в среде разработки от JetBrains. И вот спустя два года у нас уже целая команда из 20 человек, которая занимается этим проектом внутри JetBrains. То есть из этих вроде бы учебных хакатонов можно действительно получить большой продукт.
— А что это за плагин, что он делает?
— История такая: на хакатоне JetBrains еще в 2018 году ребята сделали похожий проект, он классно работал, но плохо масштабировался — и его забросили. Мы на хакатоне в магистратуре решили взяться за ту же самую проблему — проверку грамматики английского и русского языка — но пойти другим путем. Условно, не делать все с нуля самим, а взять существующую систему проверки грамматики и интегрировать ее в наше решение. И, на наше удивление оно работало, и очень даже неплохо.
Потом мы пообщались с JetBrains, убедили, что это важный и нужный продукт. У компании порядка 12 миллионов пользователей — большинство из них часто пишут естественные тексты, те же комментарии в коде, которые нужно проверять на орфографию, пунктуацию. При этом такого плагина раньше не было, а наш же работал весьма хорошо и эффективно.
И вот сейчас это развивается в полноценную платформу по типу Grammarly, а наша небольшая команда из трех человек выросла до 20. Постепенно мы ушли от идеи, что хотим делать только грамматику: уже сейчас у нас есть поиск по контекстным синонимам, перевод и множество других функций. Это уже экосистема для работы с естественным текстом, и мы постепенно движемся в сторону того, чтобы полноценно поддерживать не только английский, но и русский язык. Работать с ним проще — в нем нет таких вариаций, как в английском (который может быть британским, американским, австралийским), и норма более строго определена. При этом для русского еще нет инструмента, как тот же Grammarly, который проставляет запятые с точностью до 99%.
Сейчас мы внутри JetBrains очень активно им пользуемся — у нас несколько сотен уникальных пользователей внутри компании. Также мы потихоньку тестируем продукт на внешних пользователях, целимся в журналистов и копирайтеров, дорабатываем функции под них — например, проверку на плагиат.
— Давайте вернемся к вопросу про образование. Вы ведь и сейчас учитесь, уже в аспирантуре? Я так понимаю, что вы — приверженец концепции непрерывного образования?
— Сейчас я учусь в аспирантуре НИУ ВШЭ в Санкт-Петербурге, там работает мой научный руководитель. Продолжаю свой проект Kotless, пишу по нему диссертацию.
Поскольку я достаточно часто провожу собеседования, то постоянно сталкиваюсь с разными подходами людей к образованию. Бывают люди, которые вообще нигде не учились и при этом очень хорошо разбираются в своей теме. А есть такие, которые учились много, но так ни в чем не разобрались. Но для себя я определил так: образование очень важно. Я считаю, что мое образование и на матмехе, и в ИТМО очень помогло в моей жизни.
И, конечно, образование нужно поддерживать. Во-первых, все достаточно быстро меняется. Если 20 лет сидеть и писать веб-приложения на React и решать одни и те же задачи изо дня в день, из года в год, то неизбежно почувствуешь, как деградируешь. Когда ты не пытаешься как-то образовываться, выходить за рамки повседневных задач, пробовать новое — приходишь к состоянию вымирающего мамонта, совершенно не адаптированного к современным реалиям. И ты даже не будешь знать, что все ушли далеко вперед. Во-вторых, непрерывное образование дает целый спектр возможностей — двигаться вперед самому, двигать вперед свой продукт, находить новые решения и так далее.
— Кажется, что сейчас это не самое популярное мнение среди IT-специалистов?
— Я думаю, многие люди считают, что им не нужно образование, потому что они привыкли брать и делать первым знакомым методом. Ведь ты не можешь решить проблему математическими методами, если ты про них ничего не знаешь. Мне очень нравится пример с криптографией: я часто спрашиваю на собеседованиях про симметричное/ассиметричное шифрование — и как ни странно, очень мало кто может объяснить, как это все работает. Хотя в том же курсе алгебры достаточно подробно про это рассказывается.
В общем, чтобы делать по-настоящему прорывные проекты и создавать новые технологии в обучении, нельзя останавливаться. Нужно постоянно стремиться узнать что-то новое, читать статьи, слушать курсы. Сейчас такой подход очень распространен в среде ML-специалистов: там, если ты не читал статьи по теме три месяца, ты уже отстал от жизни. Это, на самом деле, актуально и для других специальностей, просто не так заметно. Так что да, учиться нужно всегда.