«Открытые системы»

Очевидно, что программы являются продуктом инженерного труда, а потому необходима адекватная инженерная дисциплина; увы, складывается она удивительно медленно, а движение к ней напоминает попытку дойти до линии горизонта

В первые десятилетия компьютерной истории профессионального программирования как такового вообще не было. К этому виду деятельности приобщались инженеры, учителя, самого разного рода специалисты и, конечно же, математики. Из полученного вавилонского смешения ничего хорошего не вышло, одни, назовем их «черной костью», основываясь на своих интуитивных представлениях, с грехом пополам писали прикладные задачи. Другие, «белая кость», смотрели на программирование как на предмет, где можно реализовать свой математический потенциал. И только в середине 60-х стало складываться представление о новой специальности; в инженерных вузах и позже в университетах, были созданы профильные кафедры. В последующие годы программирование как специальность более или менее устоялась, несмотря на то что неопределенность была все еще очень велика. Чтобы убедиться в этом, достаточно посмотреть материалы из курсов по информатике, читаемых в самых передовых институтах сегодня. Один из признанных авторитетов в области разработки программного обеспечения Фредерик Брукс, автор известной книги «Мифический человеко-месяц, или Как создаются программные системы», высказался на вручении ему Тьюринговской премии в 1999 году так: «Мы не знаем, что делаем, и не знаем, что сделали».

Закона, постулирующего количественное развитие программного обеспечения, наподобие закона Мура об удвоении количества транзисторов за определенный промежуток времени, не существует, но многими отмечена схожая закономерность: можно согласиться с тем, что количество ежегодно создаваемых кодов практически удваивается. Рост представляет собой плохо управляемый процесс по простой причине: программирование как труд достаточно дешево. Сравните, как долго и дорого создавать такие изделия, как самолеты или автомобили, сколько времени уходит на проектирование, создание опытных образцов, испытания, запуск в производ?ство с тем, как соблазнительно быстро пишутся программы. Не случайно самым богатым в мире человеком стал именно владелец софтверной компании. И еще, программирование губит иллюзия простоты и вседозволенности; между автором и конечным продуктом практически отсутствует череда специалистов-технологов и производственников. Следствие этой иллюзии — многочисленные аварии, вызванные ошибками. Они особенно эффектно, а порой и трагически проявляют себя во встроенных системах; ошибки же в офисных программах менее заметны. Тем, кого интересует хроника «программогенных катастроф», можно порекомендовать «Дайджест рисков» (catless.ncl.ac.uk/Risks), где описаны сотни, если не тысячи эпизодов, зафиксированных с 1986 года до последних дней.

В 1968 году в Гармиш-Партенкирхене (Германия) состоялась организованная комитетом по науке НАТО конференция, которую считают отправной точкой в истории программной инженерии. Поводом для этой конференции стало осознание кризисной ситуации в программном обеспечении, суть которой в том, что сложность программ и мощность компьютеров пришли в противоречие с технологическими возможностями программирования

А чего стоит способ испытания с привлечением десятков тысяч бета-тестировщиков, ищущих ошибки производителей, по существу дискредитирующие программирование как индустрию? Трудно представить себе такое количество людей, выразивших свое желание стать добровольными испытателями транспортных средств. Очевидно, что создание больших программных систем должно быть превращено в такую же инженерную деятельность, как проектирование мостов или летательных аппаратов. Вопрос в том, как это сделать? Нельзя не удивиться и тому, что специальность «Программная инженерия» стала вводиться в вузах только в последние годы. Термин Software Engineering предложил ученый-математик из Мюнхена Фредерик Бауер в 1968 году. В том же году в Гармиш-Партенкирхене (Германия) состоялась организованная комитетом по науке НАТО конференция, которую считают отправной точкой в истории программной инженерии. Поводом для этой конференции стало осознание кризисной ситуации в программном обеспечении, суть которой в том, что сложность программ и мощность компьютеров пришли в противоречие с технологическими возможностями программирования. По понятным причинам труды этой конференции стали доступны позднее, а широкой публике о кризисе стало известно из выступления Эдсгера Дейкстры, сделанного им в 1972 году на вручении премии Тьюринга. Он сказал: «Основная причина кризиса состоит в том, что машины стали на порядок мощнее. Можно выстроить такую банальную последовательность, не было компьютеров, не было и программирования с его проблемами. Пока компьютеры были слабыми, проблемы, соответственно, не очень тревожили, а когда компьютеры стали гигантскими, то и проблемы стали такими же». Заметим, это было сказано 34 года назад, во что же превратились нынешние проблемы?

Несмотря на прокламируемый динамизм отрасли, движение к профессиональному программированию было чрезвычайно медленным. Почти двадцать лет ушло на то, чтобы осознать суть проблемы кризиса. В конечном итоге они свелись к трем пунктам. Первый — превышение планируемого бюджета и отставание от сроков. Например, анализируя процесс разработки операционной системы OS/360, Брукс пришел к заключению, что отсутствие заранее подготовленной архитектуры стало источником ошибок, стоивших многие миллионы долларов. Вторая проблема — незащищенность собственности: безопасность программного обеспечения стала притчей во языцех, но воз и ныне там. Не случайно сегодня многие крупные производители ставят проблему безопасности на первое место. Третья причина — высокая цена ошибок, приводящих в том числе к человеческим жертвам.

