пятница, 4 декабря 2009 г.

Мифический человеко-месяц. Часть 1

Книга Фредерика Брукса “Мифический человеко-месяц” произвела на меня неизгладимое впечатление (более подробно можно почитать на моем блоге или на сайте rsdn.ru). Просто удивительно, насколько книга, написанная уже почти 35 лет назад может быть столь актуальной сегодня, особенно учитывая темпы, с какими развиваются компьютерная индустрия.

Многие цитаты из этой книги давно уже стали классическими, практически каждый, занятый в области разработки ПО слышали о “законе Брукса” и “серебряной пуле”, но помимо этих известных высказываний в книге содержится много других интересных мыслей.

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

Почему заниматься программированием интересно? Какими радостями вознаграждаются те, кто им занимается?
Это радость, получаемая при создании чего-либо своими руками. Как ребенок радуется, делая куличики из песка, так и взрослый получает удовольствие, создавая какие-либо вещи, особенно если сам их и придумал. Я думаю, что этот восторг — отражение восторга Господа, творящего мир, восторга, проявляющегося в индивидуальности и новизне каждого листочка и каждой снежинки.
Глава 1. Радости профессии

Разработка грандиозных идей — это удовольствие, а поиск паршивых маленьких «жучков» — это всего лишь работа. В каждом творческом деле бывают ужасные периоды однообразного и кропотливого труда, и программирование не является исключением.
Глава 1. Печали профессии

Программные проекты чаще проваливаются из-за нехватки календарного времени, чем по всем остальным причинам вместе взятым.
Глава 2. Этот мифический "человеко-месяц"

При обнаружении отставания от графика естественной и общепринятой реакцией является увеличение числа разработчиков. Это все равно, что тушить пламя бензином. В результате дела идут значительно хуже. Чем сильнее пламя, тем больше нужно бензина, и в итоге этот путь приводит к катастрофе.
Глава 2. Этот мифический "человеко-месяц"

В основе планирования разработки программ лежит ложное допущение, что все будет хорошо, т.е. каждая задача займет столько времени, сколько «должна» занять.
Глава 2. Оптимизм

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

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

Поскольку создание программного продукта является по сути системным проектом — практикой сложных взаимосвязей, затраты на обмен данными велики и быстро начинают преобладать над сокращением сроков, достигаемым в результате разбиения задачи на более мелкие подзадачи. В этом случае привлечение дополнительных работников не сокращает, а удлиняет график работ.
Глава 2. Человеко-месяц

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

У повара есть еще одна возможность: добавить жару. В результате омлет часто оказывается безнадежно испорченным: горелым с одного края и сырым — с другого.

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

Если проект не укладывается в сроки, то добавление рабочей силы задержит его еще больше.
Глава 2. Упрощенная формулировка закона Брукса

Я убежден, что концептуальная целостность является важнейшей характеристикой системного проекта. Лучше убрать из системы отдельные необычные возможности и усовершенствования и реализовать единый набор конструктивных идей, чем оснастить ее многими хорошими, но невзаимосвязанными и несогласованными идеями.
Глава 4. Концептуальное единство

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

Архитектор всегда должен быть готов показать пример реализации любой описанной им функции, но он не должен пытаться навязывать определенную реализацию.
Глава 6. Письменные спецификации - руководство

Лучший друг менеджера проекта — его постоянный противник, независимая организация, тестирующая продукт. Группа проверяет соответствие машин и продуктов спецификациям и выступает пособником дьявола, указывая на все замеченные дефекты и несоответствия. Каждой организации, ведущей разработки, нужна такая независимая группа технического аудита, которая должна быть неподкупна.
Глава 6. Тестирование продукта

Мыслители встречаются редко, практики еще реже, но реже всего - мыслители-практики
Глава 7. Организация крупного программного проекта

Что хуже всего получается у менеджеров проектов, так это использование технического гения людей, не очень сильных в администрировании
Глава 7. Организация крупного программного проекта

Линейная экстраполяция данных, относящихся к коротким задачам, бессмысленна. Если экстраполировать время, за которое можно пробежать стометровку, то окажется, что можно пробежать милю менее чем за три минуты.
Глава 8. Объявляя удар


