Мифический человеко-месяц
Прочитал «Мифический человеко-месяц или Как создаются программные системы» Фредерика Брукса. Осталось впечатление лёгкой разочарованности. Некоторое время назад я, кажется на хабре, встретил несколько восторженных мнений о том, что эта книга ― мастрид для всех, кто так или иначе связан с разработкой ПО. Но во время чтения у меня постоянно сохронялось ощущение, что я читаю очевидные вещи.
Проблема не в том, что я такой умный, а в том, что книга писалась в 1975 году. В то время действительно были прорывными мысли о том, что тестирование и отладка занимают больше времени, чем первичное написание кода; для организации труда разработчиков нужна иерархическая структура; разработчикам необходимо вести подробную документацию изменений в проекте. Сейчас это знает любой школьник, почитавший тот же хабр.
Если есть желание ознакомиться с концепциями, предложенными Бруксом, надо читать издание 1986 года и только 1, 18 и 19 главы.
Но я не считаю время, проведённое с книгой, потраченным впустую. Для меня это был отличный исторический экскурс во время до C и Linux. Многие проблемы из книги с трудом укладывались у меня в голове. Несколько десятков лет назад переиспользование кода даже внутри одной компании было трудно осуществимо, программные продукты делались годами в изоляции от окружающего мира, для документирования изменений велась рабочая тетрадь, для новых компьютеров разрабатывались новые операционные системы. От этого начинаешь гораздо больше ценить интернет, опенсорс, унифицированные операционные системы и мощные современные компьютеры.
Основная идея Брукса в том, что ничего не может кардинально упростить (и ускорить) разработку ПО, потому что её основная сложность не в написании программного кода, а в создании концепции программной системы. Тем не менее, развитие отрасли позволяет избавляться от побочных сложностей, связанных с реализацией систем.
В целом, об историческом контексте этого труда хорошо говорит следующая цитата:
Другой важный круг идей для разработки, сокращающих число ошибок в программе, исходит от Дейкстры и построен на теоретической структуре Бёма и Джакопини.
В своей основе подход заключается в разработке программ, управляющие структуры которых состоят только из циклов, определяемых такими операторами, как DO WHILE и группами условно выполняемых операторов, ограниченных скобками с использованием операторов условия IF… THEN… ELSE. Бём и Джакопини показывают теоретическую достаточность таких структур.