Чтобы справиться с ними, в период с 70-х по 90-е годы искали универсальное средство, которое могло бы решить перечисленные проблемы. Колоссальные надежды вызывало структурное программирование, возвращающее программную инженерию к первоосновам, к машине Тьюринга. Это был золотой век титанов программирования, среди которых Дональд Кнут, Никлаус Вирт, Тони Хоар и другие. Казалось, откажись человечество от оператора GOTO, перейди оно на Паскаль или Аду, и все проблемы будут решены, но этого было недостаточно, несмотря на то что языки, которым не хватало структурности, обрели ее. Позже появилось объектно-ориентированное программирование, Java, стандарты на документирование и языки моделирования, прежде всего UML. Особое внимание привлекло к себе создание средств CASE (Computer-Aided Software Engineering). Помимо технологической оснастки, разрешения кризиса искали в дисциплине программирования, в организации процесса программирования, в повышении профессиональности программистов и во многом другом.

На волне всеобщей эйфории «главный циник» программирования Брукс в 1987 году опубликовал еще одну крамольную статью. В «Серебряной пули нет» он утверждал, что не существует такой технологии или такого опыта, которые позволили бы развивать программирование в соответствии с уровнем запросов. Эта статья вызвала ожесточенную полемику, некоторые интерпретировали ее как приговор программной инженерии.

Но естественно, что движение продолжается. В последние годы появились гибкие методологии разработки программного обеспечения, известные под названием «облегченные методологии», развиваются методы экстремального программирования Extreme Programming (XP), а также методы управления проектами.


Фридрих Бауер родился в 1924 году в баварском городке Регенсбурге. В 1942 году он получил диплом о среднем образовании и в 1943 году был призван на службу в Вермахт. Служба продолжалась до 1945 года. После войны Бауер поступил в университет Ludwig-Maximilians-Universitat в Мюнхене, где изучал математику и теоретическую физику. В 1950 году он получил диплом о высшем образовании. После учебы Бауер занимался проектированием аппаратного обеспечения для компьютеров, в том числе в 1951 году разработал компьютер Stanislaus на базе логических реле. Параллельно с этой работой он предлагал и математические решения, например, ему принадлежит авторство стекового метода решения математических задач, который широко применяется сейчас. Бауер входил в состав комиссии, разрабатывавшей алгоритмический язык программирования АЛГОЛ 60, ставший предшественником современных языков программирования. В 1968 году Бауер ввел термин Software Engineering. Помимо работы над теорией и практикой программирования, Бауер занимался вопросами шифрования, он автор книги Decrypted secrets, которая выдержала не одно издание. В 1963 году Бауер стал профессором Мюнхенского технологического университета, где преподавал математику, а с 1972 года — информатику.


Дональд Кнут (родился в 1938 году) получил образование в институте Case Institute of Technology. В 1960 году он защитил диплом бакалавра по математике. В 1963 году он получил степень доктора философии по математике в Калифорнийском технологическом институте, где занял должность профессора. Практически сразу же после защиты он приступил к работе над капитальным трудом «Искусство программирования». Первый том вышел в 1968 году. В этом же году он стал профессором Стэнфордского университета. В 1975 году, после выпуска третьего тома своей знаменитой книги, Кнут убедился в недостаточных возможностях электронных издательских систем того времени и занялся разработкой инструментов TeX и METAFONT. В 1992 году Кнут был избран членом-корреспондентом Французской академии наук, а в 2003-м — членом Королевского научного общества. В 1992 году он отказался от регулярной преподавательской деятельности, с тем чтобы посвятить себя написанию своей книги. В настоящее время Кнут работает над четвертым ее томом. В среде программистов Кнут пользуется признанием не только благодаря своему вкладу в развитие теории программирования, но и как мастер четких формулировок с большим чувством юмора.


Эдсгер Дейкстра (1930 - 2002) изучал теоретическую физику в Лейденском университете в Голландии, но вскоре убедился, что его в значительно большей степени интересует программирование. Первым местом его работы стал научный центр Mathematisch Centrum в Амстердаме. В начале 70-х годов он вел исследовательскую работу в Burroughs Corporation, затем получил почетную должность Schlumberger Centennial Chair по информатике в Университете штата Техас. Дейкстра оставил заметный след в развитии теории и практики программирования. Он разработал алгорим выбора кратчайшего маршрута, известный как алгоритм Дейкстры, операционную систему THE, а тажке предложил принцип флажков для координации работы нескольких процессоров и программ. Дейкстра известен также как противник принципа программирования с использованием оператора безусловного перехода GO TO и апологет структурированных операторов управления, таких как WHILE. Дейкстра принимал участие в разработке компилятора для языка АЛГОЛ 60. В 70-х годах он начал работать над вопросами формального доказательства правильности алгоритмов. Результаты своей работы Дейкстра формулировал в виде научных эссе, которые по-старинке писал авторучкой.