В неопубликованном исследовании 1964 года, которое провел E. F. Bardain, показано, что программисты продуктивно используют 27% рабочего времени.
Глава 8. Данные Портмана. Сноска №6

Необходимо записывать принятые решения. Только когда пишешь, становятся видны пропуски и выявляются несогласованности. В процессе записывания возникает необходимость принятия сотен мини-решений, и их наличие отличает четкую и ясную политику от расплывчатой.
Глава 10. Зачем нужны формальные документы?

Планируйте выбросить первую версию — вам все равно придется это сделать.
Глава 11.Опытные заводы и масштабирование

Нежелание документировать проект происходит не только от лени или недостатка времени. Оно происходит от нежелания проектировщика связывать себя отстаиванием решений, которые, как он знает, предварительные. «Документируя проект, проектировщик становится объектом критики со всех сторон, и должен защищать все, что написал. Если организационная структура может представлять угрозу, не будет документироваться ничего, кроме того, что нельзя оспорить.»
Глава 11. Планируйте организационную структуру

Фундаментальная проблема при сопровождении программ состоит в том, что исправление одной ошибки с большой вероятностью (20-50 процентов) влечет появление новой. Поэтому весь процесс идет по принципу «два шага вперед, один назад».
Глава 11. Два шага вперед, шаг назад

Я убежден, что только инертность и лень препятствуют повсеместному принятию этих инструментов, технические трудности более не являются изменениями.
Глава 12. Языки высокого уровня и интерактивное программирование

Среди современных кудесников, как и встарь, встречаются хвастуны: «Я могу писать программы, которые управляют воздушным движением, перехватывают баллистические ракеты, делают переводы по банковским счетам, управляют производственными линиями». На что есть ответ: «И я могу, и каждый может, но будет ли работать то, что ты напишешь?»
Глава 13. Целое и части

Все цитаты из книги Фредерика Брукса “Мифический человеко-месяц”:

Часть 1

Часть 2

Радости профессии

UPD: Добавлена цитата из главы 8. Спасибо intr за наводку:)

7 комментариев:

  1. У Брукса в MЧМ есть еще одно очень красивое высказывание, на тему почему нам нравится программирование (там вообще несколько тезисов, но это уже просто поэзия)

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

    ОтветитьУдалить
  2. Самое сложное при выборе цитат из таких книг, как эта, что выкинуть. Весь раздел о радостях профессии потрясен, но там 5 абзацев и цитатой это уже никак не назовешь:)
    Возможно такие разделы стоит выделять в отдельные сообщения?
    Я только что просмотрел весь раздел и, действительно, это поэзия:)

    ОтветитьУдалить
  3. Угу, совершенно согласен! Каждый из его 5 пунктов вполне потянет на отдельную цитату - благо каждый из них это отдельная обособленная мысль, хотя и связанные одной ниточкой.

    ОтветитьУдалить
  4. PS: а может еще и из EWD Дейкстры цитаты привести? В них Эдсгер порой так жгет, что и спустя десятилетия впечатляет! Я даже где-то видел в сети подборку русских переводов, но это мне нужно искать - где именно на память не скажу.

    ОтветитьУдалить
  5. Цитаты Дейкстры обязательно будут, как и цитаты Буча, и Мейера, и Кнута, и Хоара!
    Правда я сталкивался со знаменитыми высказывания Дейкстры не по его книгам (которые я не читал), а по цитированию его высказываний другими известными авторами.

    З.Ы. Цитату Брукса о радостях профессии я таки выделил в отдельное сообщение: http://ru-quotes.blogspot.com/2009/12/blog-post_14.html

    ОтветитьУдалить
  6. Спасибо за классный ресурс! Я уже воспользовался одной цитатой из человеческого фактора.

    Кстати, а может стоит добавить в цитаты мифического месяца:

    Глава 8. Объявляя удар. Сноски. О продуктивности.
    В неопубликованном исследовании 1964 года, которое провел E.F. Bardain, показано, программисты продуктивно используют 27% рабочего времени.

    ОтветитьУдалить
  7. 2intr: спасибо за наводку по поводу цитаты я ее добавил. Цитата действительно очень интересная.

    ОтветитьУдалить