Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность/Надёжность
Безусловно, ДРАКОН-визуализация отличается от традиционной визуализации потоков управления блок-схемами. Сам Паронджанов указал на это следующим образом:
«Задача формализации и унификации множества профессиональных языков с целью обеспечить эффективное взаимопонимание между специалистами любых профессий, включая программистов, является, хоть и важной, но, увы, неразрешимой. Положение в корне меняется, если ограничиться императивными профессиональными знаниями. Именно эту задачу решает язык ДРАКОН. Он построен путём формализации, неклассической структуризации и эргономизации блок-схем алгоритмов и программ, описанных в стандартах ГОСТ 19.701-90 и ISO5807-85.» (Паронджанов В.Д. Как улучшить работу ума, с. 36)
Как же решалась эта задача? Ключевой была следующая идея. Дракон-схему (граф маршрутов алгоритма) можно вывести путём исчисления над алфавитом подграфов-атомов из аксиомы-заготовки. Атомы образуются из алфавита вершин-[псевдо]операторов и словаря подграфов-макро[псевдо]операторов, представляющих понятия предметной области языка.
Исчисление, разработанное для ДРАКОНа, называется шампур-методом. Оно основано на следующих принципах:
В нелинейном подграфе имеется две и более осей следования.
Вход и выход атома представлены рёбрами ввода, между которыми располагается смысловая часть — так сказать, «ядро». Оно м.б. единственной вершиной или также подграфом (для сводимых графов - типа ветвления или цикла). Во втором случае рёбра ввода также м.б. в «ядре» атома.
Шампур-схема, не использующая соединители, называется «примитивом» и в общем случае может содержать пересечения цепей. Силуэт и примитив служат формами организации схемы на плоскости-диосцене, альтернативными в шампур-методе. Силуэтная укладка также даёт возможность структуризации содержания схемы.
При лианном выводе может получиться лианный, а в силуэте - также и адресный макроблок (см. Паронджанов В.Д. Как улучшить работу ума. Алгоритмы без программистов - это очень просто! М.: Дело, 2001. — С. 259-261.) Также может получиться и структура, выводимая вложением (Паронджанов называет этот тип макроблока структурным; можно также атомарным).
На базе этих принципов определены правила вывода схем как теорем исчисления из выбранной аксиомы-заготовки в лексике атомов.
Как можно сказать проще? Шампур-метод даёт возможность строить «слепыш» алгоритма так, как мы выводим формулы в булевой алгебре. Только вместо букв - подграфы. И сами формулы имеют вид графов (для ДРАКОНа - схем маршрутов алгоритма). В основе метода — небольшое число базовых принципов:
Лианы можно пересадить и так, что получится то же самое, что можно получить и вводом атома; конечно, это не имеет особого смысла.
Смысл сказанного можно раскрыть через «формулу новизны», как это и принято для официального описания существа изобретений. Напомним, что она имеет вид: «<Предлагаемый сабж> отличается от <такого-то существующего сабжа> тем, что имеет <такие-то новые фичи> и/или <такие-то фичи>, имевшиеся в <существующем сабже>, здесь реализованы с <такими-то отличиями>».
Здесь можно сказать, что техноязык отличается от языка, заданного стандартами на блок-схемы (далее - БС), тем, что:
Можно раскрыть эти отличия (а также сходства, оставшиеся с БС) и одновременно оценить шампур-метод (далее - ШМ) и язык, возможности его развития.
Каждый пункт списка будет раскрыт в самостоятельном разделе — по сути, получится цикл статей (на общей странице сайта).
Предварительно следует сказать кое-что и о понимании сути визуализации и вообще формализации. Удобно это сделать в связи с «исправлением имён» шампур-метода. Так, здесь мы не говорим об иконах. Тому две причины. Во-первых, такое название как краткий синоним для пиктограммы пришло из культуры в религиозном смысле протестантской (антикатолически-реформатской ветви западного христианства) — представленной прежде всего носителями английского и немецкого языка. Там иконы как предмет культа не приняты, и это слово сакрального смысла, в сущности, не имеет. Носители русского языка существенно разноконфессиональны, и восточное христианство (в частности, русское православие) вводит иконы как предмет культа и сакрализует это слово. На возможный конфликт его «мирского» употребления с чувствами соответственно верующих (которые м.б. и сочинителями, и читателями описаний на техноязыке) указал Д.В. Барановский — один из практиков дракон-визуализации — см. здесь.
Это тем более существенно, что христианин в некотором смысле может рассматривать формализацию мира (и дракон-визуализацию в частности), особенно неограниченную и касающуюся человеческого поведения, как продолжение «познания добра и зла»… и тогда противоречие словоупотребления и убеждений станет серьёзным (хотя здесь оно будет касаться скорее сущностной стороны — в частности, возможного использования техноязыка для посягательства на свободу воли и попытки игнорировать неполноту формализуемого знания в виде неопределённости, присутствующей в любой модели или в контексте моделирования и сказывающейся в её реализации на практике).
Во-вторых, у автора языка «икона» понимается как визуальный оператор. Но не любая конструкция визуального языка (и вообще ЯПЗ) может считаться оператором.
В силу всего сказанного, мы называем вершины, имеющие операторный смысл, виопами (от ВИзуальный ОПератор), а не имеющие такого смысла (или в общем смысле) — просто вершинами.
Далее мы будем широко пользоваться приёмами структурного анализа и синтеза. Проще говоря, это умение подразделять данный предмет (в частности, воображаемый) на относительно самостоятельные части, которые можно рассматривать независимо, и выделять связи частей. И определять такие части, из которых можно собрать (используя связи) заданный предмет так, что он приобретёт нужные свойства (в частности, за счёт интегрального эффекта связывания).
Структурируя схемы, естественно пользоваться понятием позиции. Как «белого ящика», содержащего часть схемы (её элемент — вершину или ребро, фрагмент, законченную конструкцию) и имеющего связи с остальной частью схемы. Позиций на схеме можно определить много. Но полностью схема не может состоять из них — должны оставаться по крайней мере связи. Их положение и присоединение к позициям задают «каркас» строения схемы как результат структурного анализа. А если определить некие операторы управления вхождением позиций — можно описать и структурный синтез.
Пока это лишь слова (не каждому читателю, возможно, до конца понятные) — но по ходу рассказа мы раскрем суть сказанного на примере структурирования конструкций и схем техноязыка и шампур-метода.
Часто мы будем говорить о смысле частей схем. Под этим понимается интерпретация получателем сообщения, написанного на данном языке (в нашем случае — на ДРАКОНе). Принцип интерпретации можно найти у В.Ш. Кауфмана в книге «Языки программирования. Концепции и принципы» (п. 1.3). Здесь под получателем будем подразумевать машину для переработки данных (также называемую информатической) — по сути своей формально-языковую, т.е предназначенную для работы с неким математически определимым языком. Ту самую, которую обычно называют «компьютером» (но это не более чем жаргонное словцо, передающее лишь часть возможностей таких машин). Но не каждую информашину, а такую, устройство и принцип действий которой можно описать моделью, известной как «машина Тьюринга» (или аналогичной моделью - «машиной Поста»). В основе своей такая модель несложна для понимания — с ней можно познакомиться по книжке В.А. Успенского «Машина Поста» или в учебнике В.А. Острейковского «Информатика» (п. 3.1). Всё распространённые информашины (включая ПК) описываются этой моделью. Главное, что нам надо знать — пространство для переработки данных в такой машине разбито на ячейки, упорядоченные в линию и снабжённые номерами-адресами.
Вообще каждый формальный язык подразумевает какую-то модель исполнителя. Если она соответствует какому-то реальному исполняющему устройству — то говорят, что это язык низкого уровня. Если же модель абстрагирует (т.е. отвлекается от несущественных деталей, скрывает их за укрупнённым представлением) реального исполнителя — то говорят, что язык, соответствующий ей, высокого уровня.На рисунках далее мы будем пользоваться элементами когнитивной графики, как принятой у Паронджанова, так и новой. Словарь обозначений можно найти здесь.
Далее как в графике, так и в тексте мы будем пользоваться новыми для читателя обозначениями. Дадим некоторые пояснения в дополнение к упомянутым ранее определениям.
В общем случае содержание можно описать с привлечением метаязыка РБНФ, что и сделано в этой статье. Определение принятой версии РБНФ можно найти среди условных обозначений, к которым Вас отсылали ранее.
РБНФ у нас применяется не только к текстам, но и к графике. Принцип простой — в индексе части вводятся РБНФ-скобки, если часть необязательна в данном месте схемы. А если скобки задают возможность повтора, то очередное место указывается там же стрелочками. Если в одну сторону — то новая часть должна входить в схему всегда с этой стороны (получается, что после предыдущей введённой части с таким же индексом — ряд растёт по стрелке). А если в обе — то можно выбирать место в ряду — с левого края, правого или где-то посередине (если в ряду уже больше двух частей — между любыми двумя). Нельзя только выйти за место самого ряда в схеме. Сами индексы, если необязательно приводить их полностью, замещаем знаком '#' (кстати, знаки как элементы структуры текста везде берутся в апострофы).
В графике мы тоже акцентируем возможность отсутствия фигур и/или связей — пунктиром линий. Если надо зрительно объединить разные части схемы — используем цвет линий и/или фона, толщину контуров и/или связей. Применяем и специальные операторы выбора частей. При этом на схеме выделяются позиции частей, к которым выбор применяется. Здесь интуитивно д.б. понятно следующее правило — когда в результате выбора данная часть отсутствует, отсутствуют и её внешние связи. Обычно индексы выбора мы даём для вершин — связанные с ними рёбра выбираются, так сказать, автоматически.
Конечно, для чтения этих обозначений нужен некоторый навык. Поэтому мы часто кое-что поясняем по их употреблению. В дальнейшем читатель, думается, сможет и сам пользоваться ими.
Может возникнуть вопрос — а зачем они? Одна из основных ролей — сокращать объём представления. Если рисовать/писать всё, что может повторяться — то при большом числе повторов получится чересчур «габаритное» описание. Помимо его большой площади (и трудной обозримости), возникает и взаимосвязанная проблема восприятия — когда «за деревьями не видно леса». Т.е. логическая структура предмета описания неясна. И вот тут выделение частей, которые могут повторяться или быть необязательными, кроме сокращения объёма, работает и на прояснение структуры. Как правило, это оказываются именно те части, на которые можно поделить предмет в результате структурного анализа его содержания. И получается, что физическое и логическое структурирование в значительной степени совмещаются.
Так называются машины для переработки данных у Б. Мейера — одного из современных специалистов по инженерии программ. Мы уже говорили, что исполнителя алгоритмов можно описать формальной моделью. При этом важно понимать, что он так или иначе связан с окружающим миром — иначе превращается в «вещь в себе», для решения задач бесполезную. Законы связи, взаимодействия и реализации задач, поставленных исполнителю (а где-то — и установления целей и постановки задач) изучает специальная наука — кибернетика. И исполнитель вместе с окружением образует некую кибернетическую систему как объект изучения в этой науке.
Начнём с простой системы, которая показана в «детской» книжке по техноязыку - «Занимательная информатика»:
Здесь показан исполнитель, устроенный так, что может и получать данные от окружения — по связи «информация о внешнем мире» (её ещё называют обратной), и выдавать воздействия во внешний мир — по связи «движения Мускула» (ещё её называют прямой). Собственно «наша машина» - устройство-исполнитель программы — это блок «Мозг». Идущие от него вопросы — это тоже команды, управляющие получением данных обратной связи.
Здесь исполнитель подразумевается как техническое устройство. Но задачи он решает в интересах человека-пользователя. Человек выбирает алгоритм (а если это не предусмотрено задачей, для которой сделан исполнитель — то запускает его исполнение — хотя бы просто включив робота).
Многие машины устроены по такой схеме. Это и программируемая бытовая техника, и станки с ЧПУ (в режиме работы по программе), и самонаводящиеся боеприпасы.
Во многих задачах человек присутствует непосредственно — когда он участвует в процессе решения. Вот пример структуры исполнителя для такого случая:
Тут человек-оператор представлен «крупным блоком» вверху, а машина (КСА — от «комплекс средств автоматизации») — таким же блоком внизу. Внутри каждого блока находятся элементы — это части т.н. информационного пространства. Оно выделяется в модели исполнителя — наряду с т.н. операционным устройством. В упомянутых «машинах Тьюринга/Поста» это «лента» и «головка».
Эта схема относится к задаче оформления дракон-схем. Можно изучить описание задачи полностью — может пригодиться. Если, скажем, надо нарисовать схему — а под рукой только редактор из офисного пакета. Или есть и специализированный дракон-редактор — но он для простого рисования слишком сложен…
Что мы здесь видим? Человек хранит не только точные описания алгоритмов, подобные машинным — но и знания, умения, навыки (ЗУН). А ещё — цели, представления о том, как можно ставить задачи и находить их решения. И чем нужно ограничивать себя в целеполагании и в решении задач (в самом общем смысле это нормы этики), а также чем должны ограничиваться люди в отношении к окружающему миру (это нормы морали). Всё это составляет интеллектуальные ресурсы.
Если же думать, что поведение человека описывается только алгоритмически строго — то мы приходим к упрощённой модели человека — т.н. «винтику». В каких-то задачах, которые поставлены уместно с т. зр. общих норм поведения — да, можно составлять алгоритмические инструкции и следовать им. Но в целом, если не упрощать — мы не можем дать «фундаментального алгоритма поведения»…
Вот и повод показать более общий случай структуры исполнителя. Здесь различные люди имеют отношение к одной «предметной области», решая разные задачи:
Оператор, решающий рассматриваемую задачу (её описание можно найти здесь), связан с объектом. И этот же объект используется его персоналом — другими людьми. Иногда цели их м.б. нейтральны друг к другу, иногда совместны, иногда и противоположны.
А что внутри у исполнителя алгоритма? Устройство его сложно, и описать можно по-разному. В большинстве случаев структура подобна показанной на следующей схеме:
Схема составлена на СТ-языке.
Важно понимать, что все эти блоки тоже работают в определённом порядке. Только алгоритм здесь не программируется, а как говорят, «зашит в железе» - реализован аппаратно, за счёт соединения деталей. Для переработки данных существуют определённые законы устройства аппаратуры, делающие её работу максимально правильной. Интересующиеся могут прочесть эту работу.
Можно видеть, что «наша машина» (здесь это устройство — ДСК) может и не использоваться при решении — если она стала неработоспособной. Кто это определяет? Оператор. А бывает и так — машина в какой-то момент начинает работать неправильно. А определить это оказывается невозможно — по крайней мере, вовремя…
Чтобы свести такую возможность к минимуму, изделия рук человеческих д.б. гарантоспособны. По-простому это значит — их создатели должны полностью отвечать за то, что изделие работает так, как положено. Но не только — ещё нужно, чтобы ущерб от неправильной работы был в допустимых пределах или вообще была возможность его предотвратить. Если изделие программируется — то гарантоспособность исполнения программ «нашей машиной» в его составе — важная часть решения этой проблемы в целом. Если же и нет — то понимание работы изделия, строгое алгоритмически, тоже важно. Для этого в конечном счёте и нужно описывать алгоритмы точно и понятно. Для человека…
В отличие от исходного определения, здесь задаются также текстоэлементы языка. Дело в том, что смысл и лексики, и отдельных конструкций (типовых и уникальных подсхем) и законченных схем не сводится к тому, который представлен графикой вершин и линий. Это отражено ещё автором техноязыка в названии авторской технологии его применения — ГРАФИТ-ФЛОКС (от ГРАФика И Текст; ФЛОКС — дополнительный к ДРАКОНу табличный язык, используемый для описания величин) — и в предварительной классификации содержания программно строгих описаний деятельности. Последовательно этот принцип проведён в классификации формализуемых знаний и в графит-методе — новом виде исчисления схем, определённом здесь. Графит-метод использует и основные принципы, принятые для техноязыка, но также вводит новые. Учёт текста не только для частных случаев (гибридных техноязыков), но и в общем (и в правилах исчисления, когда нужно) — один из графит-принципов. Заметим, что правильно добавлять сюда также и таблицы — как своего рода предтечу схемы текста — и несхематические изображения (скажем, рисунки, вставленные в вершины) — и тогда говорить просто о содержании вершин.
Уже давно специалисты по анализу и проектированию деятельности и взаимодействия человека в трудовом процессе — инженерные психологи — определяли общую структур процесса формализации знаний. Общий результат можно найти на этой странице. В структуре процесса можно фактически выделить три стадии - «качественную», математическую и информатическую. Каждой из них соответствует достигаемый уровень формальности языка. Познакомимся с этими уровнями вкратце.
Неформальный предполагает «почти естественную» формулировку действия — как фразы на родном языке сочинителя, только с заданным подразделением на имена объектов (в экономическом смысле — предметов и результатов труда) и «имя действия» - глагольные обороты, связующие объекты и указывающие применение к ним называемых действий (и, возможно, инструментов). Как действия д.б. знакомы исполнителю по названиям (входить, как говорят Паронджанов, а ранее — В.Ш. Кауфман в книге «Языки программирования. Концепции и принципы», в его «репертуар»), так и объекты д.б. известны по именам, образуя, так сказать, «багаж» исполнителя; то же касается и инструментов, образующих, условно говоря, «реквизит» процесса. Понятно, что не меньшие знания обо всём этом д.б. у сочинителя.
Функциональный уровень в принципе соответствует уже математической трактовке деятельности. Как некоей структуры функций, применение которых к аргументам (тем же объектам-предметам труда) даёт объекты-результаты труда. Структура объединяет функции прежде всего путём композиции (в цепочку, где результат[ы] одной функции передаются как аргумент[ы] следующей).
Информатический уровень возникает как результат информатизации представления о деятельности. При этом выделяется императивное формализованное знание — о маршрутах процесса, декларативное — о типах объектов и их структурах, активностное — о типах операций и средствах их выполнения (как структуре механизмов «реквизита»). В пределе обязательно представление объектов как чисел (кодов) и операций — как арифметических и/или логических (в смысле булевых функций над двоичными цифрами-битами). Любым «материальным последствиям» исполнения алгоритма тогда соответствуют (в алгоритмической обстановке, т.е. в модели контекста процесса) значения чисел/кодов на определённых линиях связи внутри исполнителя (между механизмами «реквизита») и в его окружении в определённые моменты времени. Так можно описать то, что Паронджанов называет «техпроцессом». Понятно, что сочинитель должен представлять себе схему исполнителя вместе с окружением, «размеченную» величинами данного процесса.
Таков пролог нашей истории… :)