Мобильная разработка: индивидуально или в команде?
Привет! Как многим известно, Mail.ru Group ведет образовательные проекты для студентов в 9 вузах: МГТУ им. Баумана, МГУ, МИФИ, МФТИ, СпбПУ, Мосполитех, МАИ, ВГУ и ПГУ. Среди 70 дисциплин есть курсы по мобильной разработке под платформы Android и iOS.
С точки зрения методологии в образовательных проектах есть интересная деталь: мы используем в обучении два подхода — индивидуальный и командный. Одни преподаватели выстраивают программу курса, исходя из плотной командной работы, другие, наоборот, опираются на индивидуальную работу каждого студента. Оба подхода дают свои результаты, имеют свои «плюсы» и «минусы», своих последователей и критиков. Мы выслушали аргументы обеих сторон.
Как работает индивидуальный подход?
В целом, индивидуальный подход более утилитарный и результативный — студенты действительно готовятся к будущей работе. Они самостоятельно проходят все этапы — причем это означает не только повышение собственного уровня, но и выработку чувства ответственности за свою работу. Т.е. нет такого эффекта, когда учащийся надеется, что тему, которую он не понял, за него сделают другие члены команды.
Среди недостатков индивидуального обучения можно выделить отсутствие обмена опытом. Работая в одиночку можно полагаться только на свой опыт, которого определенно меньше, чем у команды из 3−4 человек. Кроме того, работая в одиночку, нельзя повысить уровень технических навыков для работы в команде. Например, работа с git«ом упрощается до add, commit, push. И нет шанса испытать ни реального git flow, ни проблем которых он решает, ни проблем, которые встретятся в реальных проектах.
Как работает командный подход?
Современные проекты не делаются в одиночку, они делаются в командах и, временами, довольно больших. Поэтому к разработчикам предъявляются как требования к знаниям, так и требования к умению работать совместно. Поэтому мы реализуем командную работу по проекту в составе 3−4 человек. Таким образом, все этапы разработки студенты реализуют совместно. Принципиальная вещь, которую отмечают преподаватели при командном подходе и не видят ее при индивидуальной работе: если все процессы хорошо поставлены и участники «горят» общей идеей, то общая прокачка навыков будет быстрее, а итоговый проект будет сложнее и качественнее.
Несмотря на то, что продуктивность не растет линейно с размером команды, различные части мобильной разработки успешно параллелятся. Здесь есть важный аспект: нужно в начале договориться об архитектуре и модели оперируемых данных. Один разработчик может разрабатывать одну функциональность на одном экране приложения, а другой — другую и при этом не мешать друг другу.
Другой плюс командной разработки — устойчивость к нештатным ситуациям.
В-третьих, сокомандники помогают находить большее количество способов решения конкретной проблемы. А более простые решения экономят и время разработки, и уменьшают вероятность появления ошибки.
Еще один плюс такого подхода, не лежащий на поверхности, заключается в том, что студенты учатся отстаивать свои решения. Если студент предложил своей команде использовать в проекте какую-то библиотеку — он должен убедить в ее необходимости, объяснить выбор. Аналогично с выбором архитектуры, базы данных, подходов верстки и так далее. Как показывает практика, в начале карьеры разработчику сильно проще научиться работать в команде, договариваться с коллегами и эффективно вести коммуникации, чем после нескольких лет одинокого фриланса.
При этом у командного подхода тоже можно выделить некоторые минусы.
При командном подходе тратится дополнительное время на синхронизацию, митинги, споры, Merge Conflict«ы которые возникают у участников. У участников может не быть полной экспертизы в проекте. Кто-то, показавший недостаточную результативность, может «спрятаться» за активным участником команды. Кроме того, потеря одного члена команды — например, когда кто-то решает, что это ему больше неинтересно, и покидает команду — обязательно негативно отражается на результате.
Подводим итоги
Наши преподаватели поделились мнением о том, как индивидуальный и командные подходы влияют на процесс обучения и подготовку к работе в серьезных проектах. Как по-вашему, какие моменты еще следует учесть и какой подход вы бы предпочли при изучении нового направления разработки?