Марти Хёрст
Кибернетик, факультет информации Калифорнийского университета в Беркли; автор книги Search User Interface («Пользовательские поисковые интерфейсы»)
На протяжении всей истории программирования мы то и дело сталкиваемся с неприятной реальностью: никто из специалистов не знает, как создавать программы, заведомо свободные от ошибок.
Почему мы не можем в программировании быть так же успешны, как в других областях техники? Возможно, наиболее романтичным мыслителем из всех, кому следовало бы адресовать такой вопрос, является Фредерик Брукс, автор книги The Mythical Man-Month («Мифический человеко-месяц»). (Если обратить внимание на то, что эта книга со столь неудачным названием, как бы подразумевающим, что «человек» – это лишь «мужчина», man, впервые вышла в 1975 году, легче игнорировать сквозящий в ней сексистский душок: утверждения, которые Брукс сделал 4 десятка лет назад, почти все верны и на сегодняшний день, за исключением того, что программист – не всегда «он», как пишет Брукс, – бывает и «она».)
Делясь с читателями радостями программирования, Брукс пишет:
Программист, как и поэт, работает, почти вплотную соприкасаясь с веществом чистой мысли. Он строит замки в воздухе и из воздуха, создавая их лишь силой собственного воображения. Мало есть творческих инструментов столь гибких, столь удобных для перестройки и отладки, столь готовых к воплощению придуманных нами грандиозных конструкций… И при этом само творение-программа, в отличие от строк поэта, вполне реально в том смысле, что оно движется и работает, давая зримые результаты, отдельные и отличные от собственно конструкции. Программа распечатывает данные, рисует чертежи, издает звуки, двигает манипуляторами. В наше время магия легенд и мифов воплотилась в жизнь.
Но у этой магии есть своя оборотная сторона:
Во многих видах творческой деятельности средство исполнения не очень-то податливо и надежно. Древесина расщепляется, краска размазывается, электрические цепи дают короткое замыкание. Эти физические ограничения, присущие средству или материалу исполнения, сдерживают и выражение идей, создают непредвиденные трудности в их воплощении и развитии. …Между тем программист творит с помощью невероятно податливых средств. Он созидает новое из чистого мысленного вещества – идей и их весьма гибких представлений. А поскольку средство податливо, мы ожидаем лишь незначительных трудностей при воплощении наших мыслей; отсюда наш упорный оптимизм. Баги возникают из‑за того, что сами наши исходные идеи имеют погрешности; вот почему наш оптимизм не очень-то оправдан.
Существует почти бесконечное число способов сложить слова в статью. Невообразимо велико и количество различных программ, которые можно написать для выполнения одной и той же функции. Вселенная возможностей слишком уж широка, слишком уж неограниченна, так что ошибки в ней неизбежны.
Есть и другие немаловажные причины программных ошибок. В первую очередь следует вспомнить о взаимодействующих друг с другом независимых системах, сопряжение которых зачастую дает непредсказуемый результат на выходе, причем на этом результате нередко сказываются еще более непредсказуемые действия людей, соединенных между собой во всемирную сеть. Но, на мой взгляд, самое красивое из объяснений – как раз насчет ничем не скованного вещества мысли.