Рецензия на книгу Роберта Гласса, «Креативное программирование 2.0». — Пер. с англ. — Спб.: Символ-Плюс, 2009
Что отличает книги гуру программирования от просто книг по программированию? Авторы «просто книг» дают советы, описывают инструменты, рекомендуют методологии. Гуру в своих книгах стремятся создать предельно общую картину, дать ответы на фундаментальные вопросы о принципах и основах программной инженерии, стараются преодолеть мифологические и религиозные заблуждения, которые в большом количестве накопились в программостроении. Книга Роберта Гласса из этого ряда, ей вполне подошло бы название «Вопросы философии программной инженерии».
Сразу начну с главной мысли книги и процитирую ее последний абзац: «Какими должны быть методы программирования – формальными и дисциплинированными или свободными и творческими? …Ответ прост: “Да!”».
Однако, прежде чем сделать свой пародоксальный вывод автор книги, как философ-прикладник проанализировал целый ряд сопутствующих вопросов, диалектических противоречий, сослался на сотни фактов, процитировал десятки исследований, как своих, так и коллег, и даже рассмотрел проблемы творчества в других отраслях.
Вот лишь небольшой список вопросов, на которые автор ищет ответы в своей книге. Программы: трудно или легко их делать? Задачи программирования: интеллектуальные, канцелярские (рутинные) или… творческие? Правда ли, что программистами «невозможно управлять»? «Нельзя управлять тем, что нельзя измерить» — так ли это? Автоматизация программирования – факт или фикция? Почему люди покупаются на революционные идеи? Приводит ли хороший процесс к лучшему продукту? Когда лучше ориентироваться на продукт, а когда на процесс?
Автор пытается разобраться в фундаментальных противоречиях, которые актуальны не только для программной инженерии. Противоречия между дисциплиной и гибкостью, формальными методами и эвристиками, оптимизацией и разумной достаточностью, качественными и количественными подходами, между теорией и практикой, между наукой и производством, между интересным и полезным, между индивидуальным и коллективным.
В книге приводятся результаты десятков исследований. Вот лишь некоторые выводы из них.
Отношение интеллектуальных задач и канцелярских в разработке ПО, примерно, равно 80% к 20%.
Сложность задач, решаемых в программировании, увеличивается в 50 раз каждые 10 лет.
На каждые 25% увеличения сложности решаемой задачи на 100% возрастает сложность программы, которая должна ее решать.
Формальные методы разработки ПО никак не показали себя в больших или хотя бы средних проектах, несмотря на 35 лет исследований в этой области. Типичными являются разработки, в которых соблюдены все технологические правила, но нет результата.
Стандарты могут гарантировать нам выпуск хорошей программы с таким же успехом, с каким они гарантируют появление хорошей пьесы или романа. 75% всех инноваций появляются благодаря рынку, а не технологическому прогрессу.
Разрыв между академическими компьютерными науками и реальным применением компьютеров стал слишком велик. Учебные программы не обеспечивают выпускников фундаментальными знаниями, необходимыми для долгосрочного профессионального роста.
Математика может оказаться для компьютерных наук тем же, чем стала латынь для прочих образовательных дисциплин.
Автора принадлежит к ветеранам-романтикам, которые убеждены, что настоящий программист это не кодер, а Творец.
Обобщил ли автор результаты всех исследований? — Нет. Более того, он обозначил много новых направлений для будущих исследователей. Разрешил ли автор раз и навсегда все фундаментальные противоречия? — Конечно, нет. Да и вряд ли это возможно. Ответил ли автор на все поставленные вопросы? — Тоже нет.
Но это нисколько не умаляет ценность книги, поскольку правильно поставленные вопросы это важнейший первый шаг к решению накопившихся в программной инженерии проблем.
Рекомендую книгу всем, кто столкнулся с непреодолимой потребностью приподняться над суетой, посмотреть со стороны, и попытаться увидеть общую картину «бешено несущегося потока».
Дополнительный бонус получат те читатели, кто ценит мягкий юмор и тонкую иронию.
Одно только разделение культур в разработке ПО на греческую, римскую и варварскую, чего стоит! Гласс выделяет три очень разные культуры в программной инженерии: греческую, римскую и варварскую.
Греки работают как кустари или самостоятельные члены бригад со своими личными инструментами, предоставляя свои услуги за плату.
Римляне требует от работника приносить себя в жертву организации. По римским порядкам, работник приходит на работу, берет общественные инструменты и делает, что ему сказано. За это он получает вознаграждение в виде ощущения защищенности, денег или власти.
Есть еще фирмы, стоящие на низших ступенях организационного развития, Гласс называет их варварами.
Греки организуют вещи, римляне организуют людей, варвары почти ничего не организуют.
Греческие методологии неформальны, римские – формальны, у варваров их нет.
Греки пишут программы, римляне управляют проектами, варвары спешат кодировать.
Греков вдохновляет задача, римлян – групповые цели, варваров – героика.
Греки минимизируют объем создаваемой документации, римляне максимизируют, варвары – презирают любую документацию.
Греки работают маленькими группами, римляне – крупными организациями, варвары – в одиночку.
Греки используют в качестве инструментов вещи, римляне используют людей как инструмент, варвары не пользуются инструментом.
Греки – демократы, римляне – империалисты, варвары – анархисты.
Греки эмпирически индуктивны, римляне аналитически дедуктивны, варвары немыслимо эмоциональны.
Греки интуитивны, римляне логичны, варвары импульсивны.
У греков управление основано на заслугах, у римлян – на функциях, у варваров – на страхе.
Грекам важна суть, римлянам – форма, варварам – количество строчек кода.
Греки делают дело, римляне планируют дело, варвары портят дело.
Добавлю из своего опыта. Бывает еще римско-варварская культура. Это когда де-юре — римская, а де-факто — варварская.
Об авторе книги
Роберт Гласс, пионер индустрии ПО Работает с вычислительной техникой с 1954 года. Сорок лет занимался профессиональной разработкой ПО. Затем исследовательская и преподавательская деятельность. Автор 25 книг и около 90 технических статей.
Автор: craft_brother