Читать книгу Идеальная IT-компания. Как из гиков собрать команду программистов - Брайан Фитцпатрик - Страница 11

Глава 1. Миф о гениальном программисте
Скрываться вредно

Оглавление

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

Откуда вы знаете, правильным ли путем идете?

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

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


Работа в изоляции приводит к разочарованию


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

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

Автобус-фактор (сущ.): число участников проекта, которые должны быть сбиты автобусом, чтобы проект потерпел окончательный крах.

Каков автобус-фактор вашей команды?


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

Помимо автобус-фактора, существует также проблема общей скорости продвижения проекта. Легко забыть о том, что работа в одиночку часто бывает трудной и идет значительно медленнее, чем требуется. Сколько нового вы узнаете, работая изолированно? Как быстро вы продвигаетесь? Всемирная паутина наполнена информацией, однако она не заменяет реального человеческого опыта. Работа с другими людьми напрямую увеличивает коллективный опыт, стоящий за усилиями. Когда вы «зависаете» над бессмысленной задачей, сколько времени вы тратите на то, чтобы выбраться на правильный путь? Подумайте, как изменился бы процесс работы, если бы рядом находилась пара коллег, которые могли заглянуть через ваше плечо и без промедления указать на ошибки и способы их исправления. Именно поэтому в компаниях, разрабатывающих ПО, участники команд сидят вместе или занимаются парным программированием: вторая «пара глаз» часто оказывается необходимой.

Вот еще одна аналогия: задумайтесь о том, как вы работаете с компилятором. Создавая большую программу, нажимаете ли вы кнопку «компилировать» в первый раз через несколько дней или недель написания кода, когда уверены в том, что все готово и идеально? Разумеется, нет. Представьте, какая неудача ожидает вас при попытке скомпилировать 50 тысяч строк кода с нуля! Как программисты, мы лучше всего работаем в коротких циклах обратной связи: пишем новую функцию и компилируем, добавляем тест и компилируем, реорганизуем код и компилируем. Сгенерировав код, мы исправляем ошибки и опечатки как можно раньше. Компилятор подстраховывает нас на каждом маленьком шаге; некоторые среды разработки способны выполнять компиляцию в то время, когда мы набираем код. Таким способом мы поддерживаем высокое качество кода и гарантируем корректную и поступательную разработку нашего ПО.

Такая же обратная связь требуется не только на уровне кода, но и на уровне проекта в целом. Амбициозные проекты развиваются быстро и должны «на марше» адаптироваться к изменениям внешней среды. По ходу развития проекта могут возникать непредсказуемые препятствия при моделировании, политические проблемы и просто ситуации, когда все работает не так, как планировалось. Иногда неожиданно изменяются требования. Как обеспечить обратную связь, которая в нужный момент подскажет, что планы или модели нуждаются в корректировке? Ответ: работая в команде. В связи с этим часто цитируют высказывание Эрика Рэймонда «много глаз видят все ошибки», однако, возможно, лучшая интерпретация звучала бы так: «много глаз обеспечивают проекту адекватность и правильное направление». Люди, работающие в «пещерах», внезапно обнаруживают, что их исходное миропонимание, возможно, и является полным, но сам мир изменился и их продукт перестал быть актуальным.

Инженер и офис

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

Мы полагаем, что большинству инженеров не только необязательно, а опасно работать в отдельной комнате.[2] Сегодня ПО разрабатывается коллективами, а не отдельными людьми, и постоянная оперативная связь разработчика с коллегами важнее, чем непрерывное подключение к Интернету. Можно работать хоть 24 часа в сутки, но двигаясь в неверном направлении, вы просто теряете время. Зайдите в офис любой быстроразвивающейся высокотехнологичной компании, созданной в XXI веке, и вы увидите, что инженеры сидят группами в кабинках или за общими столами; случаи, когда инженеры изолированы друг от друга в отдельных кабинетах, встречаются редко.

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

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

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

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

К сожалению, проблема хранения идей «под подкладкой» характерна не только для разработки ПО: она распространена во всех сферах деятельности. Например, считается, что профессиональная наука предполагает свободный и открытый обмен информацией, однако отчаянное следование принципу «Публикуй или погибнешь!» и борьба за гранты приводят к совершенно противоположному эффекту. Великие мыслители не делятся идеями. Они цепляются за них, держат исследования в секрете, скрывают ошибки, совершаемые в пути, и в конечном счете выдают публикацию, в которой весь процесс представляется легким и очевидным. Результаты часто оказываются плачевными: непреднамеренное повторение чужой работы, незамеченная ошибка на ранней стадии проекта или создание того, что представляло интерес в прошлом, но утратило свою актуальность. Количество потерянного времени катастрофически велико.

Не вносите свой вклад в эту печальную статистику.

2

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

Идеальная IT-компания. Как из гиков собрать команду программистов

Подняться наверх