Шрифт:
— Проще не бывает.
— Что?
— Я говорю, это совсем не сложно.
— Ну, я в этом не уверен…
— Да, я буду работать со всеми восемнадцатью командами, но учить их буду одному и тому же.
— Вы уже даже знаете, чему?
— Конечно!
— Но каким образом?!
— Смотрите, вы же сами мне только что сказали, что перед всеми проектными группами поставлены невозможные или почти невозможные сроки.
— Именно так.
— А это значит, что мы должны экономить время. Однако невозможно экономить время, пытаясь делать все больше и больше. Правда, многие этого не понимают.
— Что-что?
— Все это улучшение процесса, которое так заботит нашего замечательного Просперо и всех остальных сотрудников института, по сути означает прибавление к существующему процессу чего-то нового, дополнительного. Они смотрят на неидеальный процесс и думают: «А вот если добавить в него вот такие навыки и методики, результаты станут существенно лучше». Именно так понимают улучшение процесса на первом, втором, третьем и четвертом этажах. Разумеется, они стараются вносить в процесс только полезные изменения, не спорю. Однако у меня, на пятом этаже, под улучшением процесса понимается нечто совсем иное. Я считаю, что вместо того, чтобы добавлять что-то в процесс, из него надо что-то изымать.
— Интересно!
— Давайте возьмем для примера один из ваших проектов, Вебстер. Ну, например, команду Б, которая разрабатывает Quirk. Предположим, есть некоторая проблема, которую надо решить. Что-то мы упустили. Идет? Так вот, сейчас они этим не занимаются. Совсем, — для большего эффекта Кенорос сделал паузу. — Так чем же они вместо этого занимаются?
— Не знаю. Делают что-нибудь другое.
— Но не бездельничают?
— Нет, конечно.
— Значит, надо пойти посмотреть, что же они делают, а потом придумать, как сэкономить на этом время.
— Ммм, не знаю даже…
— Представьте себе, что каждый день вы приходите и смотрите, чем занимаются ваши разработчики… скажем, по минуте в день — в три часа дня. Потом вы категоризируете свои наблюдения и делаете вывод — чем же занимаются разработчики больше всего?
— Отладкой программ, я думаю. Похоже, это самая трудоемкая часть работы.
— Вот это и есть наша задача. Надо придумать, как сэкономить время на отладке программ.
— Вы научите их, как эффективнее отлаживать программы?
— Нет, — покачал головой Кенорос, — мы будем учиться эффективно проектировать.
То, что предложил Кенорос, до смерти напугало мистера Томпкинса. Аристотель называл свою технику «Код — в последнюю очередь», и состояла она в том, что сам процесс написания программного кода откладывался на самый конец проекта. Минимум сорок, а то и все шестьдесят процентов времени должно было уходить на низкоуровневое проектирование — неимоверно тщательное и детализированное. В этом случае, как утверждал Кенорос, необходимость в отладке программы настолько уменьшится, что команда сможет существенно сэкономить на этом время.
В таком случае, если проект был рассчитан на год, то на кодирование отводились лишь последние два месяца перед выпуском. При этом тестирование, соответственно, тоже откладывалось на долгое время. А это значило, что на момент тестирования каждое испытание должно было проходить успешно. На исправление ошибок и отладку просто не оставалось времени.
— Как же можно вот так взять и отменить отладку программы? — уже в который раз поражался мистер Томпкинс.
— Количество времени, которое нужно нам для отладки и исправлений, прямо пропорционально количеству ошибок, — ответил Кенорос голосом учителя, объясняющего материал недалекому ученику.
— Да, но тогда получается, что в нашей программе вообще не должно быть…
— Не должно быть ошибок. Правильно. Вы схватываете просто на лету.
— Совсем без ошибок?!
— Конечно. Вы же сами только что это сказали.
— Но как мы можем написать код без единой ошибки?
— Ну, смотрите. Вот только что вы обнаружили ошибку в одном из модулей. Где находится эта ошибка?
— В модуле.
— Нет. Она находится на границе. На самой границе модуля. Конечно, бывают и локальные ошибки, в середине модуля, но их легче всего выловить и исправить. Самые коварные ошибки, настоящие, те, которые отнимают у разработчиков массу времени и сил, относятся к интерфейсу между модулем и всей остальной программой.
— Правильно, это каждому известно. И что же?
— А то, что когда вы находите ошибку, то смотрите совершенно не туда, куда нужно.
— И куда же я смотрю? — осведомился мистер Томпкинс, поневоле раздражаясь.
— Вы смотрите внутрь модуля, в программный код.
— А куда я, по-вашему, должен смотреть?
— В проектную документацию. Там изложена вся необходимая информация об интерфейсах и взаимодействии различных модулей программы.
— Но мы и так всегда пытаемся искать ошибки, когда просматриваем проектную документацию. Однако и после этого требуется неимоверное количество времени, чтобы устранить те неполадки, которые мы не заметили в первый раз.