«Самое важное – понять, зачем вам всё это нужно»: второкурсник Андрей Стоян о выборе магистратуры, учебе и своем преподавании
Андрей поступил на «Разработку программного обеспечения» после математического бакалавриата и Computer Science Center – искал магистратуру, которая поможет систематизировать уже полученные знания. А на втором курсе он и сам стал вести практические занятия по функциональному программированию у студентов-первокурсников. Зачем Андрею преподавание, почему он выбрал самое сложное направление обучение и какие советы может дать абитуриентам – в нашем интервью.
– Андрей, расскажи о своей образовательной траектории: где ты учился, почему вообще пошел в магистратуру и как выбрал программу «Разработка ПО» в ИТМО?
– Я окончил «Прикладную математику и биоинформатику» в питерском Политехе. Там было много разной математики, но довольно слабое программирование и не самая качественная организация всего учебного процесса. В итоге получалось, что учеба отнимает много времени, но у меня совершенно не было ощущения, что затраченные усилия окупаются.

Я хотел подтянуть программирование и начал активно проходить курсы на Stepik. Курсы привели меня в Computer Science Center, который я в итоге и окончил. Это был большой контраст с моим бакалавриатом: кураторы, которые занимаются организацией и помогают студентам, преподаватели, работающие из интереса, а не из-за необходимости, отличные курсы, постоянно совершенствующиеся благодаря механизмам обратной связи.

В результате математического бакалавриата и вечерних курсов у меня сложились довольно обрывочные и разрозненные знания. Поэтому я решил пойти в магистратуру по программированию, которая позволила бы закрыть множество пробелов в образовании. Мне очень нравилось, как всё устроено в CSC, поэтому я искал магистратуру со схожими принципами, но более систематическим подходом к образованию – и нашел «Разработку программного обеспечения» в ИТМО, где было много уже знакомых мне преподавателей.
– Как ты поступил? Сколько времени и сил заняла подготовка?
– К поступлению я готовился всё лето. Расписал билеты, перечитал свои конспекты по алгоритмам, языкам программирования и математике. Удобно, что на сайте есть конкретные требования и список тем для подготовки к вступительному испытанию, а не как на других программах, где просто требуют знать всё.

Само вступительное испытание состоит из двух этапов. В качестве первого можно либо пройти тест, либо показать сертификаты нескольких онлайн-курсов со Stepik. Я из тех, кто от волнения обычно забывает слова и значения синуса, поэтому выбрал курсы. А еще они вместе с YouTube-каналом института и Computer Science Center позволяют получить первое впечатление, что ждет на программе.

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

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

Но на третьем курсе я наткнулся на курс Дениса Николаевича Москвина по Haskell на Stepik. И тут вспомнил, что учиться может быть интересно! Провел на курсе несколько недель, параллельно читая книгу по теме. Получил от этого всего огромное удовольствие, забросил ML и решил, что хочу заниматься языками программирования. Функциональное программирование здесь мне видится хорошей лакмусовой бумажкой: если понравилось — возможно, следует обратить внимание на языки как на потенциальную специализацию.

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

Мне же интересен дизайн языков. Это, с одной стороны, довольно гуманитарная область: нужно оценивать языковые решения как с точки зрения UX и эстетики, так и исходя из когнитивных особенностей человека. С другой стороны, она очень техническая и теоретическая: возможна ли эффективная трансляция такого кода, получится ли сам целевой код достаточно производительным, как интегрировать решение в архитектуру компилятора, как изменения затронут взаимодействие с кодом на разных платформах и т.д.
– Расскажи о своей дипломной работе: что ты делаешь и для чего?
– Тема моей дипломной работы – «Дизайн и реализация Self-типов в языке Kotlin». Self-типы – это фича системы типов языка программирования, которая в некоторых случаях облегчает написание кода. Например, где-то она позволяет избавиться от странноватого и нетривиального паттерна — рекурсивных дженериков.

