ФИИТ УрФУ. Как учить работать в команде?

Revision ru5, by xoposhiy, 2020-07-21 23:41:40

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

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

Неплохо бы, сначала нужно научить работать в команде, декомпозировать задачу, рефлексировать над промежуточными итогами работы, корректировать планы и, конечно, преодолевать конфликты в команде. Именно поэтому курс «Основы проектной деятельности» мы поставили прямо в первый семестр в нашей образовательной программе.

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

До старта проекта

Первый месяц — это погружение в теорию управления проектами. Мы выделили 3 занятия по 2 пары, чтобы разобраться с тем, как можно собрать команду, как планировать работу, какие есть способы управлять процессом. Занятия — не только голая теория, но и интересные практики с элементами фана.

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

Следующий этап работы — планирование и распределение задач.

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

Как раз такой подход формализует Scrum. Мы выбрали его как самый легкий для входа и подходящий для студенческих проектов. С его принципами мы знакомили ребят на примере... строительства города из Lego! :)

Lego это же так просто, да? Сложности начинаются, когда у вас есть заказчик с какими-то не всегда явными желаниями и ожиданиями. «Погодите, вы построили детский сад рядом с вулканом? Нет-нет-нет, безопасность детей — наш первый приоритет! Переделывайте!» Ребятам предлагается делать город с помощью гибкой методологии, с итерациями, командным планированием, демонстрацией промежуточных этапов заказчику. «Вот, теперь отличный вулкан! А как все таки туристы будут подходить к его жерлу? В смысле, никак? Кому нужен такой вулкан тогда?!» Отличный способ быстро и интенсивно попрактиковаться в применении Scrum. «Ого, это что, большая фигура пирата на пляже? Прекрасно! Очень нравится!»

Проект

Итак, собрали команду и научились планировать, пора работать! Самое время рассказать про задачу, которая стояла перед командами. Это был не совсем программный проект в обычном понимании этого слова. Это было соревнование.

Мы подготовили командный турнир по особенным правилам, в котором каждой команде нужно решить несколько сотен однотипных задач. Делать это можно вручную, но правильнее, конечно автоматизировать решение: получить с сервера входные данные задачи, вычислить ответ и отправить обратно на сервер до тех пор пока не истечёт таймаут. Чем больше типов задач умеет решать программа, тем больше баллов можно заработать и тем выше место в рейтинге.

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

Поэтому мы спроектировали правила нашего соревнования с нуля так, чтобы промышленные практики работы в команде оказались в нём максимально востребованными.

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

Итак команда получила с сервера несколько задач одного типа, поняла как автоматизировать решение таких задач, написала код решателя, запустила его и... В середине работы обнаруживает, что задача усложнилась и решатель больше не справляется. Пора срочно разбираться, ставить заплатку в коде или и вовсе всё переделывать. Так мы эмулировали "баги в продакшене" из реальной жизни :)

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

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

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

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

Итог

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

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

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

Был и ещё один эффект от командного соревнования. Студенты узнали, чего можно ожидать друг от друга и заработали свою первую репутацию. Это пригодится им в следующих курсах, где снова потребуется формировать команды и делать проекты.

Возможно, среди читателей найдутся те, кто либо делает подобное. Расскажите, а как вы учите командной проектной работе?

А если вы выбираете себе ВУЗ прямо сейчас, то обратите внимание на нашу программу ФИИТ УрФУ. Ну а подать документы на поступление можно в личном кабинете УрФУ ;-)

Tags бакалавриат, выбор вуза, обучение, проект

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru11 Russian xoposhiy 2020-07-22 08:52:48 0 (опубликовано)
ru10 Russian xoposhiy 2020-07-22 08:52:19 16
ru9 Russian xoposhiy 2020-07-22 00:01:38 72
ru8 Russian xoposhiy 2020-07-21 23:58:08 1048 Мелкая правка: 'rfu.ru/). Ну а подать доку' -> 'rfu.ru/). Подать доку'
ru7 Russian xoposhiy 2020-07-21 23:48:12 55
ru6 Russian xoposhiy 2020-07-21 23:45:05 152
ru5 Russian xoposhiy 2020-07-21 23:41:40 3106
ru4 Russian voka.ekb 2020-07-17 16:03:18 433
ru3 Russian voka.ekb 2020-07-17 15:51:05 200
ru2 Russian voka.ekb 2020-07-17 15:41:45 7914
ru1 Russian xoposhiy 2020-07-16 16:22:26 44 Первая редакция (сохранено в черновиках)