И, наконец, убираем все свойства коммуникации - визуальные, слуховые, голосовые, синхронизацию общения, возможность задавать вопросы - что же мы получаем? Правильно, бумажную документацию. На приведенной выше модели вы видите, что документация является наименее эффективным способом коммуникации из всех возможных. Тот, кто пишет документацию, должен строить догадки относительно своей аудитории безо всякой обратной связи, у него нет возможности использовать ни синхронизацию и другие эмфатические сигналы, ни жестикуляцию и интонацию. Но если построенная нами модель справедлива, то с ее помощью можно понять, как улучшить условия работы. И это вполне реально. Более того, существует множество сложных проектов, которые весьма успешно применяют высказанные нами здесь идеи на практике.
"Посадите всех разработчиков в одной комнате". "Мне не нужно больше четырех человек, иначе мы не поместимся в одну комнату и не сможем общаться". Вот стандартные рекомендации, которые дают руководители успешных проектов. Такие руководители планируют работу, базируясь на самом эффективном виде коммуникации - непосредственном общении между людьми.
"Убедитесь, что во всем здании хватает досок для рисования и уголков, где можно попить кофе". Такие компании, как Hewlett-Packard и IBM давно поняли всю эффективность неформального общения, и сейчас в нашей индустрии стало обычным положение, что наиболее эффективное окружение для проектирования разработки ПО можно создать специально поощряя и разрешая собрания небольших групп разработчиков. Вайнберг зафиксировал особые случаи, когда неформальные беседы разработчиков оказывали значительный эффект на общую результативность работы всей группы [Wei]. Нередко удачные решения приходят, когда люди "просто беседуют".
Сейчас существует три сравнительно новых методологии, где одно из основных положений - размещение всех разработчиков в одной комнате или просто в непосредственной близости друг от друга. Это Adaptive Software Engineering [Hi], Extreme Programming [B99], [EP], и Crystal(Clear) [Co00]).
Модель коммуникации, которую мы рассмотрели выше, позволяет, кроме всего прочего, давать рекомендации по архивированию документации:
Пусть человек, занимавшийся проектированием, коротко (5-20 минут) расскажет нескольким коллегам, не знакомым с его разработками, о том, что он сделал. Эти люди выступят в роли тех зрителей, которые будут смотреть будущую запись на видеокассете. Пусть они просто обсуждают предложенный вариант проектирования и задают вопросы по мере необходимости. Обсуждение записывайте на видео. В конце воспроизведите те рисунки и примеры, вокруг которых велась дискуссия, или же приложите к видеозаписи те рисунки, которые использовались при проектировании. Они будут служить мнемонической связкой между самим обсуждением и его предметом.
Я очень обрадовался, когда Лизетт Веласкес (Lizette Velasquez) из "Lucent Technologies" рассказала мне, что она не только с успехом использует эту технику в работе, но что я забыл упомянуть еще один немаловажный момент: очень важно особо отмечать те места обсуждения, когда "происходило нечто интересное". Обычно обсуждение протекает довольно спокойно, но случаются моменты, когда какой-то вопрос вызывает целый поток дополнительных вопросов и комментариев. В таком случае, зрители наверняка захотят вернуться и просмотреть это место еще раз.
Теперь еще можно размещать подобные обсуждения в сети и снабжать их гиперссылками.
А тем, кто до сих пор предпочитает книги всем прочим средствам передачи информации, предложу сделать следующее: возьмите, к примеру, замечательную, но очень трудную книгу Design Patterns. Теперь представьте, что вместо того, чтобы разбирать значение паттерна "Decorator" с книжной страницы, у вас есть возможность щелкнуть мышкой и увидеть видеоклип, в котором авторы сами объясняют этот паттерн. Конечно же, в этом случае для передачи своих идей они будут использовать интонацию, жестикуляцию и синхронизацию общения.
Какой же вывод нужно сделать относительно этого свойства человеческой природы? Мы должны стараться поднять коммуникацию в команде разработчиков на максимально высокую точку нашей кривой - настолько, насколько это позволяют обстоятельства.
Люди непостоянны
Когда речь идет о людях, говорить о режимах сбоя нужно осторожно. У англичан есть старинная пословица: "Если ты дашь собаке плохое имя, то лучше ее сразу пристрелить". В самом деле, как вы увидите из приведенных ниже примеров, простые изменения в стиле управления и местной культуре могут привести к огромным изменениям видимого поведения людей. И все же, весь мой опыт говорит о том, что ожидать от людей последовательности и постоянства действий практически невозможно. Как пишет Джим Хайсмит (Jim Highsmith) [Hi]:
"…в этой коробочке не винтики и шестеренки, а люди. Люди могут делать постоянно, раз за разом, похожие вещи, но они никогда не смогут сделать одно и то же. В пошаговой методологии мы ожидаем, что, задавая одинаковые данные на входе, мы будем получать одинаковые результаты на выходе. Однако реакция человека на вводную информацию может зависеть от различных условий, причем большая часть этих условий может не иметь никакого отношения к выполняемой этим человеком задаче".
Людям нравится отсутствие точных предписаний относительно их собственного поведения. Одна из двух самых трудных для человека задач, которые я могу себе представить - это заставить человека делать что-то очень аккуратно и единообразно день за днем (другой самой трудной задачей будет попросить его изменить свои привычки). Ниже я привожу выдержку из недавно услышанного диалога, которая как нельзя лучше иллюстрирует эту мысль.
"Как же мне справиться со всеми этими бумагами, которые приходят в мой офис?" - спрашивает один. Другой отвечает: "Ну, это совсем не сложно! Просто следи, чтобы твой стол всегда был пустым - четыре корзины по углам, несколько папок в верхнем ящике…". Он не смог закончить. "Чтобы стол был пустым?!" - закричали все. "Но ведь это невозможно!"
Обратите внимание, что советчик предложил им одновременно изменить свои привычки, а также совершать определенное действие постоянно и единообразно.
Если бы люди обладали последовательностью и постоянством, они могли бы убирать бумаги с рабочего стола, предотвращать кариес, избавляться от лишнего веса, бросать курить, и может быть, даже разрабатывать программное обеспечение, укладываясь в рабочий график.
Как саркастически заметил Карл Вигерт (Karl Wiegert): "We are not short on practices , we are short on practice " ("нам не хватает практики, а не правил"). И таких правил, действительно, немало. Дэвид Гриз (David Gries) в своей книге "The Science of Programming" ("Наука программирования") дает подробные инструкции по тому, как нужно создавать правильные программы [Gr]. Хорошее средство проектирования представляют собой CRC-карточки [B87]. В методологии под названием "Extreme Programming" [EP], известной своим парным программированием и автоматическим тестированием [Je], тоже используются хорошо известные эффективные методики. Подробно описаны все составляющие методологии "Cleanroom" [Mi]. Уотс Хамфри (Watts Humphrey) дает подробные инструкции программистам, которые хотят работать более эффективно с помощью "Personal Software Process" (PSP) [Hu]. Последовательное и постоянное применение любой из этих методологий замечательно улучшило бы любой проект из тех, которые я видел.
Проблема в одном - в словах "постоянный" и "последовательный". Если PSP и Extreme Programming применять лишь время от времени, то они теряют свой смысл. Написанный наполовину код не может быть безошибочным. Точно так же, как и в случае с лишними бумагами на столе, методологию нужно применять полностью, последовательно, изо дня в день.