Фредерик П. Брукс

Вид материалаДокументы
Целая новая программная отрасль - коробочные пакеты
Классическая программная индустрия.
Миры операционных систем объединились.
Индустрия коробочных продуктов.
Покупай и создавай: коробочные продукты в качестве компонентов
Это действительно наступление на сущность.
Так что же требуется?
Подобный материал:
1   ...   40   41   42   43   44   45   46   47   48

Целая новая программная отрасль - коробочные пакеты


Рядом с классической индустрией программных продуктов широко развиласьеще одна. Продажи программных продуктов числятся сотнями тысяч и дажемиллионами. Целые мощные пакеты можно приобрести по цене меньшей, чемстоимость оплаты одного рабочего дня программиста. Эти две отрасли во многомразличны и существуют параллельно.

Классическая программная индустрия. В 1975 году программная индустрияимела несколько отдельных и до некоторой степени различных составных частей,существующих по сей день:

- Производители компьютеров, поставляющие также операционные системы,компиляторы и утилиты для своих продуктов.

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

- Разработчики заказных программ, работающие по контракту спользователем. Многие из этих подрядчиков специализируются на приложенияхдля военной сферы, где требования, стандарты и маркетинговые процедуры носятспецифический характер.

- Разработчики коммерческих пакетов, в то время разрабатывавшие, восновном, большие приложения для специфических рынков, такие как пакетыстатистического анализа и автоматического проектирования.

Том Демарко отмечает фрагментацию классической индустрии разработкипрограммного обеспечения, особенно в части пользователей приложений:

Я не ожидал, что эта область распадется на отдельные ниши. Приемыработы в большей степени определяются нишей, чем использованием общихметодов анализа систем, языков программирования и технологий тестирования.Ada был последним из языков общего назначения, и он стал языков ниши.

В нише обычных коммерческих приложений значительный вклад сделанязыками четвертого поколения (4GL). Бем пишет, что "наиболее удачные из 4GLявились результатом написания какой-либо части области приложений на языкеопций и параметров". Наиболее широко распространенными из этих 4GL являютсягенераторы приложений и комбинированные пакеты баз данных и связи с языкамизапросов.

Миры операционных систем объединились. В 1975 году было изобилиоперационных систем - у каждого производителя компьютеров была, по крайнеймере, одна патентованная операционная система для каждой производственнойсерии, а часто и две. Насколько изменилось положение сегодня! Лозунгом днястали открытые системы, и осталось лишь пять главных операционных сред, длякоторых создаются пакеты приложений (в хронологическом порядке):

- IBM MVS и VM

- DEC VMS

- Unix в том или ином варианте

- IBM PC, будь то DOS, OS/2 или Windows

- Apple Macintosh.

Индустрия коробочных продуктов. Экономические законы для разработчиковв этой отрасли совершенно отличны от тех, которые действуют в классическойиндустрии: стоимость разработки нужно делить на большое количествоэкземпляров, расходы на упаковку и маркетинг высоки. В классическойиндустрии при внутрифирменной разработке график работ и набор функций моглибыть изменены, в отличие от стоимости разработки. На открытом рынке жесткойконкуренции сроки и функциональность полностью доминируют над затратами наразработку.

Как и следовало ожидать, столь различные экономические требованияпородили весьма различающиеся культуры программирования. В классическойиндустрии лидирующее положение заняли крупные фирмы с установившимисястилями управления и культурой работы. В коробочной индустрии, напротив,возникли сотни начинающих фирм, ничем не связанных и сосредоточенных наконечной цели, а не на процессе. В такой атмосфере талант отдельногопрограммиста всегда ценится значительно выше, и существует подспудноеощущение, что выдающиеся проекты создаются выдающимися архитекторами. Вовновь возникшей культуре есть возможность вознаграждать "звезд"соответственно их вкладу. В классической индустрии социальная политика фирми их принципы оплаты труда всегда это затрудняли. Неудивительно поэтому, чтомногие звезды нового поколения были втянуты в орбиту пакетной индустрии.

