Грамотный баланс теории и практики: как обучаются студенты магистерской программы Университета ИТМО и JetBrains

В прошлом году в Университете ИТМО была запущена корпоративная магистерская программа совместно с компанией JetBrains «Разработка программного обеспечения / Software Engineering». Одна из главных особенностей программы: помимо классических семинарских заданий, во время обучения студенты также выполняют проекты под руководством разработчиков JetBrains и компаний-партнеров, чтобы в конце каждого семестра представить результаты своей работы. Мы расспросили студентов программы о том, как работать над проектом вместе с ведущими разработчиками крупных компаний, каковы преимущества обучения в корпоративной магистратуре, чем могут быть полезны фундаментальные знания и «общеобразовательные» дисциплины для разработчиков и как выбрать направление для дальнейшего развития.

Корпоративная магистерская программа совместно с компанией JetBrains «Разработка программного обеспечения / Software Engineering»

Владислав Кораблинов

Я окончил бакалавриат в Ижевске и, когда настал момент выбора магистратуры, чувствовал себя в довольно странной ситуации. С одной стороны, благодаря олимпиадному бэкграунду и самостоятельному изучению некоторых учебников и курсов я имел неплохие теоретические знания в области математики и компьютерных наук. С другой стороны, у меня напрочь отсутствовали какие-либо практические навыки. Поэтому мне хотелось найти программу, которая сочетает в себе сильную практическую составляющую с общей теоретической подготовкой в большом спектре областей. Большинство современных магистратур обладают хотя бы одним из двух существенных для меня недостатков: они либо просто являются довольно формальными, либо дают узкоспециализированные знания, в то время как мне хотелось развиваться «вширь». Поэтому, честно говоря, у меня не было других вариантов, кроме магистратуры JetBrains.

Как строится обучение на программе

Обучение на программе абсолютно разностороннее. Многие дисциплины можно отнести именно к области Computer Science. Они дают понимание многих теоретических аспектов информационных технологий и просто хорошее образование, благодаря которому ты всегда можешь поддержать беседу в приличном обществе. Но также есть много предметов с практическим уклоном: без долгих часов написания кода вы точно не останетесь.

Владислав Кораблинов
Владислав Кораблинов

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

Проектная работа

Мой проект в компании JetBrains был направлен на упрощение жизни программиста при работе с системами контроля версий. Если говорить подробнее, мы хотели научиться автоматически генерировать текст, описывающий изменения, которые были сделаны с момента последней сохраненной версии репозитория (обычно это называют сообщениям к коммитам). Нам удалось выявить основные трудности и ограничения, возникающие при решении этой задачи. В итоге была разработана модель, хорошо предсказывающая нужный текст для конкретных случаев небольших изменений. В перспективе эта модель должна быть выпущена в виде плагина для IDE.

Перспективы

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

Алексей Зубаков

Алексей Зубаков
Алексей Зубаков

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

Проектная работа

За время обучения я сделал уже несколько проектов. Первый проект — для лаборатории мобильных роботов. Для алгоритмов, используемых в лаборатории, решили воспользоваться датчиками, аналогичными gps, но работающими внутри помещения (т.н. indoor «gps», сами датчики). Моей задачей было написать драйвер, позволяющий получать данные непосредственно с датчиков и передавать их роботу. Все это функционировало в рамках robot operation system.

Второй проект, который я делал, — декомпилятор для языка Kotlin. Летом я стажировался в компании JetBrains (к слову, стажировка была обязательной для всех) и дописывал утилиту для генерации документации для языка Kotlin.

И наконец мой дипломный проект, которым я занимаюсь последние полгода в команде Kotlin, посвящен созданию утилиты, которая из уже существующих библиотек Kotlin/native позволяет автоматически создать библиотеку с общим API, повторяющимся на различных платформах (ios, macos, linux и т.д.). Это должно упростить жизнь многим пользователям языка, которые будут писать код в мультиплатформенных проектах, потому что можно будет использовать существующие библиотеки в платформенно-независимом коде и не повторять одну и ту же логику, связанную с обращением к API, для каждой из платформ.

Как строится обучение на программе

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

Корпоративная магистерская программа совместно с компанией JetBrains «Разработка программного обеспечения / Software Engineering»
Корпоративная магистерская программа совместно с компанией JetBrains «Разработка программного обеспечения / Software Engineering»

Перспективы

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

Ирина Артемьева

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

Проектная работа

