Skip to content

Instantly share code, notes, and snippets.

@YozhEzhi
Last active February 19, 2024 20:06
Show Gist options
  • Star 19 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save YozhEzhi/0fc16f50ee62569aa69fff86e4c59a49 to your computer and use it in GitHub Desktop.
Save YozhEzhi/0fc16f50ee62569aa69fff86e4c59a49 to your computer and use it in GitHub Desktop.
[Конспект] Дж.Ханк Рейнвотер - Как пасти котов. Наставление для программистов, руководящих другими программистами

Дж.Ханк Рейнвотер - Как пасти котов

Роль лидера

Лидер:

  • совершенствует свои навыки в области руководства проектами и прорабатывает все их детали;
  • учится быстро оценивать новые технологии, методики и варианты архитектуры для внедрения их в проект;
  • обучает себя и своих подчинённых;
  • пресекает низкое качество кодирования, пока оно не пустило в проекте корни;
  • расставляет приоритеты и борется с раздражителями (фокусируется на поставленных задачах);
  • настраивает сотрудников на продуктивную деятельность (не распространяет на коллег свои опасения о возможности неудач);
  • благоразумно относится к кадровому обеспечению и понимает, что именно от людей зависит конечный успех проекта.
  • стремится к успеху подчиненного ему коллектива;
  • оценивает свои успехи исключительно по тому, насколько эффективно работают его подчинённые.
  • интересутеся позицией товарищей по какому-то вопросу, но в то же время у него всегда имеется своё собственное четкое мнение – т.к. лидер совмещает анализ текущих задач с долгосрочным планированием.
  • имеет неизменно любознательный взгляд на жизнь и сильнейшее стремление к постоянному обучению;
  • имеет привычку проверять знания через опыт, настойчивость и готовность учиться на ошибках;
  • готов к восприятию неясностей, парадоксальных явлений и неопределенности;
  • уравновешивает науку и искусству, логику и воображение. Мышление «всем интеллектом»;
  • признает и понимает взаимосвязи между всеми вещами и явлениями. Системное мышление.

Принципы лидерства

Понимание -> Передача знаний -> Делегирование -> Проверка -> Участие

Понимание

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

Планируя новый проект:

  • прочтите требования дважды: один раз, чтобы понять широту замысла, второй – чтобы постичь его глубину;
  • сопоставьте требования с известными методиками реализации и выявите те части функциональности, для реализации которых потребуются новые разработки;
  • набросайте предварительный план макетирования проектов – он поможет выявить среди требуемых свойств неизвестные;
  • составьте на основе документации с требованиями контрольный список, который, в свою очередь, послужит исходной точкой для формулирования задач. Так вы сможете привязать каждое требование к набору задач и тем самым гарантировать реализацию свойства.

Передача знаний

Цель передачи знаний – обеспечить понимание персоналом предъявленных к продукту требований на том же уровне, на котором их понимает лидер. Итак, каким образом вам самому удалось понять проблему в комплексе? Восстановите последовательность действий, направленных на изучение требований, и перенесите ее на процесс обучения сотрудников.

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

Делегирование

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

Лидер действительно должен держать в голове как можно больше подробностей проекта, но также лидер должен уметь мыслить глобально.

К примеру, классическая ситуация – цикл разработки подходит к концу, как вдруг выясняется, что один из ваших сотрудников забыл выполнить данное ему задание. Если времени в обрез, а вокруг никого, кому это задание можно было бы перепоручить, вы, скорее всего, не удержитесь и возьметесь за него сами. Может быть это простительное исключение, но имейте в виду – действуя подобным образом, вы приучаете своих подчиненных к тому, что за невыполненную работу никаких взысканий не последует – вы просто сами все доделаете. Хорошо ли это? Думайте сами.

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

Проверка

Проверка результатов работы сотрудников должна стать повседневной; при приближении сроков сдачи такие проверки нужно проводить еще чаще.

С регулярностью в несколько дней тестируйте готовые модули кода. Регулярно пробуйте интегрировать компоненты в целостную систему и проверяйте архитектуру на стройность.

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

Заходите к своим программистам каждый день или звоните им и проверяйте, как идут дела. Когда они привыкнут ждать этих ежедневных встреч, произойдут две вещи: они никогда не будут знать, когда вы появитесь, и, таким образом, постараются быть в «постоянной готовности», а вы сможете оценить их ежедневный прогресс и соответствующим образом подстроить под него свой график работы.

Участие

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

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

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

Попробуйте при проверке результата выполненной разработчиком задачи:

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

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

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

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

Другой гранью участия является проявление здорового интереса к личной жизни подчиненных.

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

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

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

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

Дисциплина

Лишь за счет дисциплины и самоорганизации люди справляются с административными функциями.

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

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

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

Фокусироваться – значит расставлять приоритеты среди тех сведений, которые претендуют на значимость наравне со сведениями, действительно значимыми для завершения текущих проектов.

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

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

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

