«Я послушаю лекции, всему научусь, все пойму — нет, нужно руку набить, нужна практика»
Интервью с выпускником программы
Львом Довжиком
Лев Довжик — преподаватель, выпускник программы «Программирование и искусственный интеллект» и старший программист-разработчик в VK. В интервью он рассказал, как стал преподавателем, легко ли было совмещать учебу, преподавание и работу. А также как он ускорил и упростил проверку домашних заданий и чем он гордится как преподаватель.
Лев Довжик, фото из личного архива
— Расскажите, пожалуйста, в какой команде в VK вы работаете и чем занимаетесь?
— Я работаю в команде инфраструктуры баз данных, или движков, как у нас их называют. Это специализированные персистентные хранилища, которые используют знания об особенностях своих данных для их более эффективного хранения и обработки. Моя команда больше сфокусирована на внутренностях таких общих компонентов баз данных, как работа с сетью или диском, а также внутренних движках, которые соединяют нашу инфраструктуру в единую систему.
— Я правильно понимаю, что эти базы данных могут использоваться дальше в любых продуктах VK?
— Исторически они использовались только внутри ВКонтакте, а не всего большого VK. Глобально мы создаем такие базы данных, которые другие команды уже могут использовать в качестве строительных элементов в своих проектах. И главное их преимущество — простота внедрения.
— А как давно вы там работаете и как впервые попали в VK?
— Этим летом будет шесть лет. Начал я на третьем курсе бакалавриата: летом после второго курса прошел на стажировку, затем нам предложили пройти собеседования в различные команды и выбрать понравившуюся. За время стажировки мы успели поработать с разными частями Вконтакте, потрогали три основных уровня абстракции — движки, бэк и фронт.
— Какие знания вы используете в своей работе?
— Если говорить в общем, то стоит начать с C++: мы его активно используем, у нас движки в основном на плюсах разрабатываются. Полезными оказались и курсы по архитектуре ЭВМ, операционным системам, компьютерным сетям и распределенным алгоритмам и параллельному программированию. Знания с этих курсов нужны в разных объемах, но общее понимание иметь важно. Я учился в магистратуре «Программирование и искусственный интеллект» еще до ее обновления, и в то время основной упор был на ML, поэтому для меня программа была общим знакомством с этим направлением. И несмотря на то, что работа моя с машинным обучением не связана, я могу разговаривать на одном языке с коллегами из этой области.
— Помимо работы вы еще преподаете курс по С++ в ИТМО. Как вы к этому пришли?
— Честно, я не умею нормально отвечать на этот вопрос, потому что просто случилась неведомая череда событий, которая привела меня в преподавание. Немного помогать на этом курсе я начал еще с бакалавриата: проверял домашние задания и даже один раз принял экзамен. Почему я это делал — не помню, вероятно, когда-то меня попросили помочь, а я не отказал, тем более, что курс был действительно хорош. Потом был перерыв, и в начале 2020-го, когда как раз началась пандемия COVID-19, на курсе возникла проблема с проверкой практической части. Курс тогда вел один человек, и если с лекциями все было хорошо, то на домашние задания попросту не хватало рук. Небольшая вводная: на этом курсе задания проверяются у каждого студента при личном взаимодействии, т. е. студент приходит, показывает код и получает к нему комментарии. На удаленке организовать такое взаимодействие оказалось сложнее, и так случилось, что время приближалось к сессии, а студенты так и не получили фидбека по домашним заданиям. Зная про всю эту ситуацию, я решил предложить преподавателю курса свою помощь. Так мы за три недели приняли все домашки и экзамены, собрав с нуля первую систему проверки через автотесты на GitHub Actions. В ней были недочеты, например, репозитории студентов были открытыми форками репозиторев с заданием, а времени настраивать гранулярные доступы под каждого студента и проверяющих у нас не было, и, соответственно, все могли посмотреть его. Для детальной проверки мы использовали код ревью. Мне удалось привлечь еще нескольких ребят, которые согласились в свободное время просматривать домашние задания студентов. Мы также помогли принять и экзамен. После всего этого мне написали с кафедры и предложили продолжить поддерживать и развивать эту систему. Я и остался.

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

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

Из приятного — мы делаем этот мир лучше. Я считаю, просто лекции прослушать будет довольно бесполезно. Это всегда самообман: я послушаю лекции, всему научусь, все пойму — нет, нужно руку набить, нужна практика. И мы определенно гордимся качеством нашей практики, тем, что мы оставляем довольно подробные комментарии, кто-то считает это минусом или что мы излишне дотошны, но очень жаль этих людей.
— Были ли у вас когда-нибудь мысли о том, чтобы придумать какой-нибудь свой курс?
— Ну, в каком-то смысле у нас уже свой курс. Мы все в тандеме, просто разные люди разными вещами занимаются: есть специализированный лектор, он вообще не думает о том, что там на практике, этим всем занимаемся мы. Главное — синхронизироваться только.
— А лектором не хотелось стать?
— Мысли такие были, но, прям, острого желания нет. Но, скорее, из принципа, что работает не трогай. Потому что даже если взять готовые материалы, все равно, никакие выкладки не спасут от необходимости структурирования информации в голове. К этому, конечно, я верю, можно прийти, но потребуется какое-то время, и в моменте, скорее всего, пострадает качество курса. Жертвовать качеством ради самореализации, мне кажется, немножечко подлым.
— У вас весь год есть параллельная нагрузка по курсу и полноценная работа. Как вы все успеваете?
— С трудом. Если говорить про преподавание, то, во-первых, за счет опыта, а во-вторых, за счет количества. С этим, конечно, непросто: не много людей захотят посвящать столько своего времени на просмотр домашних заданий студентов. Когда нас было меньше, меня спасало только то, что мой диплом совпадал с задачами на работе. Но в среднем, как я вижу, большинство из нас работает с этим по выходным.
— Есть какой-нибудь совет, как совсем этим справиться?
— Не делать так. Если нужно делать три вещи одновременно — в моем случае был период, когда я учился в магистратуре, преподавал и работал — нужно чем-то очень сильно пожертвовать. Ну, собственно, ближе к диплому, я честно написал ребятам, сказал, что я больше не справляюсь одновременно и с работой, и с дипломом, и с курсом, и взял небольшой перерыв.
— А про что был ваш магистерский диплом?
— Я пытался ускорить надежную запись на жесткий диск при помощи маленького и очень быстрого устройства — NVRAM — своеобразного аналога оперативной памяти компьютера, из которого при внезапном отключении питания данные не стираются.

Это устройство схоже с оперативной памятью по скорости записи и модели доступа к данным, но ее можно использовать как персистентный кэш для записи. Однако для этого, как правило, нужно менять часть кода, чтобы записать ее на это устройство и не потерять в скорости. Решение сделать использование NVRAM незаметным для человека на деле достаточно сильно ограничивает производительность и усложняет систему. Мой диплом по сути ближе к proof of concept. В нем я разбираю основные подходы, которые сейчас можно реализовать эффективно. В качестве примера я тестировал журнал базы данных: запустил базу данных просто на SSD и на SSD с NVRAM, ничего не меняя в ней, и она, как и ожидалось, ускорилась, не потеряв в консистентности и надежности.
— Удалось ли довести исследование до практического внедрения?
— Это был больше научный диплом, чтобы довести это до индустриального прототипа нужно еще столько же времени, а может и больше потратить. Плюс эти железки массово не используются, и придется долго убеждать отдел закупок, чтобы они их купили. К тому же, далеко не всем настолько критична скорость надежной записи. На больших масштабах не всегда нужно выжимать максимальную скорость, иногда нужно получить просто достаточно хорошую, но чтобы это масштабировалось по деньгам, серверам и т. д.
— Насколько вам было интересно проводить исследование? Увлекла ли вас эта деятельность?
— Скорее мне было интересно потыкаться, но не скажу, что очень много страсти к этому приобрел. Возможно, если бы это была какая-то большая работа в команде с людьми вживую, было бы получше. Это вообще одна из причин, почему в эпоху удаленки я хожу в офис регулярно. С людьми вживую работать как-то проще и приятнее. Я в целом не люблю работать в одиночку, всегда приятно, когда кто-то рядом страхует или когда есть с кем обсудить задачу не по методу уточки.
— Что, по-вашему, нужно знать прежде, чем идти в магистратуру?
— Мне кажется, важно понимать, что работать и одновременно учиться полноценно в магистратуре нельзя. К этому нужно быть морально готовым. Вероятно, когда-то придется сделать выбор в пользу одного или другого, ну или пытаться искать компромиссы. На программе много интересных предметов, на которые можно потратить свое время и научиться чему-то полезному, и если в них качественно инвестировать свое время и ресурсы, то не так много времени останется на сон, не то что на работу.