Книга Фредерика Брукса «Мифический человеко-месяц»

brooks

Не многие книги, так или иначе связанные с программированием, вспоминают через десяток лет. А уж таке книги, чтобы их переиздавали спустя почти 40 лет, это вообще уникальные. Этот пост как раз и посвящен одной такой книге, первое издание которой вышло аж в 1975 году, но на нее до сих пор ссылаются на форумах и статьях. Это книга Фредерика Брукса «Мифический человеко-месяц».

Автор книги в 60-ых годах прошлого века работал в компании IBM и участвовал в качестве менеджера в создании операционной системы OS/360 для компьютеров System/360 (это те самые компьютеры, которые были клонированы в СССР под названием ЕС ЭВМ). В этой книге автор описывает проблемы и возможные пути решения, возникающие при создании больших программных систем. В первую очередь книга описывает взгляд на разработку с точки зрения менеджера, работающего с группой программистов. Основной посыл книги — это проблема срывов сроков при создании софта, над которым трудится некоторое количество человек, больше одного-двух.

Брукс сравнивает разработку больших систем со смоляной ямой, в которую попадали доисторические животные. Сначала вроде бы кажется, что они завязли совсем немного — лишь по щиколодку (ну выбились из графика не день-другой), но чем больше они трепыхаются, тем сильнее их затягивает смола, и тем дольше затягивается проект.

Нужно приходить в возбуждение при отставании на один день, ибо они являются составляющими катастрофы.

В качестве главной причины провалов проектов он считает нехватку времени, а грубейшей ошибкой менеджеров — это попытку вытянуть проект в срок добавлением новых программистов в команду. Собственно, отсюда и название книги, что неправильно оценивать коллективную разработку программного или хардварного обеспечения в человеко-месяцах. Он доказывает, что добавление человека в команду не ускоряет, а только замедляет работу, ведь новичку нужно не только разобраться в новом для него проекте (на это уходит несколько недель), но и придется заново перераспределять задачи. Более того, если программисты активно взаимодействуют между собой, то больше времени начинает тратиться на взаимодействие между ними, чем на независимую работу. Брукс об этом не пишет, но по сути это напоминает закон Амдала для расчета выигрыша от использования многоядерности процессора (процессоров) при параллельных вычислениях, когда при большом числе потоков выиграть от распараллеливания теряется на фоне тормозов на обмен данными. Таким образом возникает противоречие, что наиболее эффективно работает маленькая команда из нескольких человек, но в то же время большой проект эта команда будет писать слишком долго:

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

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

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

Брукс рассматривает взгляд на организацию команды, предложенную Харланом Миллзом,сравнивая ее с операционной бригадой, в которой нет демократии, за систему в целом и ее архитектуру отвечает «хирург», авторитет которого непоколебим, остальные члены команды выполняют каждый свою роль (не буду их перечислять). Также должны быть ограничены ресурсы, выделяемые разрабатываемой программе (в первую очередь в виде оперативной памяти). Автор считает, что такое ограничение на «полет мыслей» только идет на пользу конечному продукту, поскольку заставляет разработчиков искать более эффективные способы решения задач, а у программы появляется «концептуальная целостность».

На практике коэффициент стоимость / эффективность созданного продукта больше зависит от исполнителя, а простота его использования — от архитектора.

В книге автор дает множество советов по организации работы программистов и менеджеров, в том числе и по написанию документации, что очень не любят делать разработчики (ох, не любят…)

В самом начале я сказал, что книга «Мифический человеко-месяц» вышла в 1975 году, но в 2013 году на русском языке было издано юбилейное издание 1995 года (хотя эта книга у нас издавалась и до этого), в которую вошел не только исходный текст книги без каких-либо исправлений, но и некоторые дополнительные главы. Самый интересный «бонус» — это статья Брукса (не менее известная, чем сама книга) «Серебряной пули нет» 1986 года, в которой автор утверждает, что программирование — вещь сложная, но в ближайшее десятилетие не появится технология, которая сама по себе сможет повысить эффективность разработки программ хотя бы на порядок, в то время как продуктивность создания аппаратного обеспечения уже выросло на несколько порядков, пройдя стадии от ламп до микропроцессоров.

В свое время эта статья вызвала еще большее обсуждение и критику, чем «Мифический человеко-месяц» (в тексте книги автор удивляется, что «человеко-месяц» широко обсуждался, но практически не критиковался), и даже на русскоязычных форумах давно уже фраза «серебряная пуля» ходит как мем. В этой статье Брукс последовательно рассматривает различные технологии, на которые когда-то возлагались большие надежды и высказывает свой скептицизм по поводу того, что одна эта технология сможет повысить производительность на порядок. В качестве таких технологий рассматриваются: язык Ada, объектно-ориентированное программирование (автор сам является сторонником этого подхода), искусственный интеллект, экспертные системы, «автоматическое» и графическое программирование, верификация программ и среды программирования, появление мощных рабочих станций. Автор не утверждает, что все это не нужно (наоборот он считает, что удобные инструменты обязательны и даже считает, что инструментарием должен заниматься отдельный человек в команде), но считает, что эти технологии только устраняют второстепенные проблемы и рутину, возникающих при создании сложных систем, но главная сложность при создании систем остается в самой сути программирования.

Еще несколько дополнительных глав второго издания посвящено критике и пересмотру отдельных моментов «Мифического человека-месяца» и «Серебряной пули». Как ни странно, но лишь немногие пункты книги 75-го года устарели и автор пересмотрел свою точку зрения.

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

В общем, книга must read.

PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Пожалуйста, оцените запись

УжасноПлохоТак себеХорошоОтлично (Количество голосов: 4, средняя оценка: 5,00)
Загрузка...

Leave a comment

Subscribe without commenting