Разработка программных продуктов – это не спринт, а марафон; в этом контексте умение взять правильный темп есть необходимое условие стабильной работы всей команды. Чтобы выиграть марафон, нужно поддерживать взятый темп.

Помните, что если у вас не хватает времени даже на то, чтобы сделать все правильно, где же вы его найдете на то, чтобы все переделать?

Контролировать проблему трудно, но контролировать отношение к проблеме в ваших силах.

Самоконтроль

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

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

Вопросы для повышения самоконтроля:

  • Подвергаю ли я качество своего управления ежедневной оценке?
  • Действительно ли я с каждым днем руковожу все лучше или я постоянно откладываю совершенствование стиля и сути моего управления на потом?
  • Нравится ли мне то, что я делаю?
  • Теряю ли я попусту время при выполнении своих служебных обязанностей?
  • Оцениваю ли я свою производительность тем, сколько сделали мои подчиненные под моим руководством, или у меня есть ощущение, что сам я не сделал ничего?
  • Как мои слабости дали себя знать сегодня (по отношению ко мне самому или другим)?
  • Чему я научился сегодня, чтобы оставаться в курсе, чтобы быть осведомленным, чтобы углубить и расширить свои знания?

Вы не достигнете совершенства никогда, но вы можете сделать максимально эффективными свои усилия, направленные на самосовершенствование, делая все, что нужно, ежедневно.

Смысл «концентрации» – умение не отвлекаться на внешние раздражители помогает уделять максимум внимания решению самых важных задач.

Надеяться на то, что за ваши достоинства вас будут превозносить до небес, не стоит – но, по крайней мере, они (достоинства) возымеют действие на сотрудников компании. Ваши недостатки, наоборот, не пройдут незамеченными – о них будут говорить, в том числе и вам самим; да, так устроен мир, ничего не поделаешь.

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

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

Люди, лежащие на смертном одре, редко сожалеют о том, что проводили в офисе слишком мало времени.

Подходы к коллегам

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

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

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

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

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

Вас, начальника, подчинённые воспринимают как зрителя, сидящего в переднем ряду, и, конечно же, ожидают аплодисментов. Причём ожидают все – даже те, над которыми впору начинать читать молитву.

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

Не стесняйтесь использовать в своих целях дух соревновательности. С точки зрения минималиста все, что написал не он, – полная туфта. На самом деле вполне возможно, что он боится, будто не сможет разобраться в существующем коде, и просто не хочет в этом признаться.

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

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

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

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

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

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

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

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

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

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

Характеристики сотрудника

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

Увольнение

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

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

Совещания

Совещания без активной позиции лидера (ведущего совещания) проходят впустую.

При проведении совещаний опасайтесь безоговорочно полагаться на принцип «молчание – знак согласия». Иначе говоря, если на принятое вами решение или донесенную вами информацию не поступает никаких комментариев, считается, что слушатели согласны с вашей позицией. Можно, например, спрашивать людей поименно "Что думаешь по этому поводу?"

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

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

  • Не превращайте совещание в партсобрание. Участие в совещаниях – это тоже работа, и цель состоит в том, чтобы приступить к новой рабочей неделе осмысленно.
  • При проведении проектных совещаний обязательно подготавливайте четкий план действий. Проводя совещания с нетехническими специалистами, помните, что вы олицетворяете образ технаря. Пытайтесь доносить сложные идеи простым языком. На таких совещаниях ведите себя как педагог. В то же время исполняйте эту роль предусмотрительно, избегайте высокомерия.
  • Проводя ретроспективные совещания по проекту, не поддавайтесь соблазну свалить все грехи на другие отделы. Попытайтесь выяснить, в каких областях вы сами и ваши сотрудники могли бы добиться более высокой продуктивности.
  • Старайтесь свести количество совещаний к минимуму. Замените частоту совещаний на насыщенность.

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

Единодушная поддержка сотрудниками высказанных вами идей (если только они не объективно гениальны) наводит на грустные размышления.

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

Совещания либо осложняют существующую в группе разработчиков ситуацию, либо разрешают кризис.

Консенсус достигается за счет синтеза идей. Торг по принципу «я соглашусь на твою характеристику, если ты согласишься на мою», здесь неуместен. Что я понимаю под синтезом? Это процесс, в ходе которого путем проработки конкурирующих идей выкристаллизовываются их наилучшие качества.

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

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

Решения на совещаниях нужно фиксировать. Представляете, как будет обидно, если, проведя плодотворное совещание на прошлой неделе, вы забудете о принятых на нем решениях уже через несколько дней!

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

Вышестоящий руководитель

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

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

Если вы пару раз сорвете сроки, никто не удивится. Это исправимые вещи. Значительно труднее справиться с привычкой давать невыполнимые обещания. Начальница оценит выше честное «не знаю», чем убедительное, на первый взгляд, мнение, которое высказывается по незнанию проблемы.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment