Для профессионалов в тестировании! >>>TestingStage2018>>> Продажа билетов на конференцию открыта. Успей купить!
×Закрыть

Как организовать обучение в команде начинающих программистов

Image via Shutterstock.

Привет, читатели ДОУ. Меня зовут Дмитрий, я Java Trainer. Обучив в команде более 50-ти Java разработчиков и набив немало шишек, я решил составить итоговую инструкцию, по которой команда разработчиков сможет самостоятельно писать крупные обучающие проекты.

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

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

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

Лидер в команде

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

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

Сталинский подход, или лояльность вредна

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

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

Должна быть цель

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

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

Инструменты разработки одни для всех

Каждый участник команды должен использовать одинаковые средства разработки. То есть, если команда выбрала использовать Intellij IDEA, то все используют эту среду разработки. Если решили использовать базу данных Oracle, значит никто не использует Postgres. Вам нужно определить с самого начала, чтобы потом все знали и использовали только выбранные инструменты. Иначе будет уходить очень много времени на решение других проблем, которые будут возникать через несовместимость версий и т.д.

Время

Определитесь со временем, которое каждый участник должен уделять проекту. Если у кого-то не хватает времени на работу, стоит ли его вообще брать в команду? Вы должны понимать, что команда должна работать эффективно, мотивировать друг друга. Для этого нужно время. Поэтому заранее договоритесь, сколько часов будете ежедневно/еженедельно уделять проекту.

Мотивация

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

Взаимодействие команды

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

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

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

Выбор проекта

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

Распространенные ошибки

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

Резюме

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

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

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

LinkedIn

17 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Полезная статья! Спасибо!

Dmytro Sokolov, спасибо большое за статью.

интересно, учитывает ли статься вариант удаленного нахождения джунов и их работу в команде

Сатя на 100% про удаленную работу.
Обучение проводилось и проводиться только в таком режиме.

Подскажите, как на практике происходит трудоустройство начинающих программистов?

На Вашем портале ( becomejavasenior.com ) прочитал фразу:
«Все это не гарантирует 100% прохождения собеседование, но значительно увеличивает шансы!»

Например Udacity.
Он пишут в письме от 13.01.16 в теме «Introducing the new Udacity job guarantee!».
Письмо о гарантированном трудоустройстве по завершению обучения или возврате денег.

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

Реально что бы устроиться на рыночную ЗП нужно владеть тремя навыками:
— технический (то что должны давать курсы)
— английский язык
— навык прохождение интервью + само резюме
На два последних можно потратить столько же времени как и на первый.
«Умные» курсы уже предлагают 2 остальных навыка (я тоже помогаю прокачать becomejavasenior.com/...16/02/03/java-interview/

В всем остальном, трудоустройство это 100% сообразительность и смекалка кандидата. Глупо на кого то вешать за это ответственность, тем более финансовую.

Т.е. за курсы платить не надо, а надо платить за «умные» курсы )
Или не платить вообще, а просто сильно хотеть учиться.
Сообразительность и смекалка это 100 % Вашего успеха...

Это все разговоры и как Вы отметили, паразитирование и маркетинг.

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

Проблема в том что нет системы образования (может есть, но я там не учился), нет нормальной адаптации людей из других сфер!

И чтоб выучиться надо очень потрудиться. А если еще нет друзей, которые без меркантильных побуждений направят в нужном направление, вообще хардкор.

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

Образование будет бесплатным.

А вот абсолютно бесплатно запись трансляции
Intersect Live Stream (January 29th), где я услышал какие типичные ошибки на собеседованиях я допускал, и на что надо обратить внимание.
www.youtube.com/watch?v=ay4qkoG3xGs

Дорогие Джуны, верьте в свои силы! Всем удачи ;)

Написал длинный и развернутый комментарий, но потом удалил. Это тема довольно сложная и спорная для меня. Надеюсь редакторы DOU добавят ссылки, где уже не одну сотню раз обсуждалось эффективность самообразования и курсов.

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

И по результатам работы на живых или тренировочных проектах зачислять в штат или прощаться.

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

Даже больше, есть куча фриланс порталов.
Если команда сдала проект — им на печеньки.
Завалила — платите штраф, смотрите и учитесь...

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

P.S.
к слову, есть такая команда из 3-х полуджунов...так что если вдруг готовы к образовательному эксперименту — пишите в скайп svist_
)

Вы так афигительно все расписали, что не могу воздержаться от вопроса: по Вашим наблюдениям, что из вышеперечисленного чаще всего не работает (по любым причинам — от прощолкали до не-может-работать-в-принципе) на практике?

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

Создать страничку на викиресурсе , содержащую
-список необходимых программ и инструментов для работы
-список параметров окружения (настройки конекшенов к БД, адреса репозиториев исходного кода, адреса QA и продакшн серверов, страниц в системе непрерывной интеграции и тд)
-список полезных контактов (администраторы чтобы запросить доступ к репозиторием и другим ресурсам)
-краткий гайдлайн по используемым технологиям, список рекомендуемых паттернов и антипаттернов (например — «всегда предпочитайте ArrayList для общих контейнеров и LinkedHashMap для ассоциативных, если нет каких-то особых требований»)
-список тасков на ознакомительный период для новичка в команде на первый месяц (установить то-то, освоить то-то)

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

+1
Хороший тест на вменяемость для сотрудника.
Есть личный опыт, когда новички отваливались на этом этапе уже на следующий день.

ниасилили конфлюэнс и джиру? :-)

Мне приходилось готовить такие материалы для новеньких, а потом проверять что они запомнили и что поняли.
Так многие уже на этапе получения методичек начинали «фыркать»... как говорится лидер определялся сразу :)

Отлчиное дополнение. Все конечно же должно быть задукоментрованно, по максимум вести письменный учет всех соглашений, то ли запись в спецификации, в wiki, то ли в виде задачи в Jira. Если этого не сделать — будут проблемы, на решение которых уйдет больше времени чем сделать запись.

Подписаться на комментарии