Мне нужно пройти весь процесс добавления экспериментальной фичи в язык. Сначала собрать сценарии использования фичи, в том числе от пользователей с форумов и из открытых репозиториев. Затем изучить возможные подходы к реализации: ad-hoc или как частный случай другой фичи. Найти и проанализировать все возможные граничные случаи: где и что может потенциально сломаться в языке, к каким другим фичам может закрыться или усложниться путь. После этого я должен встроить фичу в спецификацию языка, определив ее взаимодействие с другими языковыми конструкциями. И, наконец, покрыть тестами и реализовать в компиляторе.
– С этого года ты начал вести практику по функциональному программированию у студентов первого курса магистратуры. Почему ты согласился и что показалось самым сложным в преподавании?
– Я давно хотел попробовать преподавать — мне нравится в чем-то разбираться, перерабатывать знания, готовить материалы и рассказывать об этом другим. У меня довольно большой опыт обучения в разных местах, и кажется, я хорошо понимаю, где и какие подводные камни разложены. Так что когда мне предложили помогать с практиками, я не очень долго думал.

Самым сложным и ключевым в преподавании для меня было научиться справляться с волнением и тревогой. Перед первой парой я очень сильно нервничал, и, разобравшись, обнаружил, что проблема в неявном и ошибочном целеполагании. Xотелось всем понравиться, чтобы занятие прошло без единой ошибки. Но преподавателя нанимают не для этого. Главная его задача – заинтересовать своим предметом, помочь усвоить как можно больше с как можно меньшими затратами времени и нервов со стороны студентов. А для этого нужно быть внимательным, отзывчивым и вкладывать достаточно много труда в подготовку занятий и домашних заданий.
– Получается, что сейчас ты одновременно и студент, и преподаватель. Стал ли ты после этого как-то по-другому смотреть на учебный процесс, открылись ли тебе тайные знания?
– Совсем тайных знаний не открылось, но моя субличность студента, которая успела довольно много настрадаться на не очень удачных курсах, формулирует запросы к субличности преподавателя. Так что я выделил пару вещей, понимание которых мне кажется важным.

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

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

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

Нужно быть отзывчивым и готовым прийти на помощь, чтобы студенты понимали, что всегда есть к кому обратиться. Это успокаивает и качественно меняет обучение. Помогая, хорошо бы понимать, что это может быть собственный косяк, а не студент не понимает чего-то тривиального, вставать с ним на один уровень и пытаться с его позиции и подготовки взглянуть на вопрос. Человек, обращающийся за помощью, и так находится в уязвимой позиции. Очень просто навредить, если отнестись к помощи невнимательно и безответственно. Также можно аккуратно предлагать помощь тем, кто не очень хорошо справляется. Например, хороший вариант – по договоренности направлять за помощью к кому-то из одногруппников, у кого получается лучше.

Второе. Ма мой взгляд, преподавание требует большого количества труда и работы как над курсом, так и над собой. Хорошие материалы помогут по прошествии времени восстановить знания в памяти. Подготовленные объяснения позволят компактнее уместить материал в сознании и более эффективно его использовать. А еще нужно тщательно продумывать домашки. Если студенты не получают положительного подкрепления от понимания или обретения новых навыков, если им приходится бессодержательно тратить время, мотивация заниматься предметом закончится очень быстро.
– Дай несколько советов абитуриентам программы: к чему готовиться (морально и технически) и как сделать эти два года учебы максимально полезными?
– Самое важное – понять, зачем вам всё это. Учась в магистратуре, вам придется довольно существенно трансформировать свой образ жизни, приспосабливаться под возросшую нагрузку. Если отвечать на вопрос неискренне, с дежурными словами про карьеру, развитие и профессионализм, вы можете либо столкнуться с потерей мотивации, либо постфактум будет жалко потраченного на не свое дело времени. Конечно, мало кто абсолютно всё про себя понимает, так что просто пробовать и искать себя – тоже вариант. Главное, не сдаваться слишком рано – иначе можно упустить что-то важное.

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

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

Основной источник проблем — тревога, и с ней нужно бороться особенно тщательно. Она подрывает силы и не дает нормально думать и учиться. Очень легко можно скатиться в бездумное набирание баллов, без построения целостной картины и должного понимания, а это сразу обесценивает все старания. Мне помогает вычленение причин тревоги и их устранение, например, за счет проработки планов для самых пугающих мыслимых сценариев. Еще очень помогает оставлять немного времени на какие-то дела помимо учебы, например, чтение или спорт. Это позволяет не сосредотачивать всю свою идентичность на учебе и, как следствие, легче проживать локальные неудачи (которых будет множество — и это нормально!)

По опыту мне кажется, что если сохранять самообладание и спокойно, не ленясь, делать всё в своем темпе — со всем можно справиться и всё понять.