Людям нравится отсутствие точных предписаний относительно их собственного поведения. Одна из двух самых трудных для человека задач, которые я могу себе представить - это заставить человека делать что-то очень аккуратно и единообразно день за днем (другой самой трудной задачей будет попросить его изменить свои привычки). Ниже я привожу выдержку из недавно услышанного диалога, которая как нельзя лучше иллюстрирует эту мысль.
"Как же мне справиться со всеми этими бумагами, которые приходят в мой офис?" - спрашивает один. Другой отвечает: "Ну, это совсем не сложно! Просто следи, чтобы твой стол всегда был пустым - четыре корзины по углам, несколько папок в верхнем ящике…". Он не смог закончить. "Чтобы стол был пустым?!" - закричали все. "Но ведь это невозможно!"
Обратите внимание, что советчик предложил им одновременно изменить свои привычки, а также совершать определенное действие постоянно и единообразно.
Если бы люди обладали последовательностью и постоянством, они могли бы убирать бумаги с рабочего стола, предотвращать кариес, избавляться от лишнего веса, бросать курить, и может быть, даже разрабатывать программное обеспечение, укладываясь в рабочий график.
Как саркастически заметил Карл Вигерт (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 применять лишь время от времени, то они теряют свой смысл. Написанный наполовину код не может быть безошибочным. Точно так же, как и в случае с лишними бумагами на столе, методологию нужно применять полностью, последовательно, изо дня в день.
Непоследовательность - обычная причина режима сбоя у человека. Существуют методологии, которые требуют от своих адептов строгой последовательности действий. Такие методологии я называю "высоко дисциплинированными". Как показывают опросы, проводимые в различных проектах, именно такие методологии наиболее уязвимы, однако в некоторых проектах они используются довольно успешно. Вот пример применения методологии PSP в организации с пятым уровнем CMM. Мне он кажется весьма поучительным: [Web]:
Летом 1996 года небольшую группу программистов ознакомили с методологией PSP. Несмотря на то, что все были настроены относительно обучения весьма положительно, сразу после его окончания новая методология стала использоваться все меньше и меньше. Вскоре никто из тех, кто специально обучился этой методологии, не использовал ее в работе. Когда этих людей спросили, почему они не используют PSP, ответ был практически один и тот же: "PSP - очень строгая методология, поэтому если никто не требует от меня отчета, мне проще работать по-старому".