Покупай и создавай: коробочные продукты в качестве компонентов Радикально улучшить устойчивость программных продуктов и производительностьтруда при их создании можно, лишь поднявшись на один уровень и изготавливаяпрограммы из модулей или объектов. Особенно многообещающей тенденциейстановится использование рыночных пакетов в качестве платформ, на которыхсоздаются более богатые и специализированные продукты. Система управлениядвижением грузовиков создается с помощью коробочной базы данных икоммуникационного пакета, также как и информационная система для студентов.Объявления в журналах предлагают сотни стеков для Hypercard,специализированных шаблонов для Excel, десятки специальных функций на Pascalдля MiniCad или функций на AutoLisp для AutoCad.

Метапрограммирование. Стеки для Hypercard, специализированные шаблоныдля Excel, функции для MiniCad часто называют метапрограммированием,созданием нового слоя, приспосабливающего функции к нуждам определеннойгруппы пользователей пакета. Идея метапрограммирования не нова, онавернулась и получила свое название. В начале 60-х многие производителикомпьютеров и вычислительные центры больших информационно-управляющих системобразовывали небольшие группы специалистов, создававших целые языкиприкладного программирования с помощью макросов, написанных на ассемблере. Ввычислительном центре Eastman Kodak был создан язык прикладногопрограммирования на базе макроассемблера для IBM 7080. Аналогично, втелекоммуникационной программе Queued Telecommunications Access Method дляIBM OS/360 можно было на многих страницах кода, написанного предположительнона языке макроассемблера, не найти ни одной команды машинного уровня. Сейчасблоки, создаваемые метапрограммистом, значительно больше, чем тогдашниемакроопределения. Такое развитие вторичного рынка очень обнадеживает: покамы ждали возникновения активного рынка классов C++, незаметно возник рынокметапрограмм многократного использования.

Это действительно наступление на сущность. Поскольку на среднегопрограммиста информационно-управляющих систем феномен разработки на основепакетов еще не оказал воздействия, он пока не очень замечаем программнойинженерией. Тем не менее, это направление будет быстро развиваться,поскольку затрагивает сущность моделирования концептуальных конструкций.Коробочный пакет предоставляет большой функциональный модуль со сложным, ноточным интерфейсом, а его внутреннюю концептуальную структуру вовсе нетребуется проектировать. Программные продукты с функциями высокого уровня,такие как Excel и 4th Dimension, действительно являются большими модулями,но служат понятными, документированными, отлаженными модулями, с помощьюкоторых можно создавать заказные системы. Разработчики приложений следующегоуровня получают богатство функций, сокращение времени разработки, отлаженныекомпоненты, улучшенную документацию и резко сниженную цену.

Сложность, конечно, в том, что коробочные пакеты разработаны каксамостоятельные объекты, функции и интерфейсы которых метапрограммисты немогут изменить. Кроме того, более существенно то, что разработчикикоробочных пакетов, кажется, не слишком стремятся сделать свои продуктыпригодными в качестве модулей более крупных систем. Думаю, что такоепонимание неверно, и существует неудовлетворенный рынок для пакетов,способствующих использованию метапрограммирования.

Так что же требуется? Можно выделить четыре уровня пользователейкоробочных продуктов:

- Пользователь как таковой, просто использующий приложение иудовлетворенный функциями и интерфейсом, предоставленными разработчиками.

- Метапрограммист, строящий шаблоны и функции поверх отдельногоприложения с использованием имеющихся интерфейсов, главным образом, дляобеспечения труда конечного пользователя.

- Разработчик внешних функций, вводящий в приложение дополнительныефункции. Это, по сути, новые примитивы языка прикладного программирования,обращающиеся к отдельным модулям, написанным на языке общего назначения.Необходима возможность интерфейса этих новых функций с приложением черезперехватываемые команды, обратные вызовы или перегружаемые функции.

- Метапрограммист, использующий одно и, в особенности, несколькоприложений в качестве компонентов более крупной системы. Это пользователь,чьи нужды сегодня слабо удовлетворяются. Это тот вид использования, которыйобещает наибольший рост производительности при создании новых приложений.

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

Большие возможности дало бы наличие языка сценариев для управлениявзаимодействием приложений, входящих в ансамбль. Такого рода функции впервыепредоставила Unix с помощью каналов и стандарта файлов в форматеASCII-строк. Сегодня неплохим решением является AppleScript.