Автор: Даниэль Подольский, старший инженер 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 г.