ДРУЖЕЛЮБНОЕ ПРОГРАММИРОВАНИЕ
| Индустрии программирования необходимо чудо — чудо, которое воплотило бы в жизнь мечту о быстрой и легкой разработке программ. Том Мануэль |
ГИБРИДНЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ ДРАКОН-СИ
Предположим, нужно построить систему визуального программирования на гибридном языке ДРАКОН-СИ. Задачу можно решить, например, с помощью трех программ: дракон-редактора, дракон-конвертора и компилятора языка СИ. Пользователь с помощью дракон-редактора рисует на экране компьютера программу на языке ДРАКОН-СИ (рис. 90, правая графа). Затем дракон-конвертор преобразует внутреннее представление графических кодов в исходный текст языка СИ (рис. 90, средняя графа), после чего стандартный компилятор СИ превращает исходный текст в объектный код.
Чтобы лучше уяснить преимущества языка ДРАКОН-СИ, произведем мысленно обратное преобразование. Как видно из рис. 90, при преобразовании текстовой программы в визуальную исходный текст СИ-программы разбивается на две части. Операторы присваивания, условные выражения и декларативные описания почти без изменения переносятся в визуальную программу и размещаются внутри ее икон. Остальные текстоэлементы языка СИ (которые можно назвать удаляемыми или “паразитными”) становятся ненужными, превращаясь в графические линии и ключевые слова “да” и “нет” (yes и no). Рисунок 90 показывает, что список паразитных (удаляемых) элементов языка СИ оказывается внушительным: он включает все ключевые слова в примерах 1—7 кроме default, все фигурные, круглые и косые скобки, двоеточия, метки, комментарии в примерах 3—5, и кроме того, точки с запятой в примерах 2, 3, 7 и отчасти 6.
Таким образом, чтобы построить язык ДРАКОН-СИ, надо по определенным правилам соединить визуальный синтаксис ДРАКОНА с текстовым синтаксисом языка СИ, удалив из последнего все элементы, функции которых реализуются визуальными операторами ДРАКОНА. Пара языков СИ и ДРАКОН-СИ эквивалентна в том смысле, что может быть построен конвертор, выполняющий как прямое, так и обратное преобразование. Такой конвертор может превращать исходный текст программы на языке ДРАКОН-СИ (рис. 90, правая графа) в эквивалентную СИ-программу (рис. 90, средняя графа), и наоборот.
Создание любого гибридного языка (например, ДРАКОН-СИ) вряд ли стоит считать оригинальной разработкой, так как последний почти полностью сохраняет концепцию, структуру, типы данных и другие особенности исходного языка (СИ). Правильнее говорить о том, что построение гибридного языка (ДРАКОН-СИ) есть технический прием, при котором в строго определенном числе случаев текстовая нотация исходного языка заменяется на визуальную. Однако этот технический прием позволяет существенно улучшить эргономический облик исходного языка.
ГИБРИДНЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ
ДРАКОН-МОДУЛА
Обратимся к верхнему примеру на рис. 91. В средней графе представлена программа на языке МОДУЛА-2, в правой — эквивалентная ей программа на языке ДРАКОН-МОДУЛА. В левой графе приводится список ключевых слов, которые используются в модула-программе и являются “жизненно необходимыми” для языка МОДУЛА, но которые совершенно не нужны в дракон-программе.
С эргономической точки зрения, эти и многие другие ключевые слова, присутствующие в текстовых языках, есть не что иное как визуальные помехи, притягивающие к себе внимание читателя и отвлекающие его внимание от содержательной стороны дела. Эргономическое преимущество ДРАКОНА состоит в том, что вместо ключевых слов используется визуальный образ, который воспринимается читателем бессознательно, на интуитивном уровне, в то время как канал сознательного внимания действует более продуктивно — для восприятия наиболее важных, содержательных аспектов задачи.
ПРИМЕР ЭРГОНОМИЧЕСКОЙ ОПТИМИЗАЦИИ
ПРОГРАММЫ
На рис. 91 (внизу, в средней графе) написана программа на языке ПАСКАЛЬ. Действуя по аналогии с предыдущими примерами, ее можно легко преобразовать в программу на языке ДРАКОН-ПАСКАЛЬ. Для этого нарисуем визуальный оператор “развилка” и в иконе “вопрос” поместим запись
Нижний выход иконы “вопрос” пометим словом “да” и присоединим к нему переключатель с двумя иконами “вариант”, а правый выход (ответ “нет”) подключим к иконе “вывод”, в которой сверху напишем WRITELN, снизу — ОШИБКА. В итоге получим дракон-схему, которая несомненно является совершенно правильным решением поставленной задачи. (Для наглядности советуем читателю выполнить описанные построения на бумаге.)
А теперь изменим условие задачи. Попытаемся создать программу, которая была бы не только эквивалентной паскаль-программе на рис. 91, но и эргономически оптимальной для русскоязычного читателя. Искомая программа, написанная на языке ДРАКОН-2, представлена на том же рисунке внизу справа.
Бросается в глаза структурное различие между программами. Паскаль-программа содержит две конструкции: if-then-else и case-of. Эргономическая оптимизация состоит в том, что в дракон-программе используется всего один визуальный оператор (переключатель с тремя вариантами), который тем не менее “в одиночку” выполняет те же самые функции, что и два текстовых оператора языка ПАСКАЛЬ. В итоге сложное условие K = 1 OR K = 2 и другие излишества паскаль-программы устраняются, а дракон-схема заметно упрощается и становится лаконичной, прозрачной, элегантной.
ДИАЛОГОВЫЕ ПРОГРАММЫ
Продолжим изложение одного из возможных подходов к построению языка программирования ДРАКОН-2. Еще раз напомним: читатель не найдет здесь описания языка. Наша цель гораздо скромнее: показать, что формализация текстового синтаксиса для языка ДРАКОН вполне осуществима, и привести несколько примеров, подтверждающих эту мысль.
Рассмотрим диалоговые программы на рис. 92 и 93, имеющие улучшенные дидактические (педагогические) характеристики. Для этого применяется обширный набор эргономических средств. В частности, при заполнении иконы “комментарий” используется зонирование текста. Текст комментария для облегчения восприятия пространственно делится на две зоны, которые, во-первых, имеют четко очерченные и легко различимые границы, во-вторых, отличаются по цвету фона (белый и серый). В серой зоне помещается текст, появляющийся на экране компьютера, в белой — пояснения к нему. Отграничение экранного текста от пояснений облегчает чтение комментариев и улучшает их понимаемость.
Эргономический прием “зонирование текста” полезно использовать не только в комментариях, но и в других случаях, например в операторах ввода-вывода.
Оператор “Сообщение”
Оператор “Сообщение” служит для вывода информации на экран компьютера. Он содержит икону “вывод”, на верхнем этаже которой помещают ключевое слово “Сообщение”, на нижнем — выводимую информацию. При описании последней применяется зонирование текста: в серой зоне пишут имена переменных или выражения (значения которых следует вывести на экран), в белой зоне — постоянную информацию (которая выводится на экран без изменений). Признаком новой строки служит черный кружок. Например, на рис. 92 с помощью оператора “Сообщение” на экран выводится фраза “Сумма чисел равна” и значение выражения m + n.
Оператор “Запрос”
Оператор “Запрос” осуществляет ввод в компьютер значений переменных, вывод на экран постоянной информации, имен переменных и введенных значений. В верхней части иконы “ввод” пишут ключевое слово “Запрос”, в нижней — вводимую и выводимую информацию. Здесь также присутствует зонирование текста: в серой зоне указывают имена переменных, подлежащих вводу в компьютер, в белой — помещают постоянную информацию.
Предположим, нужно ввести значения m = 23 и n = 45 (рис. 92). Делается это, например, так: подводят курсор в зону m, набирают на клавиатуре число 23 и нажимают клавишу “возврат каретки”. При этом зона m на экране гаснет и вместо нее загорается число 23. Значение n вводится аналогично. Таким образом, оператор “Запрос” запрашивает у пользователя значения переменных, записывает их в память и одновременно отображает на экране вместе с постоянной информацией (если последняя указана на нижнем этаже оператора “Запрос” в белой зоне).
Описание данных
Для описания данных служит икона “полка”. На верхнем этаже пишут ключевое слово “Данные”, на нижнем — описание данных. Например, на рис. 92 в иконе “полка” указано, что переменные m и n имеют тип “целый”.
Можно предложить и другой способ: описание данных выносят за рамки дракон-схемы и помещают в отдельную таблицу.
ИДЕНТИФИКАТОРЫ
Приведем правила записи идентификаторов.
- Длина идентификатора 1...32 символа.
- Разрешается использовать любые русские и латинские буквы, цифры, точку и, возможно, специальные символы.
- Первый символ должен быть буквой (не цифрой и не точкой).
- Внутри идентификатора запрещается использовать пробелы.
- Слова следует разделять точками, чтобы облегчить чтение.
- Запрещается использовать сокращение слов, если длина идентификатора меньше 32 символов.
- Если длина идентификатора больше 32 символов, надо заменить некоторые слова сокращениями или уменьшить число слов.
- Нужно стремиться придумывать доходчивые идентификаторы, позволяющие легко уяснить смысл понятия, чтобы читатель быстро понял суть дела.
Примеры правильных идентификаторов
Номер.вагона.скорого.поезда
Номер.вагона.пассажир.поезда
Цена.билета.поездом.до.Магадана
Цена.билета.самолет.до.Магадана
Примеры неправильных идентификаторов
Номер.вагона.пассажирского.поезда | (здесь 33 символа, а можно не более 32) |
Число.вагонов товарного поезда | (используются пробелы) |
3-й.запуск.аварийного.насоса | (здесь две ошибки: первый символ — цифра; кроме того, есть дефис) |
Пример сокращения длины сложного понятия
Предположим, нужно создать идентификатор для следующего понятия: “Радиус-вектор центра Земли в центре взлетно-посадочной полосы в посадочной системе координат”. Словесное описание понятия содержит 92 символа. Задача состоит в том, чтобы сократить 92-символьное описание до 32-символьного, сохранив по возможности ясный смысл понятия.
Сокращение проведем по следующему плану:
- “Радиус-вектор центра Земли” заменим на “Радиус.земли”.
- Вместо “В центре взлетно-посадочной полосы” напишем “на.полосе”.
- “В посадочной системе координат” заменим на ПСК, поскольку такое сокращение является общеупотребительным в коллективе разработчиков данной системы.
В итоге получим 26-символьный идентификатор
Радиус.земли.на.полосе.ПСК |
который сохраняет почти все опорные слова исходного понятия и обеспечивает довольно высокую понимаемость.
Правила записи арифметических выраженийв операторах присваивания
Следует различать два случая. Если выражение простое, рекомендуется использовать 32-символьные идентификаторы и “вертикальную” запись математических формул, как показано на рис. 94 и 95.
Однако если речь идет о сложных математических вычислениях, описанный способ не годится, поскольку “вертикальные” формулы с 32-символьными идентификаторами не позволяют читателю увидеть математическую структуру вычислений, отвлекая его внимание на чтение длинных идентификаторов, которые парадоксальным образом превращаются из полезной подсказки в свою противоположность и начинают играть негативную роль визуальной помехи. Таким образом, возникает эргономический тупик: короткие идентификаторы не позволяют быстро уяснить смысл понятий, а длинные — затемняют структуру сложных формул.
В качестве одного из возможных подходов к развязыванию этого гордиева узла можно предложить план из трех пунктов.
- Для каждого математического понятия предусматриваются два идентификатора: длинный (32-символьный) и короткий (алиас).
- В арифметических выражениях используются только алиасы, что делает структуру формул прозрачной.
- В начале программы предусматривается икона “комментарий”, в которой размещается таблица соответствий между алиасами и длинными идентификаторами. Эта таблица играет роль шпаргалки, которая находится в одном поле зрения с операторами присваивания и позволяет быстро вспомнить, что означает тот или иной алиас.
ОБРАБОТКА МАССИВОВ
На рис. 94 и 95 даны примеры программ, в которых имеются операции с массивами.
Описание данных размещается на нижнем этаже иконы “полка”.
Запись | МАССИВ ВЕЩ Вес.кролика 100 |
означает, что задан одномерный массив с именем “Вес.кролика”, содержащий 100 элементов, каждый из которых является вещественным числом.
Основным элементом обеих программ служит цикл ДЛЯ. Рассмотрим правила оформления цикла. В иконе “начало цикла ДЛЯ” в верхней строке пишут слово “Цикл” и после пробела односимвольный алиас, обозначающий переменную цикла (буква k на рис. 94, 95). В нижней строке указывают диапазон ее изменения, например,
Но что обозначает буква k? Каков физический смысл переменной цикла в данной прикладной программе? Авторы многих программ забывают (или не считают нужным) ответить на этот вопрос, в результате чего программа нередко превращается в ребус. Чтобы этого не случилось, в средней строке следует написать формализованный комментарий, например
k ≡ Номер.кроличьей.клетки |
Знак тождественного равенства ≡ показывает, что после него следует имя-комментарий, т. е. комментарий, который пишется по правилам записи идентификаторов.
Эргономический “навар” формализованного комментария включает два преимущества. Во-первых, он позволяет устранить традиционную “забывчивость” программистов и по-человечески объяснить читателю смысл абстрактного идентификатора: дескать, k — это номер кроличьей клетки. Во-вторых, что немаловажно, объяснение размещается на поле чертежа именно там, где нужно (в иконе “начало цикла ДЛЯ”), по принципу “дорого яичко ко Христову дню”. Это значит, что читатель получает ответ моментально — в ту самую секунду, когда он впервые увидел алиас k и в его голове забрезжил вопрос: а что такое k?
В иконе “конец цикла ДЛЯ” делают запись
Конец цикла (переменная цикла) |
Смысл операторов, организующих обработку массивов, ясен из рис. 94 и 95 и не требует пояснений.
АБСТРАКТНЫЕ ДРАКОН-СХЕМЫ
В этом параграфе мы рассмотрим преобразование визуальной программы на языке ДРАКОН-2 в текстовую программу на БЕЙСИКе. Это преобразование полезно в двух отношениях: оно позволит глубже уяснить суть визуализации и познакомиться с важным понятием абстрактной дракон-схемы.
В качестве примера возьмем школьную программу под названием “Игра.угадайка” и напишем ее на языке ДРАКОН-2 (рис. 96). Затем полностью устраним из нее текст и получим чертеж-слепыш, который называется “абстрактная дракон-схема” (рис. 97). Эта схема представляет собой инвариант программы, который можно за два шага преобразовать в программу на любом языке программирования.
Выберем в качестве цели язык БЕЙСИК и приступим к делу. На первом шаге заполним пустые иконы абстрактной схемы текстом на языке БЕЙСИК. В результате получится эквивалентная программа на языке ДРАКОН-БЕЙСИК (рис. 98). На втором шаге переходим к обычной бейсик-программе (мы сознательно выбрали старомодную версию БЕЙСИКа, чтобы для разнообразия продемонстрировать использование операторов goto при описании эквивалента дракон-программы) — см. рис. 99.
ФИЛОСОФИЯ ЯЗЫКА ДРАКОН
Любой императивный язык (СИ, ПАСКАЛЬ, АДА, МОДУЛА, БЕЙСИК и т. д.) можно разбить на три части, три относительно самостоятельных языка: маршрутный, командный и декларативный.
Маршрутный язык — совокупность управляющих операторов. Командный язык содержит все неуправляющие операторы, например оператор присваивания, правила записи арифметических и логических выражений, идентификаторов, ключевые слова и т. д. Декларативный язык служит для описания данных, классов и др.
Поясним сказанное на примере. Абстрактная дракон-схема, приведенная на рис. 97, есть некоторая “фраза” маршрутного языка. Чтобы сделать ее содержательной, внутри икон следует поместить текст. Этот текст пишется на командном языке. Однако описания данных и классов иногда целесообразно вынести за рамки дракон-схемы и поместить их где-нибудь в другом месте, например, в виде отдельной записи или таблицы.
Отсюда вытекает принцип разграничения трех подъязыков. Маршрутный язык — это язык “картинок” (абстрактных дракон-схем, в которых полностью отсутствует текст). Командный язык служит для записи текста внутри дракон-схемы, декларативный — для тех записей, которые можно вынести за ее пределы.
Конструируя очередной язык дракон-семейства, можно выбирать командный и декларативный подъязыки любым способом (заимствуя из других языков или выдумывая заново). Благодаря этому обеспечивается богатство возможностей ДРАКОНА и гибкая настройка на различные приложения. Таким образом, дракон-семейство имеет только одно жесткое звено — маршрутный язык, который есть не что иное, как визуальные компоненты ДРАКОНА (визуальный синтаксис и семантика).
Маршрутный язык — это визуальный стандарт дракон-семейства, поддерживаемый визуальным дракон-редактором (см. гл. 14), который имеет небольшие размеры и легко запоминается. Он является неизменной визитной карточкой ДРАКОНА, его стандартизованным зрительным образом (рис. 97).
КЛАССИФИКАЦИЯ ЗНАНИЙ
Любая программа есть некоторая сумма знаний, которую можно расчленить на императивную и декларативную часть. Изложенные выше соображения позволяют уточнить этот тезис. Новый взгляд на проблему представлен на рис. 100 и сводится к следующему:
- Для анализа знаний, содержащихся в исходном тексте компьютерной программы, написанной на императивном языке, целесообразно использовать две классификации: базовую и альтернативную./li>
- Базовая классификация состоит в том, что все знания, содержащиеся в исходной программе, разбиваются на императивные и декларативные.
- В свою очередь императивные знания делятся на управляющие и командные.
- В качестве критерия для альтернативной классификации предлагается вопрос: какие средства лучше использовать для представления знаний — графику или текст?
- Ответ состоит в следующем. Для представления управляющих знаний лучше применять графику (маршрутный язык), для командных и декларативных знаний — текст.
- Таким образом, при альтернативной классификации знания делятся на визуальные (управляющие) и текстовые (командные и декларативные).
Напоследок добавим: использование текста для представления сложных управляющих знаний выглядит столь же нелепо, как попытка описать географическую карту словами. Тот факт, что текст все еще применяется для этой цели, можно объяснить только одним: программирование намного моложе географии!
ВЫВОДЫ
- Если в нашем распоряжении имеется формальный визуальный синтаксис, то для построения визуального языка программирования достаточно построить формальный текстовый синтаксис. Мы убедились, что эта задача вполне разрешима, причем несколькими способами. В итоге образуется семейство языков программирования как оригинальных (ДРАКОН-2), так и гибридных (ДРАКОН-СИ, ДРАКОН-МОДУЛА, ДРАКОН-ПАСКАЛЬ, ДРАКОН-БЕЙСИК и т. д.).
- Можно утверждать, что понимаемость визуальных языков существенно выше, чем понимаемость их текстовых собратьев. Поэтому во всех случаях, когда понимаемость рассматривается как главный критерий качества программ (а таких случаев немало), визуальные языки оказываются вне конкуренции. Здесь уместна оговорка: сам по себе термин “визуальный” ничего не гарантирует. Успех дела достигается за счет тщательного и скрупулезного применения методов науки о человеческих факторах (эргономики). Если говорить точнее, речь идет о синтезе методов информатики и эргономики, формировании нового междисциплинарного направления — инфоэргономики, перестройке всего здания современного программирования на эргономической основе.
- Создание любого языка программирования следующего поколения должно начинаться с анализа эргономических требований и заканчиваться оценкой полученных эргономических характеристик языка. Одно из основных препятствий для реализации этого плана состоит в инерции мышления многих специалистов, недооценке важности эргономических методов. Чтобы изменить сложившиеся стереотипы мышления, нужно внести серьезные изменения в программу и методы преподавания информатики в школе и вузе.
Comments (0)
You don't have permission to comment on this page.