“Мифический человеко-месяц”: двадцать пять лет спустя
Брукс Фредерик. Мифический человеко-месяц, или Как создаются программные комплексы. Пер. с англ. СПб., Символ-Плюс, 1999. - 304 с.
Пожалуй, одна из проблем развития мировой компьютерной индустрии заключается в “распаде связи времен”, когда новое поколение специалистов не может в полной мере использовать ранее накопленный опыт. Объясняется это невиданными в истории человечества темпами смены технологий и лавинообразным ростом численности персонала, занятого в отрасли. В нашей стране этот процесс носит еще более ярко выраженный характер из-за резких преобразований на рубеже 90-х годов, когда в силу обстоятельств на смену специалистам советских времен практически внезапно пришло новое поколение компьютерных профессионалов.
По-видимому, именно поэтому в среде российских разработчиков ПО бытует иллюзия, будто современная компьютерная история началась с десяток лет назад (в том плане, что накопленный только за этот период опыт имеет значение для сегодняшней практической работы.) Самым негативным образом такое представление проявляется, например, когда приходит понимание, что реализация сложных проектов не решается чисто технологическими приемами, а требует соответствующего теоретико-методологического осмысления.
Вот тут-то и полезно вспомнить, что такие исследования ведутся уже давно и их фундамент был заложен еще лет тридцать назад, когда мировая компьютерная индустрия вышла на уровень действительно крупных работ *. Самое любопытное, что в тех “старинных” публикациях сегодня можно найти не только важные методологические положения, но также и актуальные с сегодняшней точки зрения чисто практические рекомендации, “как создавать программные комплексы правильным образом”.
_____
* Наряду с книгой Ф. Брукса хотелось бы обязательно упомянуть о других классических изданиях 70-х годов, в которых обсуждалась методология разработки программ. В частности, это “Структурное программирование” (авторы У. Дал, Э. Дейкстр, К. Хоор) и “Структурное проектирование и конструирование программ” (Э. Йодан), которые также были опубликованы на русском языке.
В связи с этим появление второго русского издания знаменитой книги “Мифический человеко-месяц” Фредерика Брукса представляется очень своевременным и безусловно полезным.
Немного истории: как появилась книга
Сейчас уже как-то подзабылось, что одним из крупнейших программных проектов за всю компьютерную историю и до сегодняшних дней является создание операционной системы IBM OS/360, первый вариант которой разрабатывался в 1963 - 1966 гг. В нем участвовали сотни программистов, а общая трудоемкость составила 5000 человеко-лет. Среди руководителей этого проекта был Фредерик Брукс: в 1985 г. вместе с Бобом Эвансом и Эриком Блохом он был награжден Национальной медалью США в области технологии за работу над OS/360.
В середине 60-х Ф. Брукс занялся преподавательской и консультационной деятельностью и в 1975 г. опубликовал книгу под названием “Мифический человеко-месяц”, признанную своеобразной библией для разработчиков ПО всего мира. Практически одновременно в нашей стране появился русский перевод книги, давно уже ставшей библиографической редкостью. Сегодняшняя книга, выпущенная издательством “Символ-Плюс”, является оригинальным переводом юбилейного, двадцатого (!), издания, вышедшего в 1995 г., - к тому моменту общий тираж американского варианта превысил 250 тыс. экземпляров.
Воспоминания минувших дней
Первый русский перевод книги Ф. Брукса (под редакцией и с предисловием самого А. П. Ершова!) был официально опубликован в 1979 г. издательством “Мир”. Однако на самом деле он появился тремя годами раньше в виде ротапринтной копии ДСП (для служебного пользования), которая довольно быстро распространилась среди программистов. По-видимому, в тот момент были какие-то проблемы с приобретением авторских прав на официальное издание книги, однако те, кто еще помнит “старые” времена, могут подтвердить, что публикация ротапринта тогда была связана с еще бо/льшими проблемами.
Сейчас трудно передать, какое сильное впечатление произвела лично на меня книга Брукса. Во-первых, в ту пору просто не существовало никакой методологии разработки программных систем (по крайней мере, опубликованных). Во-вторых, никто из нас даже не мог представить, что профессиональное обсуждение серьезных вопросов может быть таким же захватывающим, как рассказ о приключениях Монте-Кристо.
В вузах нас учили, как решать математические задачи, составлять алгоритмы и писать программы. Но как делать законченные программные продукты, планировать работы, управлять группами разработчиков? Искать ответы на подобные вопросы приходилось тогда самостоятельно, в основном методом проб и ошибок.
В последнем издании книги Брукс приводит резюме одного из читателей: “Тут нет ничего, чего я не знал бы раньше!”. Действительно, к некоторым из его выводов мы уже сами пришли в ходе практической работы*. Но одно дело “твое личное мнение” (подвергавшееся многочисленным сомнениям) и совсем другое - подтверждение своих идей, полученное в четко сформулированном и аргументированном виде в трудах признанного авторитета. Не говоря уже о том, что многие положения этих идей были совершенными откровениями для нас.
_____
*Могу полностью под этим подписаться. Прочитав в 1976 г. ксерокопию этой книги, я нашел названия тем понятиям, которыми пользовался в работе. Эдуард Пройдаков
Эссе на тему программной инженерии
Фактически книга Ф. Брукса представляет собой сборник очерков, в которых последовательно обсуждаются узловые проблемы разработки крупных программных проектов (а их актуальность в течение последних 30 лет только возрастает): повышение производительности труда программистов, организация коллективной работы, планирование и выполнение графика реализации.
При этом рассматриваются самые различные аспекты данной темы: эстетические основы программирования, организация работы на разных уровнях, сущность руководства, распределение функций в группе разработчиков, методы отладки, способы документирования и т. п.
Одним из отправных тезисов книги является утверждение, что реализация крупного программного проекта радикальным образом отличается, с одной стороны, от создания относительно небольших программных систем, а с другой - от выполнения больших “традиционных” работ в материальной сфере. Но самое главное, автор не ограничивается простой констатацией этого факта, а аргументированно обосновывает его и дает практические рекомендации, помогающие эти особенности учесть *.
_____
* Почему “человеко-месяц” является мифическим? Подробный ответ на этот вопрос вы найдете в книге. Вкратце же он формулируется в виде закона Брукса: “Если программистский проект не укладывается в сроки, то добавление рабочей силы только задержит его окончание”. Трудоемкость проектов, как известно, оценивается в “человеко-месяцах”. “Мифических”.
Следует напомнить, что в 70-х годах обсуждение темы разработки ПО шло в основном в русле дискуссии: “Программирование - это наука или искусство?”. Брукс одним из первых дал правильный ответ на этот вопрос: это весьма специфическая, высокоинтеллектуальная, но все же - технология.
Сегодня такой тезис кажется очевидным, но на самом деле до его практического воплощения еще очень далеко. Например, если посмотреть на подготовку современных ИТ-специалистов, то легко можно увидеть, что сейчас (как и 25 лет назад) наша отечественная высшая школа нацелена на выпуск ученых-исследователей, но никак не технологов. А в результате этого отличная индивидуальная подготовка (как многие считают) почему-то не хочет выливаться в успешную реализацию проектов на практике.
Особый интерес к юбилейному изданию книги объясняется тем, что она дополнена еще несколькими главами. В частности, в нее включен острый полемический очерк “Серебряной пули нет” (1986 г.), детально обосновывающий тезис, что “в течение десятилетия ни одна разработка в области техники программного обеспечения не позволит повысить производительность труда в программировании на порядок”. Конечно, тут есть о чем поспорить, но в любом случае полезно задуматься над вопросом, а в чем же измеряется эта самая производительность труда программиста. Ведь сегодня в целом уже понятно, что конечный результат довольно слабо коррелирует с числом написанных строк и уж тем более с объемом необходимой оперативной памяти.
И конечно, читателям будет очень интересно изучить заключительные главы, написанные в 1995 г., в которых они смогут познакомиться со взглядами Брукса на все ключевые тезисы оригинального издания спустя целое поколение разработчиков и несколько поколений компьютерных технологий.
Читать или не читать
В заключение хотелось бы отметить один довольно тревожный момент. Книги таких авторитетов, как Брукс, Дейкстр, Йодан и др., издавались в 70-х годах тиражами в 20 - 30 тыс. экземпляров и на прилавках не залеживались. Тираж же нынешнего издания “Мифического человеко-месяца” равен всего двум тысячам. И это практически при совершенном отсутствии публикаций подобного концептуального уровня (как в печатном, так и в электронном виде).
Самое странное, что падение спроса на техническую литературу многие современные ИТ-специалисты объясняют не наличием альтернативных источников информации, а нехваткой времени. Все это напоминает известный анекдот: “Что там думать, товарищ майор? Трясти надо!”.
Так может быть, прежде чем приступать к новому программному проекту, все-таки имеет смысл почитать Фредерика Брукса?