"Факты и заблуждения профессионального программирования" Роберта Гласса это ещё одна книга о том как успешно делать проекты, особенно SW проекты.
В книге вы не найдете готовые рецепты, но найдете много правильных вопросов. В этом собственно, как мне показалось, и ценность этой книги. Сильная сторона книги ещё в том, что автор чётко аргументирует/подтверждает свои мысли, даёт ссылки на книги, статьи и т.д.
Для себя я определил, что основная мысль автора: "Проектирование программного продукта это эвристическая, изнурительная и напряженная интеллектуальная/умственная работа, с плохо предсказуемыми результатами".
Книга начинается с прикольных букв F: frequently forgotten fundamental facts (and) few fallacies.
Вот для начала пару цитат из книги:
• " ... среди нас стало намного больше шарлатанов, продающих всяческие зелья и предсказывающих судьбу, чем нормальных людей, которые занимаются настоящим делом и несут знание в массы"
• "«великим разработчикам» надо платить «столько, сколько они заслуживают»"
• "Хороший менеджмент важнее хорошей технологии"
Автор, определяет проблемы отрасли, представляя факты.
55 фактов объеденные в несколько категорий:
• О менеджменте
• О жизненном цикле
• О качестве
• Об исследованиях
Заблуждения объединены аналогичным образом:
• О менеджменте
• О жизненном цикле
• Об обучении
Оглавление это просто нумерация Фактов. Факт 1, Факт 2, и т.д. Понять что-то из этого невозможно, как прочитать определенную главу непонятно. Выход только один читать все подряд.
По мере чтения глав я выписывал/делал заметки, чтобы ориентироваться было легче. Дальше очень сжато смысл фактов. Это позволит вам создать четкое представление по этим фактам, даже не читая книгу))):
Факт 01 - Самый важный фактор в разработке ПО – это не методы и средства, применяемые программистами, а сами программисты.
Факт 02 - По результатам исследования персональных отличий лучшие программисты до 28 раз превосходят слабейших. Если учесть, что оплата их труда когда не бывает соразмерной, то лучший программист и есть самое выгодное приобретение в индустрии ПО.
Факт 03 - Если проект не укладывается в сроки, то добавление рабочей силы задержит его еще больше.
Факт 04 - Условия труда оказывают сильное влияние на продуктивность и качество результата.
Факт 05 - Рекламный звон вокруг инструментов и методов это чума индустрии ПО. Большая часть усовершенствований средств и методов приводит к увеличению производительности и качества примерно на 5 – 35%. Но многие из этих усовершенствований были заявлены как дающие преимущество «на порядок».
Факт 06 - Изучение нового метода или средства сначала понижает производительность программистов и качество продукта. Пользу из обучения можно извлечь только после того, как пройдена кривая обучения. Поэтому вводить новые методы и средства имеет смысл, только если а) видеть их реальную ценность и б) проявлять терпение в ожидании выигрыша.
Факт 07 - Разработчики много говорят об инструментальных средствах. Они пробуют довольно многие, приобретают их в достаточном количестве, но практически не работают с ними.
Факт 08 - Чаще всего одной из причин неуправляемости проекта является плохая оценка.
Факт 09 - Большинство оценок в проектах ПО делается в начале жизненного цикла.И это не смущает нас, пока мы не понимаем, что оценки получены раньше, чем определены требования, и соответственно раньше, чем задача изучена. Следовательно, оценка обычно делается не вовремя.
Факт 10 - Большинство оценок в проектах ПО делают либо топ менеджеры, либо сотрудники, занимающиеся маркетингом, а вовсе не те, кто будет создавать ПО, или их руководители. Таким образом, оценку делают не те люди.
Факт 11 - Оценки в проектах ПО редко уточняются впоследствии. Другими словами, оценки, сделанные не теми людьми и не в то время, как правило, не корректируются.
Факт 12 - Раз оценки настолько неправильны, то не так уж много причин беспокоиться о том, что программные проекты не завершаются в сроки, задаваемые оценками. Однако всех это беспокоит.
Факт 13 - Между менеджерами и программистами нет контакта. В одном исследовании, посвященном проекту, в котором не были соблюдены параметры, за данные на основании оценки, и который рассматривался руководством как неудачный, говорится, что технические исполнители отозвались о нем как о самом удачном проекте, над которым они когда либо работали.
Факт 14 - Анализ осуществимости проекта почти всегда дает ответ «да».
Факт 15 - Повторное использование «в миниатюре» (в библиотеках подпрограмм) появилось почти 50 лет назад, и решение этой задачи отработано хорошо.
Факт 16 - Задача повторного использования «в крупном масштабе» (в компонентах) остается по большей части нерешенной, хотя все согласны с тем, что сделать это очень важно.
Факт 17 - Успех повторного использования в крупном масштабе бывает максимальным в семействах родственных систем и потому зависит от предметной области. Это сужает потенциальную применимость повторного использования в крупном масштабе.
Факт 18 - В практике повторного использования есть два «правила трех»: а) многократно используемые компоненты в три раза более трудоемки, чем одноразовые компоненты; и б) многократно используемый компонент должен быть испробован в трех различных приложениях, прежде чем его можно будет считать достаточно общим, чтобы допустить в библиотеку компонентов.
Факт 19 - Модификация повторно используемого кода крайне чревата ошибками. Если надо изменить более 20 25% кода компонента, то лучше переписать его с самого начала.
Факт 20 - Повторное использование паттернов проектирования – это решение проблем, сопутствующих повторному использованию кода.
Факт 21 - Увеличение сложности задачи на 25% приводит к усложнению программного решения на 100%. Это не условие, которое можно попытаться изменить (хотя сложность всегда желательно свести минимуму), это реальное положение дел.
Факт 22 - Восемьдесят процентов работ по созданию ПО приходится на интеллектуальную деятельность. Изрядную долю последней можно смело отнести к креативной. И лишь небольшую часть – к технической.
Факт 23 - Одной из двух самых распространенных причин неуправляемости проектов являются изменчивые требования.
Факт 24 - Исправление ошибок в требованиях обходится дороже всего, если они обнаружены на этапе эксплуатации, и дешевле всего, если это происходит на ранних этапах разработки.
Факт 25 - Требования, которых нет, – это такая ошибка, исправить которую труднее всего.
Факт 26 - По мере продвижения от начальных требований к архитектуре на нас обрушивается шквал «производных требований» (требований к конкретному проектному решению), вызванный сложностью процесса. Список этих производных требований часто в 50 раз длиннее изначального.
Факт 27 - Лучшее проектное решение задачи программирования редко бывает единственным.
Факт 28 - Проектирование – это сложный итеративный процесс. Первоначальное проектное решение, скорее, всего окажется неверным и, безусловно, не оптимальным.
Факт 29 - Программисты переходят от проектирования к кодированию тогда, когда задача разобрана до уровня «примитивов», которыми владеет проектировщик. Если кодировщик и проектировщик – это разные люди, то примитивы проектировщика, вероятно, не будут совпадать с примитивами кодировщика и это приведет к неприятностям.
Факт 30 - COBOL – это очень плохой язык, но все остальные (для обработки бизнес данных) гораздо хуже.
Факт 31 - Фаза устранения ошибок – самая трудоемкая в жизненном цикле.
Факт 32 - Оказывается, что в ПО, о котором типичный программист думает, что оно тщательно протестированно, нередко проверено выполнение лишь 55–60% логических путей. Применение автоматизированных средств, таких как анализаторы покрытия, позволяет повысить эту долю примерно до 85–90%. Протестировать 100% логических путей ПО практически невозможно.
Факт 33 - Даже если бы 100%%тестовое покрытие было возможно, оно не годилось бы на роль критерия достаточности тестирования. Примерно 35% дефектов ПО вызвано пропущенными логическими путями и еще 40% связаны с выполнением уникальной комбинации логических путей. Их не выявить при 100% покрытии тестами.
Факт 34 - Без инструментальных средств почти невозможно качественно проделать работу по устранению ошибок. Широко применяются отладчики – в отличие от других инструментов, например анализаторов тестового покрытия.
Факт 35 - Тесты редко автоматизируются. То есть определенные процессы тестирования могут и должны быть автоматизированы. Но значительную часть работы, связанной с тестированием, автоматизировать нельзя.
Факт 36 - Важным дополнением к инструментам тестирования является созданный программистом встроенный отладочный код, желательно, включаемый в объектный код в зависимости от директив компиляции.
Факт 37 - Тщательные инспекции позволяют устранить до 90% ошибок из программного продукта до того, как будет запущен первый эталонный тест.
Факт 38 - Тщательные инспекции дают множество выгод, но они не могут заменить тестирование.
Факт 39 - Общепризнано, что обзоры, сделанные постфактум (их также называют ретроспективными), важны как с точки зрения интересов потребителя (пользователя ПО), так и с точки зрения совершенствования процесса. Однако в большинстве организаций ретроспективные обзоры не делаются.
Факт 40 - В инспекциях наряду с техническими факторами присутствует и социальный. Уделять большее внимание чему то одному в ущерб другому – прямой путь к катастрофе.
Факт 41 - Стоимость сопровождения обычно составляет от 40 до 80% (в среднем 60%) стоимости ПО. Следовательно, эта фаза его жизненного цикла, возможно, самая важная.
Факт 42 - Примерно 60% расходов на сопровождение приходится на улучшение кода и около 17% – на исправление ошибок. Таким образом, в основном сопровождение и поддержка ПО заключается в добавлении в него новых возможностей, а не в его исправлении.
Факт 43 - Сопровождение – это решение, а не проблема.
Факт 44 - Если сравнивать задачи разработки и сопровождения ПО, то они по большей части одинаковы, – за исключением дополнительной задачи сопровождения, формулируемой как «изучение сопровождаемого продукта». Она занимает примерно 30% времени, уходящего на сопровождение в целом, и этот вид деятельности преобладает в сопровождении. Таким образом, можно сказать, что сопровождение более трудоемко, чем разработка.
Факт 45 - Улучшение качества разработки ПО приводит к тому, что сопровождения становится больше, а не меньше.
Факт 46 - Качество есть совокупность свойств.
Факт 47 - Качество не определяется удовлетворением пользователя, соответствием требованиям заказчика, приемлемостью цены и соблюдением сроков сдачи продукта или надежностью.
Факт 48 - Есть такие ошибки, к которым предрасположено большинство программистов.
Факт 49 - Ошибки имеют тенденцию образовывать скопления.
Факт 50 - Для устранения ошибок еще не выработан какой то один, лучший подход.
Продолжение рецензии в комментарии к этой рецензии (оказывается на GR есть ограничение в 20К chars)))