Нестандартный подход.Урок истории

Нестандартный подход.Урок истории

Разобраться с предыдущими двумя частями было не так-то просто. Главы, посвященные управлению проектом и человеческому фактору, должны были заставить основательно задуматься над некоторыми тернистыми путями в нашем ремесле. Данная часть позволит читателю сделать некоторую передышку. Прежде чем перейти к крещендо в части VI «Более сложные вопросы», я порадую вас спокойной интерлюдией.
Тема этой части - разнообразие мнений, бытующих среди тех, кто занимается разработкой программного обеспечения. Некоторые из их идей спекулятивны, иногда довольно необычны. Полезно получить представление о том, что можно по-разному взглянуть на проблемы. Как спорт кто-то назвал «секцией игрушек в жизни», так и эту часть можно воспринимать как секцию игрушек в данной книге.
В главе 17 «Урок истории» я рассказываю об интересном эпизоде строительства военно-морского флота. Из гибели шведского военного судна «Ваза» в первом же выходе в море, случившейся несколько веков назад, разработчики ПО могут извлечь ряд ценных уроков.
Глава 18 «Неправильные аналогии» поднимает тему псевдонауки. Прибегая к скверным научным аналогиям, чтобы «объяснить» непрофессионалам проблемы программирования, можно столкнуться с неприятностями, поэтому данная тема достойна рассмотрения.
В главе 19 «Трудности обновления» я стараюсь по-новому осветить интересные вопросы обновления уже установленного ПО. Мое предложение по этому вопросу может оказаться для вас сюрпризом.
Наконец, в главе 20 «Числа, случайные и не очень» мы в последний раз встречаемся с Роско Леруа. Он расскажет нам о некоторых расчетах, выполненных им на необитаемом острове без помощи компьютера. Эта история о том, как анализировать задачу, которая сначала выглядит простой, но потом оказывается более сложной, чем предполагалось.
Урок истории.
В 1993-1994 гг. я жил в Стокгольме и работал у одного из наших самых крупных и важных клиентов. Яаак Урми (Jaak Urmi), мой друг и временный начальник, настоял на том, чтобы я провел день в Музее «Ваза» в стокгольмской гавани. Это уникальный музей.
Гордость Королевского флота Швеции, «Ваза», была спущена на воду в августе 1628 г. Через двадцать минут после спуска налетел небольшой порыв ветра, и она затонула на дне стокгольмской гавани. Через 333 года она была поднята на поверхность, тщательно отреставрирована и выставлена на всеобщее обозрение. Для анализа причин трагедии было отпущено несколько веков, и строительство военно-морских судов за этот период достигло значительных успехов, поэтому мы неплохо представляем себе причины, по которым затонула «Ваза». Из этого несчастного случая можно извлечь ряд интересных уроков, в том числе полезных для разработки ПО.
Не берите в архитекторы короля.
Одна из проблем «Вазы» состояла в том, что спецификации для нее составлял и переделывал сам король. Корабль по конструкции находился посередине между «малыми» и «большими» судами того времени. Киль был первоначально заложен как для маленького судна, а потом несколько удлинен. Это помешало строителям увеличить соответствующим образом ширину судна, хотя они и пытались это сделать. В конечном счете «Ваза» получилась высоким и узким судном.
Кроме того, у нее было две орудийные палубы. В первоначальном проекте была только одна такая палуба. Но король узнал, что в соперничающей Дании строилось судно с двумя орудийными палубами, и он не хотел отстать. Позднейшее добавление второй орудийной палубы утяжелило надводную часть судна.
У программистов есть термин для такой ситуации. Это называется «клюг» (kludge).
Внешнее впечатление обманчиво.
Первым впечатлением, когда видишь сегодня «Вазу», оказывается изумление. Корабль высокий, узкий, с тяжелыми надстройками. Однако такую конструкцию имели все корабли той эпохи, и в большинстве своем они были устойчивы. Расчеты, проведенные по восстановленному судну, показывают, что ошибки в проекте были, но не столь значительные, как может показаться: центр равновесия приподнят всего на несколько сантиметров. Это достаточно удивительно.
Контроль проекта.
Чертежей «Вазы» не сохранилось, поскольку их никогда и не было! Сегодня подобное отсутствие документации было бы скандалом, но в те времена наличие детальных чертежей не было обязательным; у кораблестроителя были тщательно оберегаемые таблицы расчетов и эмпирические правила, а в основном судно строилось по вдохновению. Хотя в те времена была распространена такая практика, недопустимая сегодня, можно только гадать, могло ли наличие чертежей повлиять на последовавшие события.
Знать, чего ты не умеешь.
Практика кораблестроения того времени пребывала в зачаточном состоянии. Расчет центра масс делать не умели или не хотели. Исходя из имевшихся теоретических и практических средств, было почти невозможно выяснить, устойчива ли данная конструкция. Говорить о какойлибо надежности прогнозов не приходилось. Удивительно лишь, что тонуло так мало судов.
Аналогичная ситуация сложилась в Америке со строительством мостов в начале IX века. Очень многие мосты разваливались, потому что инженеры не умели делать точные расчеты. Джон Реблинг, построивший Бруклинский мост, знал, что не умеет рассчитывать мосты, поэтому он предусмотрел повышенные меры предосторожности. Умница.
Преемственность руководства.
Руководитель постройки Генрик Гибертссон умер, не успев завершить проект, и какое-то время перед его смертью руководство осуществляли вместе он и его помощник Хейн Якобссон. Оно было не очень удачным лишнее свидетельство необходимости иметь одного сильного лидера.
Как всегда, все в спешке.
«Ваза» была построена примерно за два года под сильным давлением с целью ускорить постройку. Несомненно, это повлияло на принятие ряда неудачных решений.
Сосредоточенность на несущественных деталях.
Витиеватая резьба и украшения, законченные к моменту спуска, производят сильное впечатление. Очевидно, на эту работу были израсходованы большие ресурсы. На самом деле это были не просто украшения: они должны были оказать психологическое воздействие на прибалтийских соседей Швеции. Они бы и выполнили эту функцию, останься судно на плаву. Эта подробность - хороший пример губительного действия «ползучего фичеризма» на надежность продукта.
Если проект плох...
После катастрофы строителей критиковали за то, что они загрузили в трюмы недостаточно балласта, что позволило бы повысить остойчивость корабля. На самом деле балласта набили столько, сколько было возможно, но места для него было мало. И даже если бы оно было, более низкая осадка судна не помогла бы, поскольку при волнении вода стала бы захлестывать судно через порталы нижней орудийной палубы. Конечно, если бы была только одна орудийная палуба.
Важность тестирования.
За несколько дней до спуска конструкторы осуществили очень практичную проверку устойчивости: они заставили 30 моряков перебегать с одного борта «Вазы» на другой и обратно. После нескольких попыток испытание пришлось прекратить, потому что судно слишком кренилось. Проверка закончилась зловещим предзнаменованием.
Однако короля в тот момент не было в стране, и никто не посмел отложить спуск. Что последовало дальше, всем известно.
Любопытно, что представление, будто с помощью тестирования можно «добавить» качества в программное обеспечение, столь же ошибочно. После того, как судно (или программное обеспечение) построено, тестирование может только охарактеризовать то, что в нем уже есть. Напротив, если проводить тесты часто и начать делать это на ранних стадиях, могут обнаружиться ошибки, которые удастся вовремя исправить. В данной ситуации едва ли такое было возможно. Однако в большинстве проектов разработки ПО раннее начало тестирования должно быть взято за правило в процедуре итеративной разработки.
Прототип и продукт.
С учетом того, что проект «Вазы» оказался экспериментальным, судно следовало рассматривать как прототип, а не продукт. Обнаружив во время испытания неустойчивость, судно следовало сразу поместить в музей - на 333 года раньше. Однако за постройкой наблюдал король, судно обошлось в 4% валового национального продукта того года, и оно было срочно необходимо для предстоявшей войны. В результате объявили, что это продукт, и запустили его.
Выводы следствия.
Из 150 находившихся на борту людей погибло от 30 до 50. Сразу после трагедии оставшийся в живых капитан был арестован и посажен в тюрьму. Конечно, было расследование. Но как только знающие люди поняли, что слишком многие проблемы связаны с вмешательством самого короля, дело стало окутываться туманом. Расследование ничего толком не дало: никто не был признан виновным. Мачты, торчавшие над поверхностью воды, спилили, и вся история была тихо погребена в море.
Мы не любим копаться в провалах своих программных проектов. Я сомневаюсь, что когда-нибудь будет создан музей, посвященный какой-нибудь нашей знаменитой катастрофе.
Резюме.
Инженеры-программисты могут извлечь для себя несколько полезных уроков из катастрофы «Вазы».