Автор: Даниэль Подольский, старший инженер Golang в Sphere Software
Давайте поговорим о тимлидах и их роли в процессе разработки программного обеспечения.
Что такое тимлид? Согласованного ответа нет, поэтому мне придется говорить из собственного опыта.
Цель тимлида и причина их существования просты: они должны убедиться, что команда достигает своих целей. Ни больше ни меньше.
Ежедневные обязанности тимлида просты, но очень важны:
- Сохраняйте значимость работы. Практически невозможно заставить человека ежедневно делать то, в чем он не видит смысла. Таким образом, руководитель группы должен объяснить цели, задачи и шаги таким образом, чтобы команда поняла.
- Поддерживайте мотивацию команды. Деньги — не всегда лучший способ привлечь программистов. На мой взгляд, лучший мотиватор — это возможность личностного роста. Если программист чувствует, что укрепляет свои навыки, он будет в восторге от проекта.
- Держите цели достижимыми: никто не может продолжать свои усилия в безвыходной ситуации, поэтому мы должны сделать цели реалистичными. Но цели не должны быть слишком легко достижимыми — помните о факторе личностного роста.
Какие действия предпринимают руководители команд для достижения своих целей?
- Обеспечение лидерства. Руководитель группы должен иметь глубокие и обширные знания о задаче и о том, как она соотносится с бизнес-целями организации. У них должны быть обширные технологические знания, которыми они могут поделиться, чтобы помочь членам команды выполнять свою работу.
- Тренер. Руководитель группы должен предоставить конструктивную обратную связь, чтобы помочь членам команды стать более эффективными. Примеры включают: «Посмотрите на эту технологию», «прочитайте эту статью», «это может быть не лучший способ сделать это» и так далее.
- Назначение задач. Именно на это руководители групп тратят больше всего усилий. Каждая задача должна быть достаточно маленькой, чтобы ее можно было отслеживать, и в то же время достаточно большой, чтобы снизить затраты на управление. Каждая задача также должна быть достаточно интересной или, по крайней мере, достаточно важной, чтобы заставить людей работать над ней.
- Проверка кода. Проверка кода не имеет ценности сама по себе. Чтобы сделать ее полезной, руководитель группы должен оценивать код с учетом общей картины и стратегии. Если код не на должном уровне, руководитель группы должен предоставить рекомендации по его устранению.
Это более-менее полная картина обязанностей тимлида.
Теперь давайте взглянем на другую тему, упомянутую в заголовке: Golang.
Обзор Голанга
Golang — это новый язык программирования, который в некотором смысле неортодоксален. Он отличается от процедурных языков, с которыми привыкло работать большинство разработчиков. Ниже приведены его уникальные свойства:
- Это примитивно. Слово «простой» недостаточно сильно для описания ситуации. В Go нет сложной иерархии классов, алгебраических типов данных, исключений и асинхронного ожидания. Каждый процесс прост. Шаблонный код используется везде, где это возможно — Go стремится к ясности, а не к элегантности.
- Это жестко: синтаксис жесткий (и примитивный), стиль кода жесткий, и даже место, где вы размещаете свой код, предопределено, и его нелегко изменить. Имена пакетов должны быть описательными и легко понятными. Неиспользуемые переменные и импорты вызовут ошибку времени компиляции.
- Это невыразительно: для написания алгоритма на Go требуется в два раза больше кода, чем на Java, в три раза больше кода, чем на C++, и в десять раз больше кода, чем на Lisp. У вас нет доступа к синтаксическому сахару, шаблонам, универсальным типам и т. д. Проверка ошибок — это шаблон — пишите просто или страдайте от последствий
- Это идиоматично: большинство задач можно записать в Go только одним способом. Даже если вы обнаружите, что что-то можно сделать несколькими способами, есть один «правильный способ», который вы должны использовать. Сообщество нетерпимо к неидиоматичному коду.
Похоже на кошмар разработчика, не так ли? В некотором смысле это так.
Теперь вы можете спросить: как это может помочь руководителю команды? Давайте взглянем.
Преимущества Golang для руководителей команд
Давайте еще раз обратимся к списку целей тимлида. Ниже приводится подробное описание того, как го-го входит в игру:
Лидерство
- Простота Go упрощает объяснение каждой задачи. На самом деле нет возможности сделать что-либо вне самой задачи — нельзя писать код «для будущих нужд» или для «других, чтобы потом использовать». Подход прост: это спецификация, это результат.
- Жесткость Go не позволяет тратить время на споры о том, как код должен быть структурирован, спроектирован или оформлен. Один язык, один способ, одна команда.
- Невыразительность Go вызывает меньше споров об «уродливом» коде. Каждый кусок кода Go так или иначе «уродлив», поэтому никто не пытается искать красоту. По моему опыту, страсть к «красивому» коду может отнять на удивление много времени.
Обучение
- Я не думал, что примитивизм — это хорошо, пока не начал работать с Go. Любая идея, объясненная в терминах Go, кажется простой. Конечно, идея остается той же, но объяснение не имеет шансов усложниться. Итак, когда вы объясняете «как» и «почему» каждой задачи, каждый может легко понять концепции.
- Жесткость Go упрощает соблюдение общих стандартов. Как правило, возникают разногласия по поводу того, какие методы кодирования лучше. Однако в Go часто есть только один вариант, так что тут не поспоришь. Аллилуйя!
- Идиоматическая природа го также облегчает жизнь команде. Каждый программист знает, что общий стиль кода лучше всего подходит для любого языка. Поскольку стиль Go фиксирован, у разработчиков нет возможности изобретать свой собственный стиль — они должны придерживаться общих стандартов.
Назначение задачи
- Свойства Go не позволяют поставить непонятную задачу. Конечно, Go — не единственный язык, предоставляющий такое преимущество. Например, я могу сказать то же самое о C (но с C опасно играть, верно?). Однако я не могу сказать то же самое о Java, C++, C#, Python, Perl или NameIt.
Проверки кода
- Примитивная, жесткая, невыразительная и идиоматическая природа Go делает каждый фрагмент кода легким для чтения и понимания. В Go нет виртуальных методов, поэтому вам не нужно искать по всему проекту, где определен настоящий код. В Go нет наследования, поэтому любой тип, который вы ищете, является последней и единственной версией типа. В Go нет исключений, поэтому ошибка перехватывается именно там, где она произошла. Большинство модулей Go говорят сами за себя, в отличие от проектов на других языках, таких как C++, где вы должны очень хорошо знать весь проект, чтобы понять код, который вы просматриваете в данный момент.
- Жесткость Go упрощает написание линтеров и тестов. Мне даже не нужно смотреть назначенный мне пулреквест, если они не прошли тесты и линтеры, которые я тщательно выбирал сам. Меньше чтения — больше продуктивности!
- Часто руководителям команд приходится давать отрицательный отзыв о пул-реквестах, на которые они назначены. И, часто, трудно объяснить требования. Но не в Го! Мантра «код должен быть идиоматичным» — это не просто мантра — это способ мышления, который должен использовать каждый программист Go, чтобы быть эффективным. Это делает отрицательную обратную связь невероятно четкой.
Вывод
Потребности каждой компании разные, и организации должны оценить, является ли Go жизнеспособным вариантом для их проектов. Тем не менее, нельзя отрицать, что простота, жесткость, невыразительность и идиоматичность Go являются преимуществами для тимлидов. Таким образом, я призываю вас рассмотреть Golang для вашего следующего проекта разработки.
Первоначально опубликовано на www.SphereInc.com 26 апреля 2018 г.