Тема проекта, над которым я сейчас работаю, — «Повышение гранулярности предупреждающих сообщений в компиляторе GHC». Он выполняется под руководством разработчиков Serokell. Его результаты могут помочь разработчикам на Haskell писать на этом языке еще чуточку приятнее. Иными словами, программист на Haskell сможет подавлять/отключать определенные виды предупреждений для частей исходного кода. Я выбрала работу с Haskell, потому что мне очень нравится этот язык, а данная работа позволяет погрузиться в недра его компилятора. Для работы над научно-исследовательским проектом в расписании занятий выделен специальный день. Хотя по факту каждый студент работает в удобное ему и его научному руководителю время. Формат взаимодействия по проектам тоже может быть разным. Например, я стараюсь делать что-то в течение недели и связываюсь с руководителями по мере необходимости в специальном чате.

Как строится обучение на программе

Упор в обучении в рамках программы делается на практику, но предметы с фундаментальными знаниями тоже есть. Кроме того, на некоторых предметах можно выбирать, в какую группу по практике пойти: с уклоном в решение теоретических или же практических задач. Считаю, что мне полезно все, что дается на программе: от знаний (лишних предметов нет) до количества домашних заданий и пар. Большая нагрузка заставляет учиться правильно распределять свое время и повышать эффективность работы.

Перспективы

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

Екатерина Шеметова

Екатерина Шеметова
Екатерина Шеметова

Эта магистерская программа привлекла меня прежде всего разнообразием дисциплин. Помимо получения базовых знаний, у нас есть замечательная возможность попробовать себя в разных сферах и выбрать то, что действительно по душе. Кроме того, понравилось, что много времени уделяется индивидуальной работе со студентами, что почти не встретишь на других программах.

Сейчас в рамках научно-практического проекта я занимаюсь задачей поиска путей с контекстно-свободными ограничениями (разработкой быстрых алгоритмов для ее решения). Среди практического применения его результатов — статический анализ кода, запросы к графовым БД и многое другое.

Как строится обучение на программе

Если говорить об обучении в магистратуре, можно отметить, что у нас есть как сугубо практические предметы, так и базовые. Но у каждого предмета (даже если он фундаментальный) обязательно есть большая практическая часть, где мы что-то решаем или пишем код, то есть не только получаем знания, но и учимся применять их.

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

Перспективы

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

Иван Ильчук

Иван Ильчук
Иван Ильчук

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

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

Как строится обучение на программе

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

Что я считаю наиболее полезным для себя? Могу выделить две вещи. Во-первых, это сама программа. На сегодняшний день в свободном доступе существует огромное количество информации и в принципе программированию в какой-то степени можно обучиться и самому. Но тут очень важно не растеряться. Когда же есть четкий план и люди, которые помогают тебе не сбиться с этого плана, — это очень здорово. Во-вторых — пожалуй, это даже важнее — возможность реализовывать проекты под руководством различных компаний. Это позволяет не только в какой-то степени окунуться в профессию, но и познакомиться с гигантами индустрии.

Перспективы

В будущем я хочу развиваться в машинном обучении. На сегодняшний день это направление применяется в различных сферах. Даже немного страшно, что я могу приложить руку к тому, чтобы самого себя лишить профессии. Шучу, конечно. Машинное обучение может заменить много кого, но до хороших специалистов ему пока не добраться. А я надеюсь стать в будущем как раз таким программистом. После магистратуры я хочу уйти работать в крупную компанию, среди которых в первую очередь рассматриваю именно JetBrains.

Корпоративная магистерская программа совместно с компанией JetBrains «Разработка программного обеспечения / Software Engineering»
Корпоративная магистерская программа совместно с компанией JetBrains «Разработка программного обеспечения / Software Engineering»

Роман Голышев

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

Проектная работа

Сейчас я выполняю магистерскую дипломную работу в команде JetBrains, которая занимается IntelliJ Rust Plugin-ом. Это плагин, добавляющий поддержку языка Rust в IntelliJ IDEA и другие продукты JetBrains. Плагин является опенсорсным и доступен бесплатно. Основная цель моей работы состоит в том, чтобы пользователи плагина получили более полную поддержку IDE в случаях, когда они используют процедурные макросы (это один из концептов языка Rust). Для достижения этого я должен подружить уже существующую инфраструктуру плагина с внутренними API компилятора Rust.

Как строится обучение на программе

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

Перспективы

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

Редакция новостного портала
Архив по годам:
Пресс-служба