Computerworld, США

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

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

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

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

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

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

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

«Вы формируете высокоуровневое описание своего приложения, а моя программа адаптирует алгоритм для вашего приложения», — поясняет он.

Новак намеревается расширить систему, чтобы иметь возможность строить более масштабные программы и в конечном счете превратить ее в коммерческий продукт.

«Я надеюсь повысить уровень программирования и от написания кода перейти к работе в терминах абстракций, таких как физические или финансовые модели», — говорит он.

Дуглас Смит, ведущий научный сотрудник некоммерческой исследовательской организации Kestrel Institute, разрабатывает инструменты для «автоматизации представления знаний и помещения их в компьютер». Система, созданная в Kestrel, работает с двумя видами знаний: навыками программистов и применяемыми ими методиками (относящимися, к примеру, к алгоритмам и структурам данных), а также сведениями о предметной области, которыми располагает конечный пользователь.

Программист описывает будущую систему на Specware, многоцелевом языке пятого поколения, на котором определяются функции программы безотносительно к конкретному языку программирования, архитектуре системы, алгоритмам, структурам данных и т. д. Specware обращается к библиотеке компонентов, но и эти компоненты не являются кодом. Они находятся на более высоком уровне и содержат знания о проектировании и принципы построения алгоритмов, структур данных и др. Смит предпочитает называть их «абстрактными шаблонами».

Кроме того, Specware позволяет доказать «правильность» рабочего кода, то есть его соответствие требованиям пользователя (которые, конечно, могут содержать ошибки).

«Целому ряду заказчиков это нужно при разработке высоконадежных приложений, для которых недопустима малейшая угроза безопасности», — говорит Смит. Kestrel Institute выполняет заказы NASA, спецслужб и военных.

Specware, по существу, является инструментом повышения производительности труда программистов, позволяя увеличить ее в несколько раз. Но у Kestrel есть и еще более высокоуровневый язык под названием Planware, предназначенный для определенной предметной области, для приложений планирования. Смит говорит, что специалисты ВВС США, которые знают все о самолетах, взлетно-посадочных полосах и авиабазах, но не разбираются в программном обеспечении, использовали его для создания системы планирования полетов.

«Это язык для записи требований, высокоуровневое описание решения без конкретизации деталей, — говорит Смит. — Мы считаем, что это передний край в программировании. Именно этим занимаются системные аналитики».

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


Уровни программного кода

«Вся история программирования была продвижением к языкам все более высокого уровня — машинный код, ассемблер, макрокод, Фортран, Java и т. д., и мы находимся на переднем крае этого процесса», — уверен Дуглас Смит, ведущий научный сотрудник Kestrel Institute. Чем дальше продвигается по этой цепочке программист, тем короче становятся его программы, и тем меньше он должен знать об алгоритмах, структурах данных и аппаратных средствах. Когда Kestrel и ВВС США разрабатывали приложение для планирования полетов, аналитики подсчитали, что одна строка программы на Planware соответствует примерно 17 строкам кода Specware, 74 строкам кода Lisp и 189 строкам на языке Ассемблера