Заглядывая вперед, бывает нелишне оглянуться назад. Непросто представить, куда мы движемся, без ясного понимания, откуда мы идем. Мои собственные представления о будущем компьютерных технологий и, в частности, программного обеспечения эволюционировали в течение почти сорока лет моей работы в этой области. Я хотел бы не пускаться здесь в ностальгические размышления о прошлом, а, наоборот, попытаться оценить перспективы. Когда я начинал свою карьеру в Массачусетском технологическом институте, Маккарти только что придумал язык Лисп, Корбато работал над первой многопользовательской системой с разделением времени, а корпорация Digital Equipment выпускала компьютеры PDP-1 с очень маленькими серийными номерами для использования исключительно в исследовательских целях. На одном из них я изучал искусство программирования с применением компонентов многократного использования — писал процедуры для обработки изображений, полученных в результате физических экспериментов.
Как и сегодня, это была эпоха ожидания великих свершений. Казалось, что возможности ограничены лишь человеческой фантазией и недостаточной производительностью компьютеров. Я прекрасно помню, как один из наших профессоров, Марвин Мински, в разговоре с группой студентов заметил, что вот-вот будет реализовано компьютерное преобразование разговорной речи в режиме реального времени. Теория, алгоритмы и особенности программного обеспечения казались достаточно ясными — нужны лишь более быстрые компьютеры с большей памятью. История продемонстрировала, что проблема заключается не только в аппаратном обеспечении. Несмотря на то что производительность компьютеров выросла на много порядков, решение этой и других задач, которое, казалось, уже в руках, до сих пор из них ускользает.
Действительно, десятилетия, прошедшие со времени моей учебы в вузе, продемонстрировали поразительный рост в области компьютерного аппаратного обеспечения. На этой волне очень легко начать рисовать в своем воображении картины светлого компьютерного будущего, предаваясь сладостным размышлениям о будущих машинах невероятной мощности и беспрецедентно малых размеров. Хотя мне и приходилось в свое время заниматься разработкой «железа», область программного обеспечения всегда представляла для меня первостепенный интерес. Свидетельства подлинного прогресса в этой области обнаружить гораздо труднее. Оглядываясь назад и анализируя эволюцию программного обеспечения, мы увидим совсем немного по-настоящему важных вех на пути его развития. Зато отчетливо наблюдается устойчивая тенденция к появлению все более громоздких и сложных систем, обладающих меньшей надежностью, которые едва выдерживают груз вызывающих недоумение свойств сомнительной полезности.
Хотя изменения в программном обеспечении вполне очевидны, совсем непросто получить надежные доказательства, которые свидетельствовали бы об увеличении практических возможностей, предоставляемых программным обеспечением пользователю. Для базовых операций, составляющих 90% от того набора функций, который я регулярно использую, различие между текущей версией Microsoft Word, в котором я работаю сегодня, и программой Wordstar, которую я использовал в 1980 году на CP/M, очень невелико. С точки зрения пользователя произошло лишь незначительное увеличение основных возможностей или производительности. В действительности, сегодняшние программные монстры загружаются с наших сверхбыстрых дисков зачастую так же долго, как и скромные по своим возможностям, но эффективные программы прошлых лет, когда они запускались с 8-дюймовых гибких дисков, скорость которых была достойна сожаления.
По иронии судьбы, в то время как аппаратное обеспечение становится все более надежным и заслуживающим доверия, о программном обеспечении этого сказать нельзя. Прошли годы, прежде чем мне пришлось столкнуться с поломкой жесткого диска, тогда как не проходит и дня без выхода из строя одной, а то и нескольких машин в моем офисе вследствие неустойчивой совместной работы операционной системы и приложений. 6-летняя машина, используемая нами в качестве межсетевого экрана, годами прекрасно работает 24 часа в сутки и 7 дней в неделю, в то время как Windows «сходит с ума», если ее не перезагружать хотя бы раз в неделю.
Десятки лет нас засыпали заявлениями об ускорении темпа инноваций, однако многие вопросы, относящиеся к практике науки о компьютерах и разработки программного обеспечения, осознаются весьма медленно.
В конечном счете, истинный темп изменений обусловливается не развитием науки или технологии, или идей, а способностью человека и общественно-социальных систем приспособиться к этим изменениям. Продукт, услуга, практическая деятельность и т.д., какими бы они ни были новыми или новаторскими, не будут иметь успеха без принятия и одобрения, без изменений в самих людях и общественных институтах.
Что кроется за безудержной гонкой аппаратных вооружений
Истинная проблема программного обеспечения напрямую связана с аппаратными средствами. Нас развратили все более и более щедрые обещания, околдовало очарование закона Мура. Непрекращающиеся успехи в области аппаратного обеспечения сослужат нам плохую службу. Достижения в аппаратном обеспечении позволяют скрыть нашу собственную профессиональную некомпетентность и незрелость в области технологии разработки программного обеспечения. Современные программисты, говоря об операционных системах, заявляют, что среда разработки программ сегодня стала гораздо более сложной по сравнению с прошлыми годами, однако истинная проблема заключается не в самой этой сложности, а скорее в том, насколько грамотно мы пытаемся ее преодолеть.
Несколько лет назад одна из тогдашних компьютерных компаний-лидеров, проанализировав свою собственную внутреннюю практику разработки программного обеспечения, обнаружила, что наиболее зрелый, систематизированный и дисциплинированный подход проявили прикладные программисты при создании бизнес-приложений для внутреннего потребления. Далее в этом ряду оказались разработчики инженерных приложений. В самый конец списка попали так называемые профессионалы, писавшие базовую операционную систему и связанные с нею утилиты. До начала исследований такой расклад казался наименее вероятным.
На сегодняшний день ситуация практически не изменилась. Люди нашей профессии производят чудовищные по своей сложности операционные системы, поставляемые с более чем 100 тыс. известных программных ошибок. Ведущие коммерческие программные системы создаются без предварительного анализа или проектирования, без использования моделей или диаграмм. Билл Гейтс публично заявляет, что не верит в диаграммы и не желает, чтобы его программисты занимались проектированием. А мы делаем из него героя и покупаем его программы.
Гейтс не одинок. Производители, продающие нам инструменты моделирования программ, которые позволяют систематизировать процесс проектирования, сами эти методы не используют. Они пристыковывают друг к другу разнородные куски, попавшие в их распоряжение в результате приобретений разных компаний, и затем выставляют этот «слоеный пирог« на рынок в качестве интегрированного решения.
Многие из тех, у кого на визитных карточках горделиво красуется надпись, удостоверяющая профессию программного инженера, никогда в своей жизни не занимались по-настоящему инженерным трудом. Более подходящим названием, отражающим то, чем они в действительности занимаются на практике, могло бы быть «технический специалист по быстрому кодированию». К сожалению, хакерство на скорую руку продолжает поощряться в ущерб систематизированному проектированию и разработке.
Золотая эра впереди
Можно делать лучше. Несколько миллионов строк кода управляют сетевым лазерным принтером в нашем офисе, ежедневно испытывающим интенсивную рабочую нагрузку. Это устройство постоянно включено и печатает по требованию из любого места в сети. До сих пор еще ни разу не было ни одной поломки и не было замечено ни одной явной программной ошибки.
Этот пример из практики программирования, взятый из довольно специфической области, вселяет надежду. Там, где емкость памяти и быстродействие процессора ограничены, программисты оказываются на высоте, демонстрируя все те полезные навыки в области продвинутого проектирования и дисциплинированного кодирования, которые лежат в основе нашей профессии. Для преодоления сложности они разбивают программу на модули и создают многократно используемые компоненты, слабо связанные, но легко соединяемые между собой, разрабатывают алгоритмы по обработке звука и структуры данных, реализуемые в надежно работающем коде.
Программисты, работающие над настольными приложениями, инструментами разработки или операционными средами, все как один возразят, сославшись на некорректность проводимых параллелей и различия между управляемой и ограниченной средой программирования встроенных систем и гораздо более сложным миром программирования для Windows. И хотя это оправдание в какой-то степени справедливо, суть заключается в том, что большинство выражающих несогласие программистов не использует при разработке систематический и дисциплинированный подход, как того требует сложность современных систем.
Продолжающийся бурный рост производительности «железа» не только сделал возможным появление новых приложений и новых функций, но также позволил небрежному, непрофессиональному программированию стать фактическим стандартом. Мощь аппаратного обеспечения затормозила «взросление» программистской профессии, оставив ее в поре безответственной юности, когда неустойчиво работающие продукты с сотнями тысяч программных ошибок поставляются и продаются в массовом количестве. Мы приумножаем наши грехи, приучая наших клиентов и наш менеджмент принимать это прискорбное положение дел как норму.
Настоящий золотой век разработки программного обеспечения еще впереди. Он наступит тогда, когда возможности инженеров аппаратного обеспечения удваивать или учетверять производительность начнут исчерпываться, а нам, чтобы удовлетворить рыночный спрос, потребуется нечто более совершенное, чем не знающая меры перекройка кода.
История будущего
К счастью, у нас уже есть под рукой инструменты для осуществления на практике устоявшихся принципов грамотного проектирования и программирования. Все, что нам нужно, — не забывать о них. Основной момент заключается в следующем: программирование как профессия станет более зрелым, когда достижения в аппаратном обеспечении не будут более обольщать нас, когда мы перестанем думать о компьютерных технологиях как о машинах, и, когда мы более не будем искать решения задач программного обеспечения в «железе». Нам необходимо повзрослеть и принять на себя всю полноту ответственности не только за те программные продукты, которые мы проектируем и производим, но также и за выполнение важной работы по передаче последующим поколениям программистов-профессионалов накопленной суммы основополагающих принципов и практического опыта, которые составляют наше историческое наследие. Если нам это удастся, то программное обеспечение ждет блестящее будущее.
Ларри Константин (lconstantine@compuserve.com) — адъюнкт-профессор информатики Сиднейского технологического университета (Австралия), руководитель отдела исследований и разработок компании Constantine & Lockwood.
Права принадлежат автору, 2001. Право на перевод с английского языка принадлежит издательству «Открытые системы».
Larry L. Constantine, Back to the Future. Communications of the ACM, March of 2001, vol. 44, no. 3