Технология программирования в области науко-ориентированных
приложений с необходимостью должна быть (и есть) интерактивной и итерационной.
В современной же теории программирования из абстрактных соображений и с
привлечением опыта коллективного создания приложений массового потребления,
предложно несколько типовых схем программирования: сверху-вниз (восходящая
реализация) и снизу-вверх (нисходящая реализация) с конструктивным, архитектурным
и классическим подходами в зависимости от направления обхода мифического
дерева несозданной программы. При этом провозглашается, что спецификация
структуры этого дерева может быть исчерпывающе определена еще на этапе
проектирования и в завершенном виде. Далее предполагается, что и семантика,
и формальная структура большинства составляющих модулей также может быть
исчерпывающе определена на последующих этапах. После этого становится возможным
формальная проверка правильности их семантики и структуры, с последующей
автоматической реализацией по принципу формальной генерации машинного кода,
требующего минимальной отладки. Своеобразным апофеозом этих теоретических
построений стало создание пресловутых CASE-технологий проектирования с
неимоверным по сложности методическим и инструментальным программным обеспечением,
единственной реальной заслугой которых является обеспечение занятости максимально
большего процента населения и пожизненного процветания лидеров этой части
населения.
Программирование.
В рассматриваемой же проблемной области упомянутые теоретические построения,
к сожалению, неприменимы, прежде всего, из-за принципиального отсутствия
возможности содержания массы исполнителей. Процесс создания программной
системы и ее отладки начинается с двух противоположенных уровней: верхнего
уровня диалоговой архитектуры и нижнего уровня основных базовых примитивов.
Далее этот процесс идет на встречных направлениях в проработке структуры
и модулей промежуточных уровней до тех пор, пока эти движения не смыкаются.
Периодически в этом встречном процессе возникают новые решения, которые
приводят к коррекции уже созданных компонентов верхнего, нижнего и промежуточных
уровней. Когда программное дерево уже отчетливо выкристаллизовалось, начинается
исследование его структуры с выделением функционально близких процедурных
ветвей, с их обобщением в форме библиотек самостоятельных инструментальных
средств, операционно-диалогово доступных пользователю подобно элементам
детского конструктора. Дерево преобразуется в граф - более компактный и
взаимосвязанный
Отладка.
Затем начинается процесс общей отладки в направлении отдельных вертикальных
ветвей программы, объединяющей в себе неразрывно как комплексную отладку
ветви, так и отладку отдельных модулей. При этом следует помнить, что,
безусловно, можно заставить интегрированную программу правильно реагировать
на осмысленные действия пользователя и на типичные ошибочные действия,
но никакая отладка не даст стопроцентную гарантию правильной реакции на
все необъятное множество неосмысленных действий пользователя.
Знаменитый мастер компьютерной литературы В.Э.Фигурнов
привел в этом плане блестящую аналогию с написанием самой простейшей инструкции
о том, как проехать к вашему дому, что только на первый взгляд кажется
очень простым делом. Если же подходить к делу тотально и пунктуально, то
окажется, что в этой инструкции следует упомянуть необозримое множество
возможных вариантов: а как решать задачу, если метро не ходит и в таксе
не содят, или клиент слишком пьян или же его по дороге догола раздели грабители,
или случилось ДТП, а около дома прокапали канаву или возник круговой оползень,
или лифт сломался, а лестница рухнула, или весь город в снежных заносах,
а бензоколонки пусты и т.п. и т.д. В правильной инструкции должно быть
отражено всё, но что же делать, если такую инструкцию забыли дома или ненароком
выбросили, или же читатель не знаком в большинством использованных в ней
терминов или не читает по-русски.
Особенности.
Отладка интегрированной программной системы осложняется еще и тем, что
число возможных комбинаций использования широчайшего множества ее возможностей
в совокупности с разнообразием обрабатываемых данных тотально необозримо.
Общепринятая для продукции массового спроса рассылка потребителям-тестировщикам
предварительных версий (альфа, бета и т.п.) здесь бессмысленна в связи
с крайне ограниченным кругом квалифицированных пользователей, да и они
полностью загружены своей собственной профессиональной деятельностью. Поэтому
на этапе предэксплуатационной отладки возможно протестировать лишь небольшую
часть комбинаторики возможных действий пользователя. Как показывает опыт,
эффекты неучтенной комбинаторики с убывающей интенсивностью продолжают
проявляться еще несколько лет после начала массовой эксплуатации системы,
поскольку большинство пользователей работает с достаточно ограниченным
подмножеством инструментария и многие средства долгое время остаются никем
не востребованными. Поэтому в данной области крайне важно сохранение преемственности
накопленного опыта, поскольку основные вычислительные алгоритмы, составляющие
основной объем программных систем, могут оставаться неизменными на протяжении
десятилетий, как и лежащие в их основе математические и аналитические методы.
Отладка в Windows.
В современных же операционных средах типа Windows отладка осложняется еще
и многими посторонними (демоническими) причинами: существованием множества
версий и множества конфигураций ОС, зависимостью ее работы от конкретной
комплектации оборудования и от числа и типа загруженных приложений, отсутствием
контроля за работой ОС со стороны приложения, недокументированностью многих
функций и режимов и пр. Тем самым эти среды представляют собой своеобразные
черные ящики, а их появление и развитие выше названо началом эры непознаваемого
силиконового разума.
Повторяемость и регулярность.
Рассмотренная технология программирования и отладки устойчиво независима
от используемой операционной среды и инструментальных средств, повторяема
и регулярна, а, следовательно, и имеет право быть объектом научного исследования.
Действительно, при переносе программы из одной среды в другую она воспроизводится
в своих основных составляющих, чему свидетельством имеющийся опыт: так
система CONAN первоначально была реализована на микро-ЭВМ PDP/11 в языке
ассемблер, затем перенесена в среду DOS на уникальном по возможностям интерпретаторе
BBCBASIC со встроенным ассемблером, а перенос в среду Windows состоялся
на компилирующем языке Object Pascal в оболочке Delphi. То же самое проявилось
и в истории статистического пакета STADIA, начавшего свое существование
в ассемблере супер-ЭВМ БЭСМ-6, затем и последовательно продолжилось в ОС
CPM (для ПК с процессорами Z80 и 6502) и DOS, с переходом в Windows. Этой
же технологии следовали в версиях для DOS интегрированный частотный анализатор
и контроллер процессов CONAN-t и система психологического тестирования
PSYTMAN, а также продукты из многих других областей наукоемкого приложения:
система программирования моделей принятия решений человеком ЯРД, модель
принятия решений летчиком на этапе приземления, модель принятия решений
диспетчером управления воздушным движением, система организации поведенческих
экспериментов ЭКСПО (все - для ОС Диспак), система обеспечения когнитивных
исследований TVEX с графическим редактором GRASP (ОС RT/11), графический
редактор-мультипликатор PEPSY для исследований зрительного восприятия (ОС
СР/М).
Принцип авторской разработки
Как отмечено выше, в области наукоемких приложений
оказывается неприемлемой (распространенная в индустрии ширпотреба) практика
привлечения больших творческо-исполнительских коллективов по следующим
основных причинам: практически полное отсутствие начального финансирования
проекта, крайняя узость круга потенциальных потребителей, определяющая
малую рентабельность на этапе реализации готовой продукции, необходимость
многолетнего изучения предметной области и компьютеризируемой деятельности.
По этим причинам здесь оказывается применим и эффективен старый принцип
авторской разработки, когда замысел, детализацию и реализацию проекта осуществляет
один человек.
Исторический обзор.
Этот принцип, как известно, был широко распространен в эпоху больших ЭВМ.
На этот счет (даже ограничиваясь только минимальным личным опытом) можно
привести десятки примеров создания мощных операционных и инструментальных
систем силами одного автора: А.И.Волков (автокод и компилятор Мадлен),
В.Ф.Тюрин (ОС Диспак — как результат коренной переработки и расширения
диспетчера Д-68, созданного Л.Н.Королевым и А.Н.Томилиным), В.М.Михелев
(СП Астра), В.П.Пильщиков (СП Пленнер), А.П.Кулаичев (СП ЯРД), П.Наур (транслятор
Алгола), Н.Вирт (транслятор Паскаля) и множество других. Многие примеры
подобного рода можно было наблюдать и в начале эры персональных компьютеров:
Richard Russell (интерпретатор BBCBASIC со встроенным компилятором ассемблера
i286), П.Нортон (первые версии NC), Е.М.Веселов (Лексикон для DOS), А.С.Паршин
(частотный анализатор FlexLab), И.А.Потапов (частотный анализатор ПОС),
А.В.Пироженко (ЭЭГ-анализатор Нейрокартограф). Попробуем разобраться, почему
же эта традиция стала угасать в последующем.
Причины и следствия.
Официальная парадигма на этот счет гласит: в современную эпоху сложность
и объемность программного обеспечения достигла такого уровня, что его создание
находится за рамками возможностей одного человека. Однако многие персональные
примеры принципиально противоречит этому популярному мифу. Действительно,
способен ли один средненький и презренный человечек удержать в памяти и
совершенствовать на протяжении десятилетий целых три программных системы,
находящиеся на уровне лучших мировых стандартов. Оказывается — может! И
как это часто бывает с официальными мифами, основная причина наблюдаемой
индустриализации предельно проста: программное обеспечение в эпоху ПК стало
продуктом массового потребления, приносящим колоссальные прибыли.Поэтому
в этом процессе быстро выросли и стали доминирующими крупные корпорации
с развитой рекламно-рыночной инфраструктурой, творцы же ПО были вытеснены
на последние роли и превратились в обычный расходный материал, а многие
талантливые одиночки были просто задавлены мощью массовой рекламной пропаганды.
Для надежного же искоренения контр-поползновений
был и придуман вышеуказанный миф. Социально престижным стало карьерное
продвижение по руководящим лестницам корпораций, а не каждодневные открытия
в программировании и эргономике, поскольку спрос на продукцию определяется
совсем не этими открытиями, а мощью, повсеместностью и массовой доходчивостью
рекламы. Жесткие условия конкурентного выживания стали определяться только
быстротой появления новых версий продукции. Архитектоника программных систем
перестала быть предметом научных интересов, что вызвало отток оттуда способных
теоретиков, а в условиях бурного развития и быстрой смены поколений вычислительных
систем научная мысль перестала успевать за жизнью и замкнулась в архаичных
теоретизированиях, пока не создалась ситуация, когда начинающий хакер знает
о современном компьютерном мире неизмеримо больше, чем академик (однако
обобщить и доступно изложить свой опыт хакер, к сожалению, не может — нет
у него для этого необходимой школы — то есть дисциплины мышления).
Отличия.
Возвращаясь от ретроспективного обзора на почву наукоемких приложений,
следует еще раз подчеркнуть принципиальное отличие этой области по следующим
четырем позициям:
а) большие коллективы разработчиков содержать не на что;
б) продукция заметной прибыли не приносит;
в) пользователи мало подвержены действию массовой рекламы;
г) основные реализуемые методы и методики устойчивы на
протяжении десятилетий;
д) вычислительные средства предельно сложны, поэтому для
своей реализации они требуют не хакерского, а научного мышления.
Выводы и доказательства.
Тем самым принцип авторской разработки в данной области является не только
возможным, но и необходимым, и он показал свою эффективность на серии наших
продуктов, занимающих видное место среди своих аналогов на протяжении более
десятка лет. Более того, этот принцип показал не только свою сопоставимость,
но и заметное преимущество перед методом коллективной разработки. Для подтверждения
достаточно взять следующие простые и сопоставимые примеры перевода продукта
из среды DOS в среду Windows: для статистического пакета STADIA основной
объем работ составил 0.7 человеко-года, для комплексной электрофизиологической
лаборатории CONANm — 0.9 человеко-года; для частотного анализатора-контроллера
CONANt — 0.3 человеко-года. Среди альтернатив мы не обладали средствами
проведения детальных исследований, поэтому можем привести только один известный
нам факт: над переводом в Windows популярного и достаточно простого редактора
Лексикон в течение 1.5—2 лет работала бригада из 8—12 программистов (оставим
для последующих исследователей сопоставление упомянутых продуктов по алгоритмической
и вычислительной сложности). При этом следует учитывать, что версии наших
произведений в среде DOS создавались с нулевого уровня, включая ассемблерную
реализацию диалога и графического вывода, управления памятью, драйверов
внешних устройств и целочисленной арифметики вычислительных процедур.
С другой стороны, и объем конечного авторского продукта получается
в 5—20 раз меньше по сравнению с индустриальными аналогами, особенно зарубежного
производства.
Таким образом, авторская разработка по сравнению
с индустриальной может выигрывать по производительности в 30 и более раз,
что достигается за счет:
1) исключения межличностных коммуникаций, связанных с
необходимостью порождения и изучения неисчислимой технологической документации:
документы управления разработкой ПС (process documentation: планы,
оценки, расписания; отчеты об использовании ресурсов; стандарты; рабочие
документы; заметки и переписка); пользовательская документация ПС (user
documentation: общее функциональное описание; руководство по инсталяции;
инструкция по применению; справочник по применению; руководство по управлению);
документация по сопровождению ПС (system documentation: внешнее описание;
описание архитектуры; внешние спецификации каждой программы и каждого модуля;
тексты модулей и программ; документы установления достоверности ПС; руководство
по сопровождению) и пр;
2) исключения работ:
а) по разбиению проекта на независимые
составляющие;
б) по распределению их между исполнителями;
в) по координации деятельности
исполнителей и контролю за их работой;
г) по комплексной отладке
взаимодействия составляющих и пр.
Следует подчеркнуть, что неимоверный объем
сопроводительной документации имеет своей иллюзорной целью обеспечить механическую
взаимозаменяемость исполнителей. В противовес этому, существует много примеров
того, что полное овладение одним человеком всеми деталями мощного программного
комплекса (включая ОС DOS и Windows) требует считанного числа месяцев (1—6)
посредством простого чтением десассемблированного кода программы. Но не
намного меньше времени требуется и для овладения даже одним модулем программного
комплекса новым исполнителем посредством передачи ему всей упомянутой информации.
Именно таким изучением текстов программ (а не посещением курсов и не чтением
технологической документации) и мы в своей практике овладевали мастерством
системной аналитики.