Как первокурсники Питерской Вышки за семестр написали торрент-клиент, анализатор кода, фоторедактор и не только

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

    Под катом подробности внутренней кухни: рассказ о том, как была устроена работа над проектами. 


    Кратко: каждой команде назначили менторов из числа действующих разработчиков или студентов старших курсов с опытом работы в IT-компаниях. Еженедельно первокурсники рассказывали о прогрессе и сложностях, с которыми пришлось столкнуться, в анкете и во время созвона с ментором. Чтобы команды потренировались выступать публично (а заодно чтобы установить дедлайны, к которым нужно готовиться), мы организовали две предзащиты. На финальной защите все команды успешно представили проекты, средний балл студентов — 9,0 по 10-балльной шкале.

    Теперь подробнее.

    Об организаторах


    Мы — Наташа Мурашкина, Саша Орлова и Оля Лупуляк — студентки старших курсов «Прикладной математики и информатики» в Питерской Вышке. Мы занимались организацией проектов под руководством куратора направления и лектора курса по С++ Егора Суворова.

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

    О проектах


    Цель проектов на первом курсе — дать студентам попробовать силы в промышленном программировании, а также показать особенности длительной работы над проектом и разработки в командах. 

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


    Демо-видео проекта Fivaproljo (мультиплеерный платформер)

    К концу семестра необходимо было получить хотя бы MVP проекта, но многие команды успели добавить больше функциональностей, а кто-то — даже написать тесты и оформить страницу на GitHub с описанием и инструкцией по запуску. Примеры: Моделирование и визуализация динамических систем, Анализатор кода — UB-tester tool, Компьютерная версия игры «Колонизаторы».

    Подготовка


    В начале семестра студенты разделились на 21 команду по 3 человека. Каждая команда самостоятельно выбрала тему проекта и согласовала ее с организаторами, после чего получила контакты своего ментора.

    Ментор — это сотрудник IT-компании или студент старших курсов с опытом промышленной разработки. Менторы помогали с распределением задач и решением технических проблем. Они еженедельно созванивались со студентами, чтобы обсудить прогресс и составить план работ на следующую неделю. В число менторов вошли стажеры и сотрудники JetBrains, «Яндекса», «ВКонтакте», Huawei, Google, Delightex, VeeRoute и других компаний, преподаватели Летней компьютерной школы (ЛКШ), а также студенты нашего факультета, московского кампуса Вышки и кафедры КТ университета ИТМО. 

    В качестве эксперимента мы даже пригласили мета-ментора (ментора для ментора): опытный сотрудник Google наставлял нашего старшекурсника в менторстве команды.

    Работа в течение семестра


    Каждую неделю студентам нужно было созвониться с ментором и заполнить анкету о проделанной работе.

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

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

    Воркшопы


    За семестр студенты дважды тренировались выступать перед публикой и отвечать на вопросы во время воркшопов. Каждая команда представляла работу за 7 минут, показывала короткое демо-видео и еще 7 минут отвечала на вопросы аудитории. 

    Идея проводить репетиции не нова, и в нашем случае мы вдохновлялись воркшопами по публичным выступлениям, в которых Наташа участвовала во время стажировки в Google.

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

    Структура презентации для воркшопов


    • Титульный слайд
    • Введение в область
    • Краткое описание проекта
    • Сравнение с аналогами
    • Сравнение технологий
    • Разбиение на подзадачи для каждого участника (по слайду на участника)
      • Описание подзадачи, решение, выводы
    • Описание текущего состояния проекта (что было сделано с начала)
    • Описание прогресса с предыдущей презентации
    • Планы до конца разработки
    • Можно сделать демо-видео не длиннее 30 секунд

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


    Демо-видео проекта «Моделирование и визуализация динамических систем»  

    Как оценивали вклад каждого участника


    Здесь нам помогали коммиты студентов на GitHub и анкеты менторов. 

    К первому воркшопу и к защитам мы попросили студентов залить код проекта на GitHub. Количество строчек кода — это, конечно, нечестная метрика, и нельзя судить только по ней, но ее мы использовали как первый фильтр. После — вчитывались в содержание. 

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

    Итоговая оценка каждого студента за семестр складывалась из трех частей:

    • 30% — работа в течение семестра. Для хорошей оценки нужно вовремя сдавать анкеты.
    • 35% — оценка ментора. Для хорошей оценки нужно, чтобы ментор оценил прогресс.
    • 35% — оценка комиссии на защите. Для хорошей оценки нужно, чтобы в итоге что-то получилось.

    Итоги


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


    Скриншот с защиты проекта TorrentX

    Мы довольны результатами ребят. Трое студентов (из 61) получили оценку «удовлетворительно», все остальные — «хорошо» и «отлично». Средний балл — 9,0 по 10-балльной шкале. 

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

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

    Менторы, судя по обратной связи, получили удовольствие от работы.

    Как и мы :) Так что в следующем году планируем продолжить.

    Планы на будущее


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

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

    • Улучшить матчинг команда — ментор, возможно, ввести собеседования между командой и ментором и маленькие тестовые задания. Учитывать пожелания менторов руководить более подготовленной (требует больше знаний) или менее опытной — но не менее старательной! — командой (требует лучших управленческих навыков).

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

    • Давать обратную связь менторам и студентам, даже если все идет хорошо, чтобы не казалось, что анкеты отправляются в пустоту.

    • Форсировать написание тестов. Тесты были обнаружены в единицах проектов, однако первый курс — это золотое время, когда нужно приучать к написанию тестов спинным мозгом.

    И еще +100 заметок, которые мы бережно сохраняли в течение семестра.

    Если вы хотели бы на волонтёрских основах побыть ментором студентов-первокурсников в следующем году, заполните форму или напишите нам в Телеграме (@murfel). Будем рады!
    Питерская Вышка
    Компания

    Комментарии 6

      +5
      Из презентации TorrentX:
      Аналоги клиента: Transmission, язык: Objective-C
      весьма странно читать, учитывая, что libtransmission (ядро клиента), transmission-daemon, transmission-cli и transmission-gtk написаны на Си, а на Objective-C у них только интерфейс macOS-версии (и еще есть экспериментальная морда Qt на C++). Это я как контрибьютор удивляюсь :)
        0

        Это был бы очень хороший вопрос к студентам на защите.


        Да, на сравнение с аналогами мы на предзащитах (да и защитах) смотрели очень, очень, очень поверхностно.

          +1

          судя по github, написано таки на плюсах. Претензии конечно есть (например, там два подпроекта на cmake и один почему-то на qmake), но в целом — чтоб я такое писал в таком возрасте.

            0
            Вы наверное не поняли, я говорил не про их проект, а про Transmission, с которым они сравнивают свою разработку в презентации.
            +1
            Меня смущает, что студент не сам написал торрент-протокол, а просто сделал гуй к libtorrent.
            client cloc — 283+36+113.
            0

            В бауманке тож проекты на первом курсе пишем) так что не только вы одни такие.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое