17.4.4.
Стиль программирования
В литературе
о программировании задач общего назначения часто обсуждается понятие "стиль
программирования". Существует огромное множество книг о том, как писать
программы, и кажется, что в них можно найти рекомендации на все случаи жизни.
Но эти рекомендации
слабо соотносятся со спецификой программирования задач искусственного интеллекта
и, в частности, систем, основанных на знаниях. Тот массив программ на языке
LISP, который накопился за многолетнюю практику применения этого языка в программировании
задач искусственного интеллекта, повергнет в ужас любого студента, проштудировавшего
классические труды по структурному программированию. В программах зачастую используются
нестандартные способы управления последовательностью выполнения операторов,
непредусмотренное никакими канонами динамическое связывание переменных и совершенно
"безответственные" манипуляции со структурами данных, такими как списки
свойств. Но в последние годы ситуация здесь значительно улучшилась (с точки
зрения приверженцев строго структурированного стиля оформления текста программы).
Чтобы убедиться в этом, сравните, например, обзоры [Winston and Horn, 1983]
и [Winston and Horn, 1981]. Как бы там ни было, но написать хорошую
программу на языке LISP — это искусство, которым владеют единицы, хотя тексты
большинства самых лучших программ искусственного интеллекта можно демонстрировать
студентам в качестве наглядного пособия, как не надо писать программы.
Но, к сожалению, более чем 25-летний опыт совершенствования стиля программирования на LISP не востребуется разработчиками новых языков и инструментальных сред. Для меня, например, остается загадкой, что же представляет собой хороший стиль программирования по отношению к языку (и среде) КЕЕ. Мне приходилось наблюдать, как инженеры по знаниям, много лет проработавшие с языками структурного программирования, буквально падали в обморок от мешанины подключения процедур, комбинированных методов и активных значений в КЕЕ-программах. Это не следует рассматривать как серьезную критику в адрес функциональных возможностей языка, а скорее как констатацию того факта, что любые сложные инструментальные средства нуждаются в адекватной методологии пользования ими. Единственным исключением, на мой взгляд, является язык OPS5, о методике использования которого написана прекрасная книга [Brownston et al, 1985].