Текст
                    Владимир
ПАРОНДЖАНОВ
ДРУЖЕЛЮБНЫЕ
АЛГОРИТМЫ,
ПОНЯТНЫЕ
КАЖДОМУ
КАК УЛУЧШИТЬ РАБОТУ УМА
БЕЗ ЛИШНИХ ХЛОПОТ
Москва
2010


УДК 004.4 ББК 32.973.26-018.2 П18 Рецензенты: Ю.И. Журавлев, академик РАН, Зам. Директора по научной работе Вычислительного центра имени акад. А.А. Дородницына РАН; Руководитель Секции прикладной математики и информатики Отделения математических наук РАН; Зам. Академика-секретаря Отделения математических наук РАН; Ю.В. Трунов, доктор техн. наук, профессор, Зам. Генерального конструктора Научно- производственного центра автоматики и приборостроения имени акад. Н. А. Пилюгина; В.В. Морозов, канд. техн. наук, Зам. Генерального конструктора Научно-производственного центра автоматики и приборостроения имени акад. Н. А. Пилюгина; Я.В. Безель, доктор техн. наук, профессор, Генеральный конструктор Московского НИИ приборной автоматики; В.П. Кутепов, доктор физ.-мат. наук, профессор кафедры прикладной математики Московского энергетического института (Технического университета). Паронджанов В.Д. П18 Дружелюбные алгоритмы, понятные каждому. (Как улучшить работу ума без лишних хлопот). — М.: ДМК Пресс, 2010 - 464 с: ил. 223 ISBN 978-5-94074-606-5 В книге излагаются новые полезные для практики идеи и достижения на стыке информатики, управления и психологии. Показано, что алгоритмы, сила ума, интеллектуальный комфорт и эффективность бизнеса тесно связаны. Дается общедоступный практический курс, помогающий ускорить разработку алгоритмов и программ, увеличить силу ума, упростить формализацию профессиональных знаний, облегчить проектирование сложной деятельности и бизнес-процессов. Курс основан на «дружелюбных» графических языках, обладающих удивительной наглядностью, «заставляющих» мозг мыслить отчетливо, глубоко и продуктивно. Для всех, кто интересуется алгоритмами и хочет научиться выражать свои мысли и планы в форме дружелюбных и наглядных алгоритмических чертежей. Книга предназначена для начинающих и профессионалов. Все нрава защищены. Любая часть этой книги но может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не песет ответственности за возможные ошибки, связанные с использованием книги. © Паронджанов В. Д., 2010 ISBN 978-5-94074-606-5 © Оформление, издание ДМК Пресс, 2010
СОДЕРЖАНИЕ Введение 5 Часть I. Зачем нужен дружелюбный алгоритмический язык? 17 Глава 1. Интеллектуальный терроризм: фантазия или реальность? 19 Глава 2. Психологический подход к алгоритмам 36 Глава 3. Можно ли создать алгоритмический язык, улучшающий понимание и взаимопонимание? 42 Часть II. Знакомьтесь — дружелюбный алгоритмический язык ДРАКОН 49 Глава 4. Изюминки языка ДРАКОН 51 Глава 5. Эргономичные алгоритмы 83 Глава 6. Визуализация цикличных алгоритмов 129 Глава 7. Визуализация логических формул 158 Глава 8. Что такое эргономичный текст? 178 Глава 9. Визуальные операторы реального времени 197 Глава 10. Дружелюбное программирование 210 Часть III. Примеры алгоритмов для различных отраслей знания 223 Глава 11. Алгоритмы в медицине 225 Глава 12. Алгоритмы в промышленности 233 Глава 13. Алгоритмы в торговле 243 Глава 14. Алгоритмы в атомной энергетике 254 Глава 15. Алгоритмы в биологии 269 Глава 16. Алгоритмы в сельском хозяйстве 279 Глава 17. Алгоритмы в средней школе 285 Глава 18. Алгоритмы и задачи государственного, муниципального и корпоративного управления 296 Глава 19. Алгоритмы и формализация профессиональных знаний 303
СОДЕРЖАНИЕ Глава 20. Рекомендации по использованию алгоритмических структур «силуэт» и «примитив» 321 Часть IV. Визуальный конструктор алгоритмов и формальное описание языка ДРАКОН 325 Глава 21. Визуальный конструктор алгоритмов (дракон-редактор) 327 Глава 22. Визуальный синтаксис языка ДРАКОН 339 Часть V. Теоретическое обоснование языка ДРАКОН 349 Глава 23. Визуальное структурное программирование 351 Глава 24. Исчисление икон 380 Глава 25. Что день грядущий нам готовит? (Проект преобразования алгоритмического языка) 391 Часть VI. Возможна ли эргономизация математики? История и эргономика математики и создание языка ДРАКОН 405 Глава 26. О чем говорят уроки истории? Анализ эргономичности алгебры Диофанта 407 Глава 27. Эргономизация математики. Обсуждение и примеры 425 Новое платье алгоритмов: взгляд в будущее (вместо заключения) 447 Литература 452 Предметный указатель 461
ВВЕДЕНИЕ У каждого человека имеются огромные интеллектуальные ресурсы, из которых большинство людей использует лишь незначительную часть. Давид Лассер АЛГОРИТМЫ И ЧЕЛОВЕЧЕСКИЙ РАЗУМ Мы живем в мире алгоритмов, но знаем о них удивительно мало. Многие люди всю жизнь пользуются алгоритмами, не догадываясь об этом. Между тем алгоритмы играют огромную роль в жизни общества. Они оказывают заметное влияние на эффективность экономики и уровень жизни. К сожалению, многие алгоритмы и программы похожи на загадочный ребус. Они непонятны никому, кроме горстки их создателей. Непонимание порождает путаницу и досадные ошибки. Чтобы поправить дело, надо сделать алгоритмы «дружелюбными». Это позволит превратить алгоритмы- головоломки в наглядные алгоритмы-картинки, обеспечивающие быстрое и глубокое понимание. Глубина понимания сложных проблем — как раз то, чего всем нам (от студента до министра) ой как не хватает! Дружелюбные алгоритмы пишут на эргономичных графических языках. Они создают повышенный интеллектуальный комфорт, улучшают работу ума, повышают продуктивность труда. С их помощью вы научитесь легко и быстро, затратив минимум усилий, решать сложнейшие проблемы. Проектировать сложную деятельность и бизнес-процессы. Формализовать свои профессиональные знания. Выполнять алгоритмизацию самостоятельно, без помощи программистов — по методу «программирование без программистов». МАЛЕНЬКАЯ УВЕРТЮРА Книга предназначена для всех, кто хочет упорядочить и улучшить работу своего ума. Она адресуется к работникам умственного труда всех профессий и специальностей: конструкторам и педагогам, технологам и врачам, агро-
5 ВВЕДЕНИЕ номам и математикам, биологам и экономистам, психологам и нефтяникам, физикам и программистам и т. д. Она может пригодиться тем, кто хочет научиться рисовать свои мысли и планы в виде наглядных и точных блок-схем. И разобраться, наконец, что же такое алгоритмы и почему они играют такую важную роль в развитии цивилизации и человеческого интеллекта. У того, кто бегло пролистал книгу, может сложиться ложное впечатление, что она посвящена компьютерам и программированию. На самом деле это не так. Речь идет не о думающих машинах, а о думающих людях, о загадках и особенностях человеческого познания и интеллекта. О таинственных ловушках и подводных камнях, которые подстерегают нас в трудном плавании по безбрежным морям каждодневной умственной работы. О том, как найти спасительный маяк и прибыть к цели по кратчайшему маршруту. В книге предлагается новое средство для облегчения и улучшения работы ума, которое можно использовать во многих, практически в любых областях умственной деятельности. Само по себе это средство не имеет никакого отношения к компьютерам. Поэтому его с успехом могут применять и те, кто не любит компьютеры, относится к ним с подозрением и опаской. Вам понадобятся карандаш, бумага и больше ничего. Короче говоря, это средство вполне пригодно для улучшения самой обычной (бескомпьютерной) умственной работы. Впрочем, любители компьютеров выиграют еще больше, поскольку указанное средство может служить основой для создания новой мощной информационной технологии, которая принесет большую пользу и сейчас и в будущем. Возможно, книга попадет в руки читателя, который хотел бы улучшить работу своего ума, но которого пугают или раздражают такие слова, как «алгоритм», «программа», «формализация». Этому горю нетрудно помочь. Сейчас мы сочиним шуточный словарик, который хотя и нарушает все каноны научной строгости, зато вполне понятен новичкам. Легкомысленный словарик Алгоритм — точное описание решения задачи, которое ведет к победе Алгоритм — точно описанная последовательность человеческих действий Алгоритм — точное и полное описание работы (деятельности), которое позволяет другим людям повторить эту деятельность фотографически точно, без малейших отклонений, и получить нужный результат Визуальный алгоритм — алгоритм, изображенный не в виде текста, а в виде наглядной картинки
ВВЕДЕНИЕ Визуализация алгоритма — преобразование алгоритма, который записан в виде плохого и непонятного текста, в хорошую и понятную картинку Когнитивный — познавательный. Это неуклюжее словечко надо запомнить, так как оно будет попадаться на каждом шагу Когнитивная психология — психология познавательных процессов Программа — последовательность действий, которые человек ленится выполнять сам и поэтому поручает компьютеру или роботу Формальный — математически строгий Формальное описание — математически строгое, точное, однозначное и полное описание, лишенное пробелов и двусмысленностей Формализация — превращение обычного (плохого) описания в формальное (хорошее) Автоформализация — это когда человек выполняет формализацию сам, не обращаясь к помощи друзей, родственников и случайных прохожих Формализация деятельности — точное описание правил, по которым выполняется деятельность. В ходе формализации необходимо разбить деятельность на отдельные действия, указать последовательность их выполнения, а также условия, при которых выполняется (или не выполняется) каждое действие. В результате формализации описание деятельности превращается в алгоритм Алгоритмизация — то же самое, что формализация деятельности Алгоритмизация — внесение порядка в царство анархии, устранение путаницы и разгильдяйства, наведение технологической дисциплины Алгоритмизация — процесс создания алгоритма Эргономика — наука о том, как превратить сложную, трудную и противную работу в простую, легкую и приятную Когнитивная эргономика — наука о том, как облегчить и улучшить умственную работу Эргономичный — дружелюбный Эргономичный алгоритм — дружелюбный алгоритм Эргономичный алгоритмический язык — дружелюбный и удобный в работе алгоритмический язык Эргономизация алгоритма — превращение недружелюбного алгоритма в дружелюбный Эргономизация алгоритмического языка — превращение недружелюбного алгоритмического языка в дружелюбный Эргономизация образования — облегчение и улучшение учебной деятельности
8 ВВЕДЕНИЕ ТРЕТИЙ ГЛАЗ ДЛЯ БИЗНЕСМЕНОВ И РУКОВОДИТЕЛЕЙ Предположим, вы — крупный руководитель. Например, генеральный конструктор ракетно-космической корпорации. Или даже министр. Или, скажем, глава крупного банка, в котором несколько сотен мощных компьютеров перемалывают финансовую и иную информацию. Или, предположим, вы — главный инженер большого металлургического завода, где успешно действуют самые современные системы управления технологическими процессами. Возможно, вы возглавляете нефтяную компанию, железную дорогу или центр спутникового телевидения. Гордость вашей организации, ее интеллектуальный костяк составляют золотые умы — квалифицированные специалисты, обладающие драгоценными профессиональными знаниями. В своей работе они используют компьютеры, объединенные в локальные и иные сети. В этой книге описан практически полезный метод, позволяющий улучшить работу ума этих людей, чтобы увеличить их интеллектуальный вклад в процветание вашей частной фирмы или государственной организации. Речь идет о совершенно новой идее, которая, впрочем, уже прошла тщательную проверку в ряде частных случаев и показала хорошие результаты. Предлагаемая идея тесно связана с компьютерами и автоматизацией, но в то же время существенно отличается от них, так как объектом воздействия является не компьютер, а человеческий мозг. Здесь уместны некоторые пояснения общего характера. Когда говорят об автоматизации, имеют в виду автоматизированные системы управления предприятиями, технологическими процессами, научными исследованиями, конструкторскими разработками, проектированием, программированием, финансовой деятельностью, войсками и множество других. В XX в. широкая волна компьютеризации и автоматизации охватила весь мир и принесла замечательные плоды. Общественное богатство увеличилось. Доля физического труда сократилась, умственного — возросла. В этот период были осознаны две важные истины. 1. Современный мир — продукт мысли и ума. В конечном счете, именно человеческий ум произвел все то, что мы видим и ощущаем вокруг себя. Цивилизация — это результат усилий человеческого ума. 2. В конкурентном мире успех деятельности фирм и организаций зависит от профессиональных знаний и интеллекта специалистов, от интеллектуального потенциала фирмы, от умения увеличить силу ума работников. Улучшение работы ума специалистов превращается в важнейшую, приоритетную задачу. Здесь, однако, возникает проблема. Многие считают, что эта задача решается автоматически, сама по себе, вместе с улучшением образования и широким распространением компьютеров. Они полагают, что автоматизация умственного труда усиливает человеческий интеллект. По их мнению, чем совершеннее компьютеры, чем лучше их характеристики,
ВВЕДЕНИЕ 9 тем продуктивнее работает мозг. Чем больше сложных и интеллектуальных задач возлагается на машины, тем эффективнее решает свои задачи человеческий интеллект. Чем выше степень автоматизации умственного труда, тем лучше и эффективнее действует наш ум. Согласно этой логике, чтобы улучшить работу ума специалистов, нужно увеличить мощность компьютеров и сделать их более интеллектуальными. Можно показать, что в этих рассуждениях скрыта тонкая и коварная ошибка. На самом деле автоматизация и улучшение работы ума — хотя и связанные, но существенно разные вещи. Творческая продуктивность человеческого мозга не зависит от мощности и других характеристик компьютеров. Она определяется совсем другими факторами. Таким образом, налицо противоречие. С одной стороны, очевидно, что эффективность фирм и организаций зависит от силы ума специалистов. Поэтому повышение творческой силы интеллекта становится задачей первостепенной важности. С другой стороны, в настоящее время, насколько нам известно, отсутствуют эффективные методы интенсификации человеческого интеллекта, которые можно применить на практике с целью увеличения реальной отдачи фирм и организаций. Более того, задача улучшения работы ума специалистов не только не решена, но фактически даже не поставлена. Данная книга, по-видимому, представляет собой первую в мировой литературе попытку четко сформулировать проблему улучшения работы ума, выявить ее тесную связь с алгоритмами, которые в огромном количестве населяют всемирную армию компьютеров и головы людей. Показать огромное влияние алгоритмов на человеческий разум. И продемонстрировать неуклонно растущую значимость проблемы «алгоритмы + разум» для повышения эффективности фирм и организаций. НЕУДАЧНЫЕ ПРИКЛЮЧЕНИЯ АЛГОРИТМОВ В ОБЩЕСТВЕ ЗНАНИЙ Мы живем в обществе знаний. Носителями профессиональных знаний являются специалисты, например, агрономы, нефтяники, микробиологи, технологи, экономисты, химики, врачи. Большинство указанных специалистов, как правило, далеки от программирования. Парадокс в том, что эти люди прекрасно знают свою работу. Они четко знают последовательность выполняемых ими действий, то есть алгоритмы своей работы. Но они, увы, не знают, что их знания называются алгоритмами. Эти замечательные специалисты не умеют описывать алгоритмы. Они не умеют расчленять свои знания и выделять среди них алгоритмическую (процедурную) часть. Они не в состоянии выразить свои знания на бумаге в форме алгоритмов. Хорошо ли это? Допустима ли подобная алгоритмическая неосведомленность?
ВВЕДЕНИЕ УСТАРЕВШАЯ ТОЧКА ЗРЕНИЯ На этот вопрос обычно отвечают так: Конечно, хорошо. Потому что существует разделение труда. Каждый должен заниматься своим делом. Алгоритмы — дело математиков и программистов. А нефтяники, химики, врачи и экономисты совершенно не обязаны знать алгоритмические тонкости. У них, слава богу, своих забот выше крыши! Данная точка зрения требует непредвзятого анализа. Прежде всего, надо ответить на вопрос: В чем причина повсеместно распространенной алгоритмической неграмотности? Неграмотности подавляющего большинства специалистов? Ответ лежит на поверхности. Дело в том, что нынешние алгоритмы (используемые во всем мире) имеют серьезный дефект. Они чрезычайно трудны для понимания. Поэтому существующая практика изучения, разработки и эксплуатации алгоритмов является неудовлетворительной. Она требует неоправданно больших затрат труда и времени. Эти трудозатраты настолько велики, что во много раз превышают реальные резервы времени, которыми располагают люди. Алгоритмическая неграмотность специалистов-непрограммистов объясняется тем, что в современных условиях изучение алгоритмов является слишком сложным и даже непосильным делом. Поэтому работа с алгоритмами для подавляющего большинства профессионалов оказывается невозможной. Это плохо. Алгоритмическая неграмотность многих умных людей неблагоприятно отражается на развитии общества. АЛГОРИТМИЗАЦИЯ ТРУДНА. МОЖНО ЛИ СДЕЛАТЬ ЕЕ ЛЕГКОЙ? Повторим главную мысль. Нынешние алгоритмы, как правило, недружелюбны. Это обстоятельство ставит непреодолимый барьер и не позволяет перейти к массовому овладению алгоритмизацией. К счастью, ситуацию можно изменить. Алгоритмы можно и нужно сделать дружелюбными. Как только это случится, ситуация в корне изменится. Ниже мы предложим более удобную форму записи алгоритмов (но не данных). АЛГОРИТМИЗАЦИЯ — ЭТО ТРУД Чтобы прояснить проблему, сделаем несколько замечаний. • Разработка алгоритмов — это труд, производительность которого
ВВЕДЕНИЕ 11 играет важную роль. Если труд слишком сложен (производительность труда мала), то алгоритмизацию могут выполнять только опытные специалисты. При таких условиях массовая алгоритмизация невозможна. И наоборот, если данный труд удастся резко облегчить, алгоритмизация станет посильной почти для каждого. В этом случае создаются необходимые предпосылки для массового овладения методами алгоритмизации. В этой книге мы покажем, что использование дружелюбных алгоритмических языков кардинальным образом облегчает труд и повышает его производительность. Следовательно, дружелюбные языки пригодны для эффективной формализации процедурных знаний, осуществляемой в массовых масштабах. ЦЕЛЬ КНИГИ Наша цель — научить читателя самостоятельно создавать дружелюбные алгоритмы. И показать, что это простое и легкое дело. На многочисленных примерах читатель убедится, что дружелюбные алгоритмы имеют огромные преимущества. Чем понятнее алгоритм, тем легче уяснить его смысл. Чем прозрачнее смысл, тем лучше взаимопонимание между заказчиком и исполнителем работ. Чем меньше ошибок в техническом задании, тем выше производительность труда при разработке и отладке алгоритмов и программ. Чем меньше усилий затрачивают алгоритмисты и программисты, тем быстрее они выполняют свою работу. ЕЩЕ РАЗ ОБ УСИЛЕНИИ ИНТЕЛЛЕКТА Академик Андрей Ершов был убежден: занятия программированием делают людей умнее. Человек резко увеличит свой интеллект, если станет программистом. Вот его слова: «Человек неизмеримо усилит свой интеллект, если сделает частью своей натуры способность планировать свои действия, вырабатывать общие правила и способ их применения к конкретной ситуации, организовывать эти правила в осознанную и выразимую структуру, — одним словом, сделается программистом» [1]. НЕДОСТАТОК ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Прав ли уважаемый академик? Нет сомнения, умение хорошо программировать значительно расширяет умственные возможности людей. Оно позволяет оптимизировать работу ума и использовать компьютер на порядок эффективнее. Однако есть одно «но». На практике предложенный Ершовым путь улучшения интеллекта — увы! — не работает. Он просто-
12 ВВЕДЕНИЕ напросто закрыт для подавляющего большинства желающих. Почему? Неприятность в том, что все без исключения известные языки программирования слишком сложны и недоступны для большинства людей. Они предназначены для узкой касты знатоков и больше ни для кого. Интеллектуальные трудозатраты на освоение программирования недопустимо велики. Поэтому языки программирования непригодны для решения задачи, поставленной академиком Ершовым — усиления интеллекта значительной части населения. КАК ВЫЙТИ ИЗ ТУПИКА? Наша позиция такова: Надо глубоко осознать разницу между понятиями «программирование» и «алгоритмизация». Массовое обучение программированию невозможно и не нужно по двум причинам. Во-первых, оно неимоверно трудно. Во-вторых, оно дает знания, которые большинству просто не нужны. Массовое обучение алгоритмизации, наоборот, полезно и необходимо. В обществе знаний во многих случаях возникает острая необходимость формализовать собственные процедурные профессиональные знания специалистов. Такое умение должно стать частью их профессиональной культуры. РАБОЧАЯ ГИПОТЕЗА: КАЧЕСТВО ЯЗЫКА ВЛИЯЕТ НА СИЛУ УМА Эргономическое качество алгоритмических языков имеет большое значение. Если качество низкое, алгоритмы оказываются слишком сложными и трудными для понимания. Они содержат смысловые пробелы, упущения, двусмысленности и непонятные места. Это порождает многочисленные неясности, заблуждения, ошибки и взаимное непонимание между соисполнителями работ. В итоге производительность умственного труда создателей алгоритмов падает. Но это не все. Чрезмерная трудность понимания алгоритмов ставит непреодолимую стену перед всеми, кто хочет освоить алгоритмизацию. И наоборот, если качество языка высокое, алгоритмы становятся легкими для восприятия. Растет глубина и скорость понимания и взаимопонимания. Смысловые ошибки, противоречия и слабые места «сами бросаются в глаза». Их можно гораздо быстрее обнаружить и устранить. В результате продуктивность мозга существенно возрастает. Сказанное позволяет выдвинуть гипотезу.
ВВЕДЕНИЕ 13 Гипотеза Производительность мозга разработчика алгоритмов зависит от эрго- номичности алгоритмического языка. Улучшая язык, можно поднять производительность. Исходя из этих соображений был разработан язык ДРАКОН, который описан ниже. Язык ДРАКОН обладает уникальными эргономическими характеристиками. Он позволяет улучшить работу ума, легко и быстро создавать дружелюбные и наглядные алгоритмы. Мы попытаемся доказать, что язык ДРАКОН — мощное оружие интеллекта. Он позволяет ясно и четко мыслить. И значительно облегчает творческий процесс создания алгоритмов, делая его доступным не только для программистов, но и для «народа». ДРАКОН РОДИЛСЯ В КОСМИЧЕСКОЙ КОЛЫБЕЛИ Язык ДРАКОН разработан совместными усилиями Федерального космического агентства (Научно-производственный центр автоматики и приборостроения им. акад. Н.А. Пилюгина, г. Москва) и Российской академии наук (Институт прикладной математики им. акад М.В. Келдыша, г. Москва). ДРАКОН возник как обобщение опыта работ по созданию космического корабля «Буран». Разработка нового языка и системы программирования началась в 1986 и завершилась через 11 лет. В 1996 году на базе ДРАКОНа построена автоматизированная технология проектирования алгоритмов и программ под названием «ГРАФИТ-ФЛОКС». Она успешно используется во многих крупных космических программах, включая: • международный космический проект «Морской старт» (Sea Launch); Первый пуск «Морского старта» состоялся 10 марта 1999 года; • разгонный блок космических аппаратов «Фрегат»; • модернизированная ракета-носитель тяжелого класса «Протон-М» и др. Поскольку результаты использования ДРАКОНа были стабильно высокими, руководство Пилюгинского центра приняло решение об использовании дракон-технологии во всех последующих проектах. ПРОГРАММИРОВАНИЕ БЕЗ ПРОГРАММИСТОВ ДРАКОН — очень легкий язык. Настолько легкий, что разработку многих компьютерных программ для космических ракет на практике ведут не программисты, а инженеры — по принципу «программирование без программистов». Причина частичного отказа от программистов проста. При
14 ВВЕДЕНИЕ решении практических прикладных задач инженеры досконально владеют материалом и прекрасно знают постановку задачи. В отличие от них программисты не знают физику процесса и становятся «лишними людьми», без которых в ряде случаев (хотя и не всегда) вполне можно обойтись. Это позволяет значительно сократить издержки, улучшить показатель «затраты — результат», ускорить ход работ. И полностью избавиться от ошибок «испорченного телефона», вызванных взаимным непониманием между программистами и инженерами. СЕКРЕТЫ КОСМИЧЕСКИХ РАЗРАБОТОК— НАРОДНОМУ ХОЗЯЙСТВУ ДРАКОН универсален. Он может применяться для наглядного представления и быстрой разработки алгоритмов не только в «космосе», но и в «земных» видах человеческой деятельности. Практическая полезность ДРАКОНа получила высокую оценку. Можно предположить, что язык ДРАКОН получит широкое распространение в самых различных областях, в том числе в системе образования. В свое время Никлаус Вирт, автор языка Паскаль, посчитал, что Паскаль должен быть самым первым языком, с которого следует начинать изучение программирования. Эта точка зрения в свое время стала почти общепринятой. В ту пору программы писали в виде текста. Для текстового программирования Паскаль, действительно, был наилучшим учебным языком. Однако сегодня ситуация изменилась. Будущее принадлежит эргономичным языкам. В этих условиях дедушка Паскаль потерял былую славу прекрасного учебного средства. Сегодня эта роль переходит к визуальному языку ДРАКОН. Именно ДРАКОН становится самым простым, легким, удобным и логически стройным языком, с которого надо начинать изучение алгоритмизации. ДРАКОН В СИСТЕМЕ ОБРАЗОВАНИЯ В 1996 году Государственный комитет по высшему образованию Российской Федерации включил изучение языка ДРАКОН в программу курса информатики высшей школы. Этот факт нашел отражение в официальном документе Госкомвуза под названием: «Примерная программа дисциплины «Информатика». Для направлений: 510000 — Естественные науки и математика 540000 — Образование 550000 — Технические науки
ВВЕДЕНИЕ 15 560000 — Сельскохозяйственные науки Издание официальное. М.: Госкомвуз, 1996. 21с. Авторы программы: Кузнецов B.C., Падалко С.Н., Паронджанов В.Д., Ульянов С.А. Научные редакторы: Падалко С.Н., Паронджанов В.Д.» [2]. {Примечание. Этот документ официально «узаконил» изучение языка ДРАКОН в системе образования). В настоящее время ведется подготовка учебных книг для средней и высшей школы. Уже издана первая из них — учебное пособие по алгоритмам для учащихся 5 — 9 классов. Это пособие выдержало три издания [3-5]. ¦-г. Дракон — самый легкий язык для изучения и в школе, и в ВУЗе СОДЕРЖАНИЕ КНИГИ Книга состоит из шести частей. Часть I (главы 1—3) носит вводный характер. Практика показывает, что многие алгоритмисты и программисты, в том числе опытные, с недоверием воспринимают эргономический подход к алгоритмам. Они привыкли думать, что теоретической основой программирования является математика, но никак не эргономика. Мысль о том, что математика должна вступить в союз с эргономикой кажется им крамольной и еретической. Первая часть книги призвана развеять эти сомнения.
16 ВВЕДЕНИЕ Сделаем оговорку: читатели, которые не нуждаются в подобных разъяснениях, могут без всякого ущерба пропустить первую часть и начать чтение с 4-й главы. В части II (главы 4—10) описывается эргономичный алгоритмический язык ДРАКОН. Для удобства читателя описание языка дается в упрощенном виде, на наглядных примерах. Часть III (главы 11—20) содержит большое число алгоритмов на языке ДРАКОН. Примеры демонстрируют широкий спектр возможностей языка, позволяющих использовать его для различных отраслей и предметных областей. В части IV (главы 21, 22) описывается программа «конструктор алгоритмов» и дается формальное описание языка. Часть V (главы 23—25) посвящена теоретическому обоснованию языка ДРАКОН. В главе 23 описана теория визуального структурного программирования. (Именно она лежит в основе ДРАКОНа). В главе 24 показано, что визуальный синтаксис ДРАКОНа представляет собой визуальное логическое исчисление, которое называется исчислением икон. В главе 25 представлен Проект преобразования алгоритмического языка. Часть VI (главы 26, 27) освещает историю дружеских связей математики и эргономики. Характерная для ДРАКОНа «дружба» математики и эргономики вовсе не является исключением. История математики на многих фактах подтверждает, что подобная «дружба» является одной из важных закономерностей развития науки.
Часть I ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК?
Глава ИНТЕЛЛЕКТУАЛЬНЫЙ ТЕРРОРИЗМ: ФАНТАЗИЯ ИЛИ РЕАЛЬНОСТЬ? Мы просто не научились еще использовать на полную «проектную мощность» возможности нашего мозга. Эвальд Ильенков ПОЧЕМУ УМНЫЕ ЛЮДИ СТРАДАЮТ И ГИБНУТ? Два ученика известного математика Давида Гильберта, изнуренные непосильной умственной работой, не получив требуемых шефом научных результатов, в отчаянии покончили с собой. Бедный старик не нашел ничего лучшего как, стоя на похоронах под проливным дождем, в течение часа произносить речь, в которой доказывал, что их диссертации могли быть исправлены. В науке драматические ситуации, увы, не редкость. Немецкий ученый Франц-Адольф Тауринус, доведенный до крайности равнодушием математиков, сжег свой труд об основах геометрии. Янош Больяи впал в душевное расстройство. Николая Лобачевского в одной из рецензий объявили чуть ли не сумасшедшим. Феликса Клейна постигла катастрофа — соперничая с Анри Пуанкаре в построении теории автомор- фных функций, он надорвался, тяжело заболел и вынужден был навсегда прекратить научную работу по математике. Даже великий Карл Фридрих Гаусс, несмотря на блестящие успехи и выдающиеся открытия, однажды признался: «Смерть мне милее такой жизни». Историки предполагают, что его ипохондрия и душевный недуг — ответная реакция на неимоверно интенсивную работу и сверхчеловеческое усердие [1—3]. РАЗВЕ ТАКАЯ ПРОБЛЕМА СУЩЕСТВУЕТ? Анализируя подобные случаи, трудно избавиться от впечатления, что за
20 ЧастьI.ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? — Я дни и ночи бьюсь над диссертацией, а шеф опять недоволен. Лучше удавиться! — Меня он тоже вконец замучил. Застрелюсь — и дело с концом! трагедиями конкретных людей скрывается и постепенно набирает силу новое и крайне негативное социальное явление. Этот феномен иногда характеризуют как «интеллектуальный терроризм». Но его, наверно, было бы лучше назвать интеллектуальной каторгой. В той или иной степени с ним сталкиваются все, кому приходится испытывать хроническое перенапряжение и трудиться на пределе своих возможностей. Для некоторых непосильные перегрузки начинаются уже в школе. Отчасти этому способствуют недостатки преподавания. Французский специалист по искусственному интеллекту Жан-Луи Лорьер пишет: «Существует определенный вид интеллектуального терроризма, когда некоторых учеников называют "нуль в математике", хотя их единственная вина состоит в том, что они не понимают то, о чем... никогда не говорится» [4]. Сильнейшие умственные перегрузки испытывают многие студенты, бизнесмены, ученые и многочисленные армии интеллектуальных трудоголиков, что нередко ведет ко всевозможным расстройствам и порою — серьезным заболеваниям. Здесь есть нечто загадочное, поскольку за всеми этими внешними проявлениями скрывается неуловимая проблема- невидимка.
Глава 1. ИНТЕЛЛЕКТУАЛЬНЫЙ ТЕРРОРИЗМ: ФАНТАЗИЯ ИЛИ РЕАЛЬНОСТЬ? 21 ИНФОРМАЦИОННЫЙ СТРЕСС-ЗЛОВЕЩИЙ СПУТНИК ИНФОРМАЦИОННОГО ОБЩЕСТВА Будущее человечества, самое его выживание прямо зависит от роста его интеллектуальных возможностей. Однако требование всемерного развития человеческого интеллекта, максимальной интенсификации его работы во многих случаях наталкивается на жесткое препятствие, имя которому — информационный стресс. Именно в этой точке, как молния из искры, вспыхивает проблема интеллектуального терроризма. К сожалению, ею часто пренебрегают, считая ее второстепенной, а то и вовсе несуществующей. Впрочем, так думают не все. Некоторые ученые полагают, что информационный стресс возникает в ситуации информационных перегрузок. Это происходит, когда человек не справляется с задачей, не успевает принимать верные решения в требуемом темпе при высокой ответственности за последствия принятых решений. Анализируя тексты, решая те или другие задачи, человек перерабатывает информацию. Завершается этот процесс принятием решения (или получением промежуточного результата). Объем перерабатываемой информации, ее сложность, необходимость часто принимать решения — все это и составляет информационную нагрузку. Если она превосходит возможности человека при его высокой заинтересованности в выполнении данной работы, то говорят об информационной перегрузке. Стресс и вызываемые им расстройства оказывают огромное влияние на жизнь и здоровье современного человека. Стресс коварен. С одной стороны, для возникновения его вредных последствий совсем не требуется, чтобы воздействующий фактор был чрезвычайно сильным и необычным. Установлено, что обычный и заурядный фактор (такой, как дефицит времени) может оказать очень сильное стрессовое воздействие. С другой стороны, стресс может привести к общему истощению организма и даже к смерти. КАМИКАДЗЕ УМСТВЕННОГО ТРУДА Защита интеллектуальных работников от стрессовых воздействий ведется во многих направлениях — от медицинской профилактики до облегчения труда через усиление возможностей интеллекта. Вот далеко не полный перечень известных «противоядий»: гигиена умственной деятельности, рациональная организация работы, повышение интеллектуальной культуры специалистов, стимулирование научного творчества, использование возможностей интуиции, совершенствование интеллектуальных способностей, различные теории развития интеллекта. Сюда же можно добавить различные частные методики, такие как ТРИЗ (теория решения изобретательских задач), интеллект-карты Тони Бьюзена и т. д. [5—11]. Хотя существующие средства, теории и инструменты, несомненно, являются полезным и порою весьма эффективным лекарством, тем не
22 ЧастьI. ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? менее, они, к сожалению, не соответствуют глобальному масштабу и нарастающей значимости проблемы. К чему это приводит? Сложность цивилизационных процессов, существенно превышает наличные интеллектуальные возможности человечества. Не справляясь с неуклонным ростом этой губительной сложности, люди вынуждены компенсировать слабость и нехватку интеллектуальных инструментов за счет нервного перенапряжения (читай — истощения) и увеличения рабочего дня добровольных и вынужденных трудоголиков. При этом за кадром общественного внимания, телевидения и средств массовой информации остается тот факт, что интеллектуальные работники зачастую превращаются в интеллектуальных камикадзе, которых общество приносит в жертву жестокому и коварному Молоху интеллектуального прогресса. Известный математик Герман Вейль подчеркивает: недопустимо, когда трансцендентное господствует над человеком, превращая его всего лишь в рупор интеллектуального откровения. И делает вывод: «Хотя наука — высокая объективная ценность, которой смиренно служит человек, одновременно она — ветвь человеческой деятельности, ради которой нельзя приносить в жертву самое жизнь» [3]. ЧТО ТАКОЕ ИНТЕЛЛЕКТУАЛЬНЫЙ ТЕРРОРИЗМ? — Виновен ли профессор математики геттингенского университета Давид Гильберт в гибели своих учеников? — Нет. — Хотел ли он их смерти? — Нелепый вопрос. Конечно, нет. — В таком случае, что явилось причиной самоубийства? Интеллектуальный терроризм — особая социальная ситуация, когда общество, действуя возможно, из лучших побуждений, формирует систему моральных норм и социальных ценностей, а также систему прямых и косвенных стимулов и с их помощью навязывает человеку чрезмерно трудный стиль умственного труда. Такой стиль почти неизбежно или с высоким риском приводит к перегрузке или другим отрицательным последствиям, наносящим вред физическому или душевному здоровью, снижающим качество или сокращающим продолжительность жизни. Парадокс в том, что интеллектуальный терроризм (интеллектуальная каторга), даже если он влечет за собой тяжелейшие нервно-психические или иные заболевания и суицидальные попытки, в рамках существующей системы взглядов и моральных норм не рассматривается как нарушение прав человека. По нашему мнению, интеллектуальный терроризм — это пока еще не осознанная, но вполне реальная и серьезная угроза. Источник всех этих бед и напастей состоит в том, что имеющиеся интеллектуальные средства,
Глава 1. ИНТЕЛЛЕКТУАЛЬНЫЙ ТЕРРОРИЗМ: ФАНТАЗИЯ ИЛИ РЕАЛЬНОСТЬ? 23 методы и инструменты в значительной степени устарели. Они «не умеют» решать проблему интеллектуальных трудностей, облегчая или устраняя их. Они нацелены на решение интеллектуальных задач любой ценой. При этом не учитываются реальные умственные затраты и нервно-психические последствия. Почти полностью игнорируются тонкие когнитивно-эргономические характеристики сложной умственной деятельности. Таким образом, развитие интеллектуальных средств и инструментов драматически отстает от насущных интеллектуальных потребностей практики. Досаднее всего, что это противоречие остается скрытым, неявным, поскольку оно пока еще не попало в сферу интересов современной науки в качестве одной из наиболее приоритетных, архиважных проблем. ГУМАНИТАРНАЯ ПОСТАНОВКА ЗАДАЧИ Можно ли повысить качество решений сложных и сверхсложных интеллектуальных проблем, необходимых для устойчивого развития цивилизации, и одновременно защитить людей от опасных для здоровья умственных перегрузок? Как облегчить и улучшить работу человеческого ума? Увеличить продуктивность творческого мышления? Преобразовать трудные и непосильные задачи в легкие и посильные? Словом, превратить интеллектуальные муки-мученические во что-нибудь более достойное человека и даже приятное? Можно ли решить эту проблему в принципе? Анализ этих вопросов позволяет выявить задачу, которая, насколько нам известно, пока еще не обсуждалась в литературе. Суть проблемы, образно говоря, состоит в том, что современные методы интеллектуальной деятельности, пораженные вирусом интеллектуального терроризма, слишком часто превращают работников умственного труда и учащихся в пациентов, инвалидов и покойников. Необходимо коренным образом изменить ситуацию, добиться кардинального улучшения форм и методов умственной работы, научиться решать более сложные интеллектуальные задачи с более высоким качеством за меньшее время и без ущерба для здоровья. Интеллектуальная безопасность цивилизации — комплексное свойство глобальной интеллектуальной деятельности людей, позволяющее: • своевременно решать все более сложные интеллектуальные задачи, обеспечивающие неуклонное развитие цивилизации; • защитить человеческий мозг от опасных и вредных для здоровья перегрузок, сводя их к минимуму или полностью исключая. Принцип «сначала калечим, потом лечим» неэффективен ни с экономической, ни с медицинской точки зрения. Поэтому мы выдвигаем другой принцип: система «наука — образование» не должна быть вредной для здоровья. Однако нынешняя наука не может не калечить — так уж она устроена. Почему? В частности потому, что на протяжении всей истории создатели
24 Часть!.ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? научных теорий и методов ставили перед собой какие угодно цели и задачи, но только не задачу эффективной защиты человека от интеллектуальных перегрузок и неоправданных трудностей. По этой причине человеческий мозг, этот хрупкий сосуд разума, сталкиваясь с демоном науки, оказывается в крайне уязвимом положении. Не выдерживая запредельной нагрузки, он получает вызванные стрессом многочисленные травмы. Чтобы устранить вопиющее рассогласование между невообразимой сложностью науки и скромными интеллектуальными возможностями среднего человека, необходимо уяснить, что психологическая сложность науки не является постоянной. Наоборот, это переменная величина, которой можно управлять. И, самое главное, уменьшать ее в желаемых (хотя и ограниченных) пределах. Для достижения цели необходимо осуществить крайне болезненную операцию — с помощью когнитивно-эргономических методов реконструировать здание современной науки, во всех ее разделах и построениях. И тем самым превратить ее из громоздкого и опасного монстра в дружелюбную науку с человеческим лицом. Чтобы занятия наукой были эффективными, но не вызывали неоправданных трудностей. И не угрожали здоровью человека. Чтобы устранить негативные проявления интеллектуального терроризма, надо создать новое поколение интеллектуальных средств. Это — беспрецедентная по сложности задача. Вообще говоря, пока еще совершенно не ясно, поддается ли она решению. А если поддается, то в какой степени. Однако цель настолько важна и благородна, что стоит провести специальное исследование для более глубокого изучения проблемы. Пихай-пихай! Утрамбовывай! А он не помрет? Слышишь, как вопит. Ничего. Родине нужны образованные люди.
Глава 1. ИНТЕЛЛЕКТУАЛЬНЫЙ ТЕРРОРИЗМ: ФАНТАЗИЯ ИЛИ РЕАЛЬНОСТЬ? 25 ПРОТИВОРЕЧИВЫЕ ТРЕБОВАНИЯ К ЧЕЛОВЕЧЕСКОМУ МОЗГУ Развитие цивилизации сопровождается значительным усложнением интеллектуальных задач, увеличением нагрузки на мозг. В свою очередь, рост нагрузки, повышение напряженности умственного труда нередко приводят к перегрузке мозга. В условиях перегрузки людям намного труднее охватить умом отдаленные последствия своих и чужих решений и действий. Поэтому многие важные детали выпадают из поля зрения и не учитываются. Это может привести и нередко приводит к негативным последствиям. Налицо противоречие. С одной стороны, чтобы избежать нежелательных и опасных для здоровья перегрузок и вызванных ими упущений, необходимо уменьшить нагрузку на мозг. С другой стороны, развитие и усложнение цивилизации приводит к лавинообразному усложнению задач и безостановочному росту их количества. Все это предъявляет к мозгу постоянно растущие требования, направленные на повышение его интеллектуальной производительности. Как разрешить это противоречие? Можно ли выполнить два противоположных требования: • облегчить работу мозга • и одновременно увеличить его умственную продуктивность? КОМПЬЮТЕРНАЯ МИФОЛОГИЯ: ОБЛЕГЧАЮТЛИ КОМПЬЮТЕРЫ УМСТВЕННЫЙ ТРУД? Иногда говорят, что компьютеризация и автоматизация умственного труда снимают эту проблему. Дескать, компьютер облегчает работу мозга, принимая на себя значительную часть задач и выполняя их намного быстрее. Благодаря этому нагрузка на человека якобы уменьшается. Это неверно. В действительности использование компьютеров не приводит к уменьшению напряженности труда. Почему? Потому что вместо одних заданий (которые удалось переложить на машину), человеческий мозг обычно получает множество новых задач. В итоге суммарная нагрузка не уменьшается и даже возрастает. Все чаще ученые приходят к выводу, что применение компьютеров во многих или даже большинстве случаев не только не упрощает, а наоборот, резко усложняет интеллектуальные задачи, которые остаются на долю человека. Например, известный нидерландский ученый Эдсгер Дейкстра пишет о «неисчерпаемой» и «беспрецедентной» сложности задач, которые приходится решать программистам [12]. С ним соглашается академик Андрей Ершов: «Программисты составляют первую большую группу людей, работа которых ведет к пределам человеческого знания... и затрагивает глубочайшие тайны человеческого мозга» [13].
26 ЧастьI.ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? — Он поверил, что компьютеры облегчают умственный труд! — Ха-ха-ха! Психолог Михаил Ярошевский отмечает: «Успехи кибернетики приводят к тому, что резко расширяются перспективы передачи техническим устройствам тех умственных операций, которые поддаются формализации. Такие операции раньше поглощали значительную часть интеллектуальных усилий ученого. Однако теперь ситуация изменилась. В новых условиях резко повышаются требования к формированию способностей ученого производить такие действия, которые не могут совершаться компьютерами» [14]. Таким образом, массовая компьютеризация не отменяет интересующую нас проблему повышения продуктивности умственного труда. Напротив, она делает ее еще более актуальной. ЧТО ТАКОЕ ИНТЕНСИФИКАЦИЯ ИНТЕЛЛЕКТА? На наш взгляд, для решения поставленной задачи следует перейти от экстенсивной умственной деятельности к интенсивной. Поясним термины. Деятельность называется экстенсивной, если скорость, с которой мозг решает задачи, предполагается относительно неизменной, а выполнение сложной работы в сжатые сроки достигается за счет уплотнения рабочего времени и удлинения рабочего дня. Это означает, что человек работает на износ — по 12, 16 или 20 часов в сутки. Причем перерывы для отдыха сокращаются почти до нуля («бутерброд перехватить некогда!»). Если сотрудник, действуя в таком режиме, выполняет работу досрочно и с высоким качеством, его называют интеллектуальным героем. И ставят в пример: он сделал невозможное! При этом считается хорошим
Глава!. ИНТЕЛЛЕКТУАЛЬНЫЙ ТЕРРОРИЗМ: ФАНТАЗИЯ ИЛИ РЕАЛЬНОСТЬ? 27 — Крути быстрее! Не ленись! — Куда уж быстрей — сейчас мозги лопнут! — Давай-давай! И запомни: повышение умственной продуктивности — задача номер один! тоном стыдливо умалчивать о том, насколько подобная работа приблизила нашего героя к больнице или могиле. При интенсивной умственной деятельности своевременное окончание задания достигается не за счет подобных варварских методов, а за счет увеличения скорости работы мозга. Интенсификация интеллекта — совокупность интеллектуальных приемов и средств, изменяющих режим функционирования человеческого мозга в благоприятном направлении, чтобы использовать его возможности на полную мощность. Указанные средства специально конструируются таким образом, чтобы одновременно • улучшить работу ума за счет повышения продуктивности мозга, • облегчить умственный труд путем минимизации интеллектуальных затрат на единицу получаемых интеллектуальных результатов. Вообще говоря, эта идея не нова. На протяжении всей истории человечество безостановочно изобретало новые интеллектуальные средства, улучшающие и облегчающие работу ума. Однако делалось это в значительной степени неосознанно, отчасти вслепую и во многом стихийно. Такое положение нетерпимо. Необходимо взять этот процесс под контроль. И превратить его в ясный, осознанный, целеустремленный и, самое главное, массовый.
28 ЧастьI. ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? КРИТЕРИЙ ДЕКАРТА И ЭРГОНОМИЗАЦИЯ НАУКИ Крупнейший французский мыслитель Рене Декарт подчеркивал, что научные открытия и изобретения следует производить не путем беспорядочного блуждания наугад по дорогам науки, а с помощью метода. «Под методом же я разумею достоверные и легкие правила, строго соблюдая которые человек никогда не примет ничего ложного за истинное и сможет добывать новое знание — все, что он способен познать — без лишней траты умственных сил» [15]. Выделенные слова можно охарактеризовать как критерий Декарта. С современных позиций можно сформулировать его так. При разработке эффективных методов реализации любой умственной работы (будь то в науке, технике или в других областях) во главу угла — наряду с принципом быстрого и качественного выполнения работ — следует ставить принцип минимизации умственных усилий. То есть минимизацию затрат нервной энергии человеческого мозга на единицу создаваемой интеллектуальной продукции. Удобнее дать эту мысль в краткой формулировке: Критерий Декарта Чтобы улучшить работу ума, надо минимизировать интеллектуальные | усилия, затрачиваемые на получение нужного результата. В этой книге мы пытаемся следовать по пути, который наметил гениальный французский мыслитель. В качестве драгоценного компаса — компаса мудрости — мы намерены использовать критерий Декарта. О ЧЕМ ЭТА КНИГА? Повторим вопрос: можно ли улучшить работу ума и одновременно облегчить деятельность мозга, чтобы интеллектуальная работа выполнялась без ущерба для здоровья? На первых порах нет необходимости решать столь сложную проблему в общем виде. Вполне достаточно продемонстрировать существование эффективного решения хотя бы для некоторых значимых частных случаев. Подобный прием покажет, что проблема не безнадежна, что она в принципе поддается решению. А раз так, появляется обоснованная надежда на то, что, действуя по аналогии, можно искать решение и для других случаев. Возможность практической реализации новых идей продемонстрируем на примере языка ДРАКОН. Это слово означает:
Глава 1. ИНТЕЛЛЕКТУАЛЬНЫЙ ТЕРРОРИЗМ: ФАНТАЗИЯ ИЛИ РЕАЛЬНОСТЬ? 29 Д ружелюбный Р усский А лгоритмический язык К оторый О беспечивает Н аглядность Язык ДРАКОН — общедоступный интеллектуальный инструмент нового типа. Он специально сконструирован для облегчения и улучшения работы ума интеллектуальных работников и учащихся. Он особенно полезен при разработке алгоритмов, решении трудных задач, систематизации и автоформализации профессиональных знаний, описании структуры человеческой деятельности. А также многих других задач, о которых речь впереди. Отличие ДРАКОНа в том, что это не текстовый, а визуальный язык. Образно говоря, он прокладывает кратчайший путь к цели, взрывая математические скалы и препятствия динамитом наглядных картинок. Благодаря новым приемам многие (хотя, разумеется, далеко не все) сложные проблемы превращаются в простые. Непонятное становится понятным. В итоге достигается искомый выигрыш. Производительность растет. Качество улучшается. Трудная работа облегчается и оказывается более приятной. Умственные перегрузки резко уменьшаются, опускаясь намного ниже опасной черты.
30 ЧастьI. ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? СЕКРЕТЫ МУДРОГО ДРАКОНА: ОБЪЯСНЕНИЕ НА ПАЛЬЦАХ Некоторые идеи, связанные с языком ДРАКОН, необычны. Их очень трудно изложить кратко, понятно и вместе с тем строго научно. Чтобы избавить читателя от утомительных длиннот и громоздких объяснений, этот параграф написан в форме забавного диалога. Автор. Не правда ли, выполняемая вами работа очень сложна и требует больших умственных усилий? Так вот, если изобразить вашу работу на языке ДРАКОН, наблюдается следующий неожиданный эффект. Хорошо знакомая задача на глазах преображается и предстает перед вашим изумленным взором в совершенно новом свете. Она резко упрощается и становится ясной, четкой и обозримой. То, что выглядело сложным и запутанным, оказывается прозрачным и очевидным. Смутное — отчетливым. Абстрактное — наглядным. А прежде скрытые ошибки видны, как на ладони. Читатель. Но ведь чудес не бывает! За счет чего это достигается? Автор. За счет использования более эффективных (более дружелюбных по отношению к человеку) графических средств представления профессиональных знаний, проектов и документации. Читатель. Наверно, это очень трудно? Автор. Как раз наоборот. Язык наглядных образов — самый легкий язык. Девиз ДРАКОНа: «Взглянул — и сразу стало ясно!». Читатель. Но ведь языков и так расплодилось великое множество. Зачем создавать еще один? Автор. Пришла хозяйка в магазин — товару много, а купить нечего. В общем, языки есть, да не про нашу честь. Давайте послушаем притчу. ПРИТЧА О том, как Господь Бог языки создавал На восьмой день Творения, когда мир уже был создан, Господь приступил к разработке формальных языков. И тут произошло нечто удивительное. — Поскольку больше всего я люблю программистов, — заявил Всевышний, — специально для них я создал восемь тысяч прекрасных языков. — А как же остальные? — удивились референты и апостолы. — Ведь им тоже нужны свои языки. — Какие такие остальные? — Ну, все остальные, кроме программистов. Физики, химики, геологи, медики, энергетики, атомщики, управленцы, экономисты, биологи, юристы всякие. — Зачем им свои языки? Пусть пользуются языками программирования.
Глава!. ИНТЕЛЛЕКТУАЛЬНЫЙ ТЕРРОРИЗМ: ФАНТАЗИЯ ИЛИ РЕАЛЬНОСТЬ? 31 — Да они их не знают. — Что значит не знают. Пускай выучат. Наступило неловкое молчание. Наконец, апостол Павел дипломатично произнес: — Ваше Божественное Всемогущество! Поскольку Вы сами создали все языки, для Вас выучить язык программирования — раз плюнуть. Но человек слаб. — Это верно, он слаб, — подтвердил Господь. — Поэтому для среднего работника умственного труда (не программиста), у которого своих забот хоть отбавляй, разобраться в тонкостях программирования довольно трудно. — Трудности можно преодолеть. — Можно-то оно можно. Так ведь душа не лежит, потому как — противно, а главное — зачем? Нельзя же насильно заставлять человека учить то, что ему не нужно для работы. Для большинства людей язык программирования — это «собачий» язык, а написанные на нем программы — странная окрошка из египетских иероглифов. Они непонятны никому, кроме их создателей. — Что вы такое говорите! — возмутился Господь. — Сразу видно, что вы отстали от жизни. Академик Ершов учит, что «программиро-ние — вторая грамотность». Нынче даже школьники программы освоили. А студенты их, как орехи, щелкают. Запомните: программирование должны знать все! Это и будет общий язык для взаимопонимания между специалистами. И никаких других языков не нужно. Все. Совещание окончено. Выполняйте! Однако, как это часто бывает, с реализацией руководящих указаний по неизвестным причинам возникла небольшая заминка. Или, наоборот, большая. Потому что лозунг «программирование — вторая грамотность», подразумевающий чуть ли не поголовное умение программировать, воплотить в жизнь до сих пор не удалось. Практика показывает, что умеющие программировать составляют менее 5% от общей численности работников умственного труда. Поэтому сегодня в сообществе интеллектуальных работников образовался значительный языковый дисбаланс. Он заключается в том, что меньшинство E% программистов) владеет огромным языковым богатством, включающим 8000 языков программирования. А подавляющее большинство (95% специалистов) кроме языка математики не имеют в своем распоряжении никакого другого широко распространенного и универсального формального средства. Читатель. Так, может, этим специалистам и не нужны никакие языки? Автор. Это не так. Язык — интеллектуальное оружие специалиста. Чем
32 Часть!ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? лучше язык, тем лучше работает мозг, тем выше производительность умственного труда. Читатель. Как же быть? Автор. Прежде всего, следует признать, что при выборе генерального направления разработки искусственных языков допущена стратегическая ошибка. Нынешняя ситуация, когда 95% специалистов не имеют языка, пригодного для быстрого и эффективного решения своих задач, является ненормальной и неприемлемой. Читатель. Где же выход? Автор. Нужно устранить диспропорцию в обеспечении специалистов языковыми средствами. Поскольку меньшинство (то есть программисты) уже располагает достаточным числом высокоэффективных языков, настало время подумать об остальных. Сегодня необходимо создать не очередной язык для меньшинства, а язык для всех, который позволит укрепить слабое звено и улучшить умственную продуктивность большинства специалистов. Для этого нужно построить формальный или частично формальный язык, который был бы не «собачьим» или «птичьим», а «человечьим» — общедоступным, удобным и понятным для каждого. Язык ДРАКОН как раз и призван хотя бы отчасти заделать эту зияющую брешь. ДРАКОН — это язык не для элиты, а для широких масс, которые категорически не приемлют «птичьи» языки программирования. СМЕНА ТЕРМИНОВ ИЛИ ИЗМЕНЕНИЕ КОНЦЕПЦИИ? Читатель. Стало быть, ДРАКОН — это не язык программирования, а что-то новенькое. Как же прикажете его величать? Автор. Назвать можно как угодно. Например, «технологический язык», сокращенно «техноязык». Читатель. Все-таки непонятно: зачем менять устоявшуюся терминологию, к которой все привыкли? Чем вам не нравится название «язык программирования»? Автор. Речь не о смене терминов, а о коренном изменении концепции. Давайте начнем от печки. Мы говорим об ученых, врачах, технологах, педагогах, бизнесменах и других работниках умственного труда. О тех, кто не программировал, не программирует и не собирается программировать. О тех, кому по характеру работы это просто не нужно. Потому что их работа заключается совсем в другом. Так вот, цель состоит в том, чтобы создать для этих людей новый язык, который помог бы им решать те задачи, которые они сегодня решают, но делать это более быстро и эффективно. Таким образом, речь идет не о программировании, а совсем о других видах деятельности. Поэтому название «язык программирования» здесь просто неуместно. Читатель. Все равно непонятно. Автор. Рассмотрим пример. Химик написал формулу
Глава 1. ИНТЕЛЛЕКТУАЛЬНЫЙ ТЕРРОРИЗМ: ФАНТАЗИЯ ИЛИ РЕАЛЬНОСТЬ? 33 НС1 + NaOH - NaCl + Н2О Какой язык здесь использован? Ясно, что это не язык программирования, а язык химических формул. Последний является «родным» языком химиков и помогает им успешно справляться со своими проблемами. Правда, этот язык не общий, а частный — он позволяет решать не все задачи, волнующие химиков, а только некоторые. А за рамками химии он вообще почти никому не интересен. В отличие от него техноязык — это универсальный язык, пригодный для широкого класса задач практически в любых областях человеческой деятельности. САМАЯ СЛОЖНАЯ ВЕЩЬ НА СВЕТЕ Читатель. Что значит «в любых областях деятельности»? Что общего между деятельностью врача и конструктора, финансиста и агронома, металлурга и микробиолога? Автор. Общее то, что все они работают, то есть занимаются деятельностью. Человеческая деятельность — самая сложная вещь на свете. Читатель. Что в ней такого уж сложного? Автор. Деятельность состоит из действий, а последние зависят от условий. При данном условии я выполняю одни действия, при другом — другие. Если работа сложная, приходится учитывать сотни и тысячи условий, которые образуют невообразимое число сочетаний. И для каждого сочетания порою нужно делать совершенно разные цепочки операций. Иногда работник действует интуитивно, наощупь, по обстоятельствам. Некоторые операции человек выполняет сам, другие поручает различным механизмам, роботам, компьютерам. Проблема в том, что до сих пор отсутствует эффективный язык, позволяющий дать целостное и точное описание деятельности во всем ее красочном многообразии, богатстве и многосложности. Выявить ее правила и структуру. Учесть тончайшие отличия и особенности разных профессий (а их — тысячи). Устранить путаницу и неразбериху. Навести порядок. Систематизировать знания о деятельности. И представить их в наглядной и удобной форме. Нынешние многотомные руководства, содержащие описание деятельности, слишком трудны — мозги сломаешь, пока поймешь. К тому же они неполны — многие знания о деятельности нигде не записаны и хранятся только в головах людей. Вытащить их оттуда — сложнейшая задача. Отсутствие удобного языка для описания структуры деятельности сильно затрудняет обучение. Многие важные сведения вообще не зафиксированы в документах и передаются как эпос по принципу «из уст в уста». Язык ДРАКОН призван ослабить или устранить эти недостатки, чтобы хоть как-то ограничить вакханалию путаницы и хаоса. Цель ДРАКОНа — внести порядок в царство анархии. Установить чет-
34 Часть!ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? кие стандарты в области, где их никогда не было. Положить конец цыганской вольнице и неуемному разгильдяйству Постричь всех (кто согласится) под одну гребенку, за счет этого значительно повысить производительность труда. И получить ощутимый экономический эффект. Заметьте, ДРАКОН предоставляет стандартные средства описания деятельности независимо от того, кто выполняет действия: сам человек или созданные им машины, роботы, компьютеры. Кстати, программирование — это тоже деятельность. Поэтому тех- ноязык можно использовать как язык программирования (обратное неверно). Читатель. Ага, так значит ДРАКОН — это все-таки язык программирования! Автор. Послушайте, вы, по-моему, нарочно хотите поссорить меня с теми, ради кого написана эта книга. Надо же учитывать человеческую психологию! Если я скажу, что ДРАКОН — язык программирования, немалая часть потенциальных читателей тут же отшвырнет его со словами: «Это для программистов, мне это не нужно!». Их можно понять, потому что сам термин «язык программирования» для многих уже давно превратился в красную тряпку, в ненавистное пугало. Читатель. А я подозреваю, что вы сознательно пытаетесь обмануть людей, подсунув им старый товар в новой упаковке. ЗАЧЕМ ДРАКОНУ ДВЕ ГОЛОВЫ? Автор. Никакого обмана нет и в помине. Просто язык ДРАКОН выполняет две принципиально разные функции. Для большинства работников он является новым средством повышения эффективности интеллектуального труда, причем у этого средства практически нет аналогов в мировой практике. В этом качестве ДРАКОН не имеет ни малейшего отношения к программированию. Поэтому тем глубокоуважаемым людям, которые не любят или даже ненавидят программирование, можно со всей откровенностью сказать: Вы правы. Язык программирования — ваш враг. Но ДРАКОН — не язык программирования. ДРАКОН - ваш друг. Вторая функция состоит в том, что для программистов ДРАКОН действительно является языком программирования. Таким образом, ДРАКОН имеет две головы, обращенные к совершенно разным аудиториям. Причем каждая голова пытается угадать сокровенные потребности своей аудитории и по возможности удовлетворить их наилучшим образом.
Глава 1. ИНТЕЛЛЕКТУАЛЬНЫЙ ТЕРРОРИЗМ: ФАНТАЗИЯ ИЛИ РЕАЛЬНОСТЬ? 35 Читатель. Стало быть, вы хотите угодить и нашим и вашим? Автор. Вот именно. В этом состоит одно из ключевых преимуществ. Суть в том, что язык ДРАКОН можно использовать как удобный «мост взаимопонимания» между непрограммирующим большинством и программирующим меньшинством. Между «бескомпьютерной» и компьютерной интеллектуальной деятельностью. ВЫВОДЫ 1. Существующие интеллектуальные средства, методы и инструменты драматически отстают от насущных интеллектуальных потребностей практики. 2. Жизнь властно требует создания принципиально новых, гораздо более эффективных интеллектуальных средств и инструментов. 3. Использование компьютеров не приводит к уменьшению напряженности умственной деятельности, потому что вместо одних заданий (которые удалось переложить на машину), человеческий мозг обычно получает множество новых задач. В итоге суммарная нагрузка не уменьшается и даже возрастает. 4. Чтобы повысить результативность мозга и уменьшить напряженность его работы, следует перейти от экстенсивной умственной деятельности к интенсивной. 5. Интенсификация интеллекта — совокупность интеллектуальных приемов и средств, изменяющих режим функционирования человеческого мозга в благоприятном направлении, чтобы использовать его возможности на полную мощность. 6. Указанные средства конструируются таким образом, чтобы одновременно: • улучшить работу ума за счет повышения продуктивности мозга, • облегчить умственный труд путем минимизации интеллектуальных усилий, затрачиваемых на получение нужного результата. 7. Язык ДРАКОН — общедоступный интеллектуальный инструмент нового типа. Он создан для облегчения и улучшения работы ума интеллектуальных работников и учащихся. Предназначен для разработки алгоритмов, систематизации и формализации процедурных профессиональных знаний, описания структуры человеческой деятельности. 8. ДРАКОН предоставляет стандартные средства описания деятельности независимо от того, кто выполняет действия: сам человек или созданные им машины, роботы, компьютеры.
Глава ПСИХОЛОГИЧЕСКИЙ ПОДХОД К АЛГОРИТМАМ Вы в состоянии управлять собственными мыслительными процессами. Ваша способность к творческому мышлению практически беспредельна. Тони и Барри Бьюзен КОГНИТИВНАЯ ПСИХОЛОГИЯ Мы уже знаем, когнитивный — значит познавательный. Когнитивные процессы - - процессы восприятия и мышления, протекающие в голове человека (а не в компьютере). Когнитивная психология (психология познавательных процессов) ставит перед собой амбициозную и волнующую цель — понять природу человеческой мысли. Она: • уподобляет мозг компьютеру, • исследует переработку информации человеком, • рассматривает познание как совокупность процессов переработки информации. Когнитивная психология изучает, как люди получают информацию о мире, как она хранится в памяти человека и преобразуется в знания, как эти знания влияют на наше внимание и поведение [1—3]. Одна из целей когнитивной психологии состоит в том, чтобы выявить скрытые резервы человеческого мозга, повысить творческую продуктивность интеллектуальных работников. КОГНИТИВНАЯ ПСИХОЛОГИЯ И АЛГОРИТМЫ Разработчики алгоритмов и программ, интеллектуальные работники — это живые люди, обладающие мозгом, возможности которого, хотя и велики,
Глава 2. ПСИХОЛОГИЧЕСКИЙ ПОДХОД К АЛГОРИТМАМ 37 но далеко не безграничны. Нужно хорошо знать эти возможности, чтобы использовать их наилучшим образом. Нужно создать максимальный психологический комфорт для работы алгоритмистов, программистов и руководителей. Таким образом, проблема создания алгоритмов и программ — это не только техническая, но и человеческая, познавательная, то есть когнитивная проблема. Под когнитивным фактором в данной книге понимаются познавательные, интеллектуальные, мыслительные, творческие аспекты работы алгоритмистов и программистов. Чем сложнее создаваемые алгоритмы, тем важнее делать акцент на необходимости тщательного учета когнитивных характеристик деятельности людей. Академик Павел Симонов считает, что для разработчиков систем «чрезвычайно важно знание правил, следуя которым живой мозг воспринимает, обрабатывает, фиксирует и использует вновь полученную информацию. Сведения о таких правилах, выявленных в эксперименте, поставляет когнитивная психология» [4]. Использование названных правил позволяет получить практический результат — повысить производительность умственного труда. ПОЧЕМУ ЛЮДИ НЕ ИНТЕРЕСУЮТСЯ СОБСТВЕННЫМ МОЗГОМ? В последние десятилетия в нейробиологических и психологических исследованиях были получены новые и чрезвычайно важные сведения о работе мозга. Они открывают путь к революционным преобразованиям интеллектуального труда, создают предпосылки для кардинального повышения его творческой продуктивности. Фактически мы находимся на пороге стратегической реформы интеллектуального труда, обещающей включение в созидательную работу новых мощных резервов человеческого мозга и интеллекта.1 Но эти результаты в силу известных междисциплинарных барьеров пока еще не стали достоянием бизнесменов, математиков, алгоритмистов, программистов, проектировщиков, социальных технологов и инженеров, разрабатывающих сложные бизнес-процессы и крупномасштабные технические и социальные системы. В итоге создалось парадоксальное положение. Поясним ситуацию на примере. 1 О стратегической реформе интеллектуального труда см. мою книгу «В. Паронджанов. Почему мудрец похож на обезьяну?...» [5].
38 ЧастьI. ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? ПРОГРАММИРОВАНИЕМ ЗАНИМАЮТСЯ ЛЮДИ, ОБЛАДАЮЩИЕ МОЗГОМ Каждый человек имеет мозг. И программисты не исключение. Между тем до сих пор языки, методы и теории программирования строились без учета этого основополагающего факта. Характеристики и параметры мозга никак не учитывались при создании искусственных языков. Правильно ли это? Ведь невозможно максимизировать творческую продуктивность мозга, не учитывая его конструкцию и особенности. Следовательно, традиционные способы создания языков и технологий программирования, игнорирующие конструкцию мозга, являются неудовлетворительными и устаревшими. Думается, этот вывод справедлив и в других случаях. Игнорирование закономерностей работы мозга, недостаточное внимание к когнитивным вопросам приводят к неприятным последствиям: • взаимному непониманию между соавторами сложных проектов, • крупным научно-техническим просчетам, устранение которых требует значительных материальных издержек (связанных с дорогостоящими конструкторскими доработками и трудоемкими переделками программного обеспечения), • ощутимому снижению результирующей производительности труда разработчиков и других участников технических и социальных проектов. I — Отличный мозг! Но в чем дело? Почему он так медленно работает?
Глава 2. ПСИХОЛОГИЧЕСКИЙ ПОДХОД К АЛГОРИТМАМ 39 КОГНИТИВНАЯ ЭРГОНОМИКА Наука о человеческих факторах называется эргономикой. Когнитивные проблемы — важная часть эргономики. Чтобы вычленить когнитивную группу среди других эргономических вопросов, иногда употребляют термины «когнитивная эргономика» и «когнитивно-эргономические проблемы». ПСИХОЛОГИЯ И ЯЗЫК ДРАКОН ДРАКОН — дружелюбный язык, обеспечивающий максимальные удобства для пользователей. Чтобы создать такой язык, надо знать и уметь использовать психологию человека. В первую очередь, психологию восприятия и мышления, то есть когнитивную психологию. Именно она знает тайные приемы и хитроумные средства, позволяющие сделать язык подлинно человечным. При разработке языка ДРАКОН когнитивная психология сослужила хорошую службу. Благодаря ей алгоритмы впервые стали предельно ясными, понятными, доходчивыми, наглядными, легкими для усвоения и анализа. ДРАКОН можно определить как общедоступный визуальный алгоритмический язык, предназначенный для алгоритмизации, проектирования, программирования, моделирования и обучения. ДРАКОН позволяет упорядочить и представить решение любой, сколь угодно сложной процедурной (алгоритмической, деятельностной, технологической, рецептурной) проблемы в виде комплекта наглядных чертежей, выполненных по принципу «Взглянул — и сразу понял!». — Кто сказал, что мозг нельзя улучшить? — А зачем его улучшать? — Чтоб быстрее работал!
40 ЧастьI. ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? ЗАЧЕМ НУЖНА ЧЕЛОВЕЧНОСТЬ? Человечность языка ДРАКОН, стремление создать максимальный комфорт для работы человеческого мозга, всемерная забота о повышении творческой продуктивности персонала позволяет надеяться, что ДРАКОН получит широкое применение в народном хозяйстве, бизнесе, обороне, науке и системе образования. Используя не просто наглядные, а предельно наглядные формы представления знаний, облегчая работу мозга, ДРАКОН обеспечивает заметный рост производительности интеллектуального труда. В основе языка ДРАКОН лежит идея когнитивной формализации знаний. Она позволяет сочетать строгость логико-математической формализации с точным учетом когнитивных характеристик человека [6]. В результате удалось кардинальным образом упростить и облегчить: • процесс алгоритмизации; • описание структуры деятельности; • формализацию профессиональных знаний. Цель создания языка ДРАКОН — обеспечить качественный скачок в повышении продуктивности сложного интеллектуального труда. Это достигается за счет увеличения интеллектуальной производительности человеческого мозга, более полного использования резервов человеческого интеллекта, создания когнитивных предпосылок для существенного повышения эффективности информационных технологий. НАБОР НЕОБЫЧНЫХ СВОЙСТВ ДРАКОН — алгоритмический язык, обладающий необычными свойствами. Как язык программирования, он удовлетворяет требованиям математической строгости, позволяющим из исходного текста получать объектный код (машинный код для компьютера). Но главное не в этом. При создании ДРАКОНа основное внимание уделялось человеческому фактору, повышению эргономических характеристик алгоритмов и программ, улучшению наглядности и доходчивости процессов и технологий. Это позволило не на словах, а на деле превратить ДРАКОН в язык для улучшения работы ума, язык понимания и взаимопонимания, язык развития интеллекта. ВЫВОДЫ 1. Традиционные цели и методы создания искусственных языков, в частности языков программирования, следует признать во многом устаревшими. 2. Последние исследования в области нейробиологии, когнитивной психологии и эргономики позволили получить новые и чрезвычай-
Глава 2. ПСИХОЛОГИЧЕСКИЙ ПОДХОД К АЛГОРИТМАМ 41 но ценные сведения о работе мозга. 3. Из-за междисциплинарных барьеров эти сведения практически неизвестны бизнесменам, математикам, алгоритмистам и программистам. Они не используются при разработке алгоритмических языков. В результате эргономическое качество языков снижается. А сфера их применения — сужается. 4. Чтобы поправить дело, при разработке нового поколения языков нужно активно применять достижения наук о мозге и психике с целью повышения продуктивности человеческого мозга. 5. Концепция искусственных языков нового поколения опирается на междисциплинарный подход и коренным образом изменяет традиционные представления о назначении искусственных языков и наборе приоритетных требований к ним. 6. При создании искусственных языков во главу угла следует ставить не только математические, но и гуманитарные вопросы и требования, которые должны быть соответствующим образом детализированы.
Глава МОЖНО Л И СОЗДАТЬ АЛГОРИТМИЧЕСКИЙ ЯЗЫК, УЛУЧШАЮЩИЙ ПОНИМАНИЕ И ВЗАИМОПОНИМАНИЕ? — Скажите, отчего разбрелись все ученые в разные стороны и каждый говорит языком, которого другой не понимает? Отчего мы все изучили, все описали и почти ничего не знаем? — Извините, это не мой предмет, я только собираю факты — я статистик. Владимир Одоевский ПОЧЕМУ СПЕЦИАЛИСТЫ НЕ ПОНИМАЮТ ДРУГ ДРУГА? В 1880 году баварский ксендз Иоган Шлейер, стремясь улучшить взаимопонимание между людьми, придумал язык «воляпюк» (искаж. от world speak, что значит «всемирный язык»). Чуть позже варшавский врач Людвиг Земенгоф изобрел эсперанто. Хотя эти проекты всемирных языков не оправдали надежд, однако они сыграли положительную роль, ибо приковали внимание к назревающей проблеме — созданию искусственных языков. Сегодня, когда число искусственных языков программирования перевалило за восемь тысяч, проблема взаимопонимания между людьми почти так же далека от решения, как и во времена Шлейера и Земенгофа. Да, действительно, языки Бейсик, Паскаль, Си# и многие другие давно стали всемирными языками. Однако популярность языков вовсе не говорит о том, что написанные на них программы понятны всем, кому это нужно. Многие программисты жалуются, что свою собственную программу они с трудом понимают через полгода, а то и через месяц. А еслигречь
Глава 3. МОЖНО ЛИ СОЗДАТЬ АЛГОРИТМИЧЕСКИЙ ЯЗЫК, УЛУЧШАЮЩИЙ ПОНИМАНИЕ...? 43 идет о чужой программе? Тогда становится совсем тяжко. Нередко бывает легче написать свою программу, нежели разобраться в том, что делает чужая [1]. Поэтому среди требований, предъявляемых к современным алгоритмическим языкам, на первое место все чаще выходит понятность алгоритмов и программ (comprehensibility) [2, 3]. Что такое понятность алгоритмов и программ? Понятность алгоритма — свойство алгоритма минимизировать интеллектуальные усилия, необходимые для его понимания человеком при зрительном восприятии текста алгоритма. Понятность программы — свойство программы минимизировать интеллектуальные усилия, необходимые для ее понимания человеком при зрительном восприятии текста программы [2]. РАССКАЗ ДЖОЗЕФА ФОКСА Низкая понимаемость программ — слабое место современного программирования. Джозеф Фокс, один из руководителей фирмы ИБМ, описывает типичный случай. Страдания бедного программиста Некий превосходный программист спроектировал и написал программу определения орбитальных характеристик искусственного спутника Земли. Он первым закончил программирование и получил великолепный результат. Программа была написана на языке Фортран и занимала около четырех страниц плотного фортрановского текста. Он знал свою программу вдоль и поперек. Программа работала как часы, и все шло отлично. Но вот, месяца через три, нашего виртуоза попросили добавить к программе несколько новых функций. Он достал документацию (описание программы) и принялся ее изучать. Тут-то и начались чудеса. Оказалось, он все начисто забыл. Почему? Потому что эти три месяца он не прохлаждался, а трудился в поте лица и успел создать множество других программ. В этом и состоит разгадка тайны, объясняющей его странную забывчивость. Все очень просто! Голова нашего героя была забита новыми заботами, поэтому-то он и забыл свою старую программу. Неудивительно, что спустя три месяца он глядел на нее, как баран на новые ворота! Штудируя документацию, несколько дней он мучительно пытался вспомнить, что же происходит в его программе. А ведь он сам ее написал! Сколько бы сил он потратил, если бы это была чужая программа! [4].
44 Часть I. ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? Конечно, это старая история. Но, увы, с тех пор мало что изменилось. ПРОБЛЕМА ПОНИМАНИЯ — БОЛЕВОЙ НЕРВ СОВРЕМЕННОЙ НАУКИ Низкая понимаемость (непонятность) алгоритмов и программ доставляет программистам немало хлопот. И заметно снижает производительность труда. Речь идет не о мелочах, а об одной из важнейших проблем, которая представляет собой болевой центр практического программирования. Данная проблема ухудшает экономические показатели программирования как мировой отрасли интеллектуального производства. Хотя в последние годы появилось много новых средств и технологий программирования, однако удовлетворительное решение данной проблемы (проблемы создания ПОНЯТНЫХ программ) пока не найдено. Постепенно стало ясно, что улучшение понятности алгоритмов, программ, проектов и технологий, — исключительно сложная проблема, чем- то напоминающая проблему общения и взаимопонимания ученых и специалистов. Как известно, информационный взрыв, усложнение решаемых задач и связанная с этим специализация приводят к негативной тенденции. По словам академика Никиты Моисеева, «ученые начинают все хуже и хуже понимать друг друга» [5]. В особенности это касается взаимодействия работников из разных отраслей науки и техники, что создает значительные трудности для общения исследователей, занятых решением межотраслевых комплексных проблем. ЯЗЫК ДРАКОН КАК «ЭСПЕРАНТО» ДЕЛОВОГО МИРА А нельзя ли взмахнуть волшебной палочкой и, используя обширный опыт создания языков программирования, придумать всемирный язык принципиально нового типа? Образно говоря, нельзя ли создать «эсперанто» делового мира, облегчающий взаимопонимание специалистов разных профессий? Трудность в том, что подавляющее большинство специалистов использует для общения не языки программирования, а совсем другие средства. В самом деле, на каком языке разговаривают и решают свои профессиональные проблемы специалисты народного хозяйства и социальной сферы? Какой язык является для них «родным», привычным, «свойским»? Ответ известен. Это естественный человеческий язык, включающий научные понятия и термины, математические и иные формулы, а также графики, чертежи, диаграммы, карты, схемы и т. д. Неприятность в том, что этот язык слабо формализован. Он допускает двусмысленности, пробелы, неточности. К тому же он не унифицирован: разные специалисты фактически используют разные профессиональные языки.
Глава 3. МОЖНО ЛИ СОЗДАТЬ АЛГОРИТМИЧЕСКИЙ ЯЗЫК, УЛУЧШАЮЩИЙ ПОНИМАНИЕ...? 45 Задача формализации и унификации множества профессиональных языков с целью обеспечить эффективное взаимопонимание между специалистами любых профессий, включая программистов, является, хотя и важной, но, увы, неразрешимой. Положение в корне меняется, если ограничиться процедурными профессиональными знаниями. Именно эту задачу решает язык ДРАКОН. Он построен путем формализации, неклассической структуризации и эр- гономизации блок-схем алгоритмов и программ, описанных в стандартах ГОСТ 19.701-90 и ISO 5807-85. ЧТО ТАКОЕ ИНТЕЛЛЕКТУАЛЬНОЕ ВЗАИМОПОНИМАНИЕ? Современная цивилизация немыслима без крупномасштабных исследований и разработок. Проекты становятся все сложнее и крупнее. Примерами больших проектов являются космические корабли Спейс Шаттл и Энергия- Буран, атомные электростанции и химические заводы. Постоянно усложняются научные исследования в теоретической физике, биологии, медицине. Во всех подобных случаях возникает вопрос: как добиться взаимопонимания между соисполнителями работ? Трудность в том, что каждый исследователь и разработчик, каждый участник общего дела хорошо знает лишь свой собственный, относительно небольшой (по размерам), хотя и весьма сложный (по глубине идей) участок работы. И довольно смутно представляет, что творится у соседей. Отсюда взаимные недоразумения, неувязки и ошибки на стыках. Логично спросить: в чем причина неприятностей? Не слишком ли большие ресурсы (людские, материальные, финансовые и временные) приходится затрачивать для обеспечения эффективного взаимодействия специалистов, участвующих в совместной работе? Почему крупные исследования и разработки нередко затягиваются на месяцы, а то и на годы? С такими или примерно такими проблемами мы столкнулись при построении орбитального корабля Буран. Опыт Бурана показывает, что вопрос об интеллектуальном взаимопонимании специалистов зачастую играет ключевую, основополагающую роль и во многом определяет успех дела. При создании сложнейшего комплекса бортовых и наземных программ Бурана приходится расплетать хитроумный клубок донельзя запутанных проблем. Поэтому в бой вступает целая армия специалистов разных профессий из множества разных организаций. На начальном этапе работ эти люди очень плохо понимают друг друга. Это именно тот случай, когда запредельная сложность проблемы и связанная с нею узкая специализация приводят к смешному, но, увы, реальному парадоксу, когда «специалисты по клизме» не понимают «специалистов по наконечнику». Тем не менее, создаваемые ими алгоритмы, больше напоминающие первозданный алгоритмический хаос, раздираемый молниями вопиющих неувязок, в конечном итоге должны превратиться в единый филигранный
46 Часть I. ЗАЧЕМ НУЖЕН ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК? узор, управляющий Бураном с баснословной точностью и надежностью. Таким образом, проблема стара, как мир. Чтобы избежать печальной участи строителей вавилонской башни, участники сложного проекта должны научиться очень хорошо понимать друг друга. В противном случае многочисленные ошибки «на стыках» могут помешать успеху разработки [6—9]. В ЧЕМ ОСОБЕННОСТЬ ДРАКОНА? Недостаток традиционного подхода состоит в том, что создатели языков и компьютерных систем, как подчеркивает психолог Дональд Норман, «слишком часто начинают с машины, а о человеке думают только в конце, когда уже поздно» [10]. Чтобы избежать подобных ошибок, в ходе разработки языка ДРАКОН был выбран совершенно иной подход. Была объявлена стратегическая цель. Стратегическая цель языка ДРАКОН Язык должен создать наиболее комфортные условия для работы человеческого интеллекта, обеспечить наилучшие возможности для повышения эффективности коллективного разума специалистов. В соответствии с этой программной установкой была поставлена задача: создать общедоступный, предельно легкий в изучении и удобный в работе язык, позволяющий решать проблемы ценою минимальных интеллектуальных усилий. Язык, который в силу своей изначальной ориентации на человека мог бы стать подлинно «народным», то есть «родным» для специалистов практически любого профиля (а не только программистов). СТАНЕТ ЛИ ДРАКОН ЧЕМПИОНОМ МИРА ПО КРИТЕРИЮ «ПОНЯТНОСТЬ АЛГОРИТМОВ»? Данная книга имеет сугубо практический характер. Ниже будет показано, что когнитивный подход — это рабочий метод, дающий полезные плоды. Он позволяет улучшить понятность алгоритмов и программ, повысить производительность сложного интеллектуального труда. Мы постараемся обосновать этот тезис, постепенно раскрывая особенности языка ДРАКОН. Как и все прочие языки, ДРАКОН опирается на математику и логику. Однако сверх того, он самым тщательным образом учитывает когнитивные вопросы. Благодаря систематическому использованию когнитивно-эргономических методов ДРАКОН приобрел уникальные эргономические характеристики. Можно предположить, что в будущем ДРАКОН сможет претендовать на звание чемпиона по критерию «понятность алгоритмов и программ».
Глава 3. МОЖНО ЛИ СОЗДАТЬ АЛГОРИТМИЧЕСКИЙ ЯЗЫК, УЛУЧШАЮЩИЙ ПОНИМАНИЕ...? 47 ВЫВОДЫ При создании языка ДРАКОН были выдвинуты следующие гуманитарные требования. 1. Улучшить работу человеческого ума. 2. Предложить эффективные средства для описания не только традиционных алгоритмов, но и структуры человеческой деятельности в любой отрасли знаний (включая любые бизнес-процессы). 3. Предоставить человеку такие языковые средства, которые резко упрощают восприятие сложных процедурных проблем и общение с коллегами, делают непонятное понятным. И за счет этого буквально заставляют человека мыслить отчетливо, глубоко и продуктивно. В этих условиях вероятность заблуждений, просчетов и ошибок неизбежно падает, а производительность растет. 4. Радикально облегчить межотраслевое и междисциплинарное общение между представителями разных организаций, ведомств, отделов, лабораторий, научных школ и профессий. 5. Устранить или уменьшить барьеры взаимного непонимания между работниками различных специальностей (врачами и физиками, математиками и конструкторами, биологами и экономиками и т. д.), а также программистами и теми, у кого аллергия к любому программированию. 6. За счет использования когнитивно-эргономического подхода к проектированию синтаксиса и семантики языка добиться кардинального улучшения качества программного обеспечения по критерию «понятность алгоритмов и программ».
Часть II ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН»
Глава ИЗЮМИНКИ ЯЗЫКА ДРАКОН Графический язык является главным средством достижения наглядности. Константин Гомоюнов ВВЕДЕНИЕ В этой части (главы 4—10) дано популярное (неформальное) описание языка ДРАКОН. Этот язык построен путем значительной доработки и улучшения блок-схем алгоритмов (flowcharts) [1]. Для обозначения блок-схем, построенных по правилам языка ДРАКОН, используется термин «дракон-схемы». ПРЕИМУЩЕСТВА ДРАКОН-СХЕМ Чем же отличаются дракон-схемы от блок-схем? Блок-схемы [1] не обеспечивают автоматическое преобразование алгоритма в машинный код. Дракон-схемы, напротив, пригодны для формализованной записи, автоматического получения кода и исполнения его на компьютере. Однако более важным является второе (когнитивное) отличие. Хотя блок-схемы порою действительно улучшают понятность алгоритмов, однако это происходит не всегда, причем степень улучшения невелика. Кроме того, есть немало случаев, когда неудачно выполненные блок- схемы запутывают дело и затрудняют понимание. В отличие от них дракон-схемы удовлетворяют критерию сверхвысокого понимания. Благодаря использованию специальных формальных и неформальных когнитивных приемов дракон-схемы дают возможность изобразить решение любой, сколь угодно сложной процедурной проблемы в предель-
52 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» но ясной, наглядной и доходчивой форме. Это позволяет значительно сократить интеллектуальные усилия персонала, необходимые для разработки и отладки алгоритмов и программ. ИКОНЫ И МАКРОИКОНЫ Графоэлементы (графические буквы) языка ДРАКОН называются иконами (рис. 1). Подобно тому, как буквы объединяются в слова, иконы объединяются в составные иконы — макроиконы (рис. 2). Соединяя иконы и макроиконы по определенным правилам, можно строить разнообразные алгоритмы, примеры которых показаны на рис. 3-6, 10, 12, 14-17, 19,20. Шампур-блок — часть дракон-схемы, имеющий один вход сверху и один выход снизу, расположенные на одной вертикали. Примерами шампур-блоков являются иконы ИЗ, И5 - И10, И12 - И16, И18, И20 - И21 (рис. 1) и макроиконы 2 — 20 (рис. 2). ЗАЧЕМ НУЖНА ВЕТКА? Когда принцесса Анна развелась с маркизом Ришелье, возник спор о разделе имущества. Судья потребовал указать: какие покупки принцесса сделала до замужества, а какие после. А теперь забудем об этой семейной драме и сравним между собой рис. 3 и 4. Легко видеть, что рис. 3 не позволяет ответить на вопрос судьи. Зато рис. 4, наоборот, содержит нужную информацию. Более того, алгоритм на рис. 4 нарочно нарисован так, что покупки, сделанные до и после замужества, четко разделены на два столбика. Такой прием называется делением алгоритма на смысловые части. А сами части называются ветками. Чтобы лучше вникнуть в суть дела, разберем еще один пример. На рис. 5 представлен алгоритм «Сборы на рыбалку», содержащий довольно большую последовательность действий. Иной раз такая последовательность может оказаться ужасно длинной и утомительной для чтения. Можно ли облегчить восприятие и анализ подобных «длиннющих» алгоритмов? Можно ли сделать «долговязый» алгоритм обозримым и удобным для быстрого понимания? Да, можно. Чтобы облегчить работу читателя и сделать алгоритм дружелюбным, надо заблаговременно разрезать «длинную кишку» и разбить ее на смысловые части. Сделать это нетрудно. «Сборы на рыбалку» (рис. 5) — это алгоритмический рассказ, в котором можно выделить три крупных куска, три самостоятельных темы: • Подъем и завтрак. • Укладка вещей. • Поездка.
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 53 И1 И2 ИЗ И4 И5 И6 И7 И8 И9 И1О И11 И12 И13 Икона У Название иконы Заголовок Конец Действие Вопрос Выбор Вариант Имя ветки Адрес Вставка Полка Формальные параметры Начало цикла ДЛЯ Конец цикла ДЛЯ И14 И15 И16 И17 И18 И19 И20 И21 И22 И23 И24 И25 Икона 1 хюс ххх XXX ххх! ХЗОСН" X*XJ Название иконы Вывод Ввод Пауза Период Пуск таймера Синхронизатор (по таймеру) Параллельный процесс Комментарий Правый комментарий Левый комментарий Петля цикла Петля силуэта Рис. 1. Иконы языка ДРАКОН
54 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Макроикона Название макроиконы Заголовок с параметрами Развилка Переключатель (число вариантов N>2) Обычный цикл Переключающий цикл Цикл ДЛЯ Цикл ЖДАТЬ Действие по таймеру Полка по таймеру 10 11 12 13 14 15 16 17 18 19 20 Макроикона v'Y Название макроиконы Развилка по таймеру Переключатель по таймеру Обычный цикл по таймеру Переключающий цикл по таймеру Цикл ДЛЯ по таймеру Цикл ЖДАТЬ по таймеру Вставка по таймеру Вывод по таймеру Ввод по таймеру Пуск таймера по таймеру Параллельный процесс по таймеру Рис. 2. Макроиконы языка ДРАКОН
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 55 Каждую тему можно нарисовать в виде ветки. Результат изображен на рис. 6. Назначение икон пояснено в таблице. Икона Название иконы Имя ветки Адрес Пояснение Обозначает начало ветки Обозначает конец любой ветки, кроме последней Вопрос. Где начало и конец у первой ветки на рис. 6? Ответ. Начало — икона «Подъем и завтрак». Конец — «Укладка вещей». Между началом и концом размещается тело ветки. Оно содержит команды «Встань пораньше» и «Позавтракай». Что такое ветка Это смысловая часть алгоритма, которая содержит: • икону «имя ветки» (в ней пишут название смысловой части) • тело ветки, состоящее из команд • одну или несколько икон «адрес» (в любой ветке, кроме последней) • икону «конец» (в последней ветке) Итак, зачем нужна ветка? Чтобы помочь алгоритмисту, программисту и разработчику технологии формализовать смысловое разбиение алгоритма на части. И, что очень важно, дать частям удобные смысловые названия. При этом разделение проблемы на N смысловых частей реализуется путем разбиения алгоритма на N веток. Следует подчеркнуть, что ветка — составной оператор языка ДРАКОН, который не имеет аналогов в известных языках. КАК РАБОТАЕТ ВЕТКА? Ветка имеет один вход и один или несколько выходов. Входом служит икона «имя ветки», содержащая имя (идентификатор) ветки. Графический оператор «имя ветки» не выполняет никаких действий. Это всего лишь метка, объявляющая название смысловой части алгоритма. Исполнение дракон-алгоритма всегда начинается с крайней левой ветки (рис. 4, 6). Выходом из ветки служит икона «адрес», в которой записывается имя следующей по порядку исполнения ветки. Икона «адрес» — это замаскированный оператор перехода (goto). Однако он передает управление не
56 Часть II. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Покупки принцессы Анны Покупки после замужества Покупки после замужества Рис. 3. Эта схема называется «примитив». В примитиве ветки отсутствуют Рис. 4. Эта схема называется «силуэт». Силуэт делится на смысловые части (ветки), которые помогают понять структуру алгоритма
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 57 С Сборы на рыбалку Встань пораньше Позавтракай Возьми удочку Возьми запасные крючки Приготовь наживку Возьми садок для рыбы Возьми с собой еду Поезжай на вокзал Купи билет Сядь в поезд Деление алгоритма на смысловые блоки Первый смысловой блок ПОДЪЕМ И ЗАВТРАК Второй смысловой блок УКЛАДКА ВЕЩЕЙ Третий смысловой блок ПОЕЗДКА Конец Рис. 5. Алгоритм «Сборы на рыбалку»
58 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» ;( Сборы на рыбалку > j4 .'¦J; - < / , 4> w- ;• <', i Встань пораньше Возьми удочку Поезжай на вокзал Позавтракай Возьми запасные крючки Купи билет ^ ^ —^ %- -*%' "' 'у Л Сядь . ^; I Приготовь наживку * в поезд &> Возьми садок для рыбы Конец --¦¦-¦-у- - *¦ - -^ ^ч;- < д -л,/ ^c^J Возьми с собой еду Поездка Рис. 6. Алгоритм-силуэт «Сборы на рыбалку». Сравни с рис. 5 куда угодно, а только на начало выбранной ветки. Вход в ветку возможен только через ее начало. Выход из последней ветки осуществляется через икону «конец». КАК СЛЕДУЕТ РАСПОЛАГАТЬ ВЕТКИ В ПОЛЕ ЧЕРТЕЖА? Ветки упорядочены двояко: логически и пространственно. Логическая последовательность исполнения веток определяется метками, записанными в иконах «адрес». Однако логический порядок — это еще не все. На рис. 7, 8, 9 показаны три разных способа пространственного расположения веток, которые имеют один и тот же логический порядок.
Эти три схемы равносильны, так как имеют один и тот же маршрут: ABFGHC — CUD — DKE — ELMN Правило "чем правее — тем позже" означает: ветка, нарисованная правее, работает позже всех веток, находящихся левее Порядок выполения веток Порядок выполения веток Порядок выполения веток * * t Рис. 7. Плохая дракон-схема. Нарушено правило «Чем правее, тем позже». Ветки D и С перепутаны местами Рис. 8. Плохая дракон-схема. Нарушено правило «Конец находится в крайней правой ветке». Ветки Е и С перепутаны местами. J Рис. 9. Хорошая | (эргономичная)дракон-схема. 5 Все ошибки исправлены.
60 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Чтобы устранить пространственную неоднозначность и облегчить понимание смысла дракон-схемы, вводится Правило. Чем правее — тем позже. Оно означает: ветка, нарисованная правее, работает позже всех веток, находящихся левее нее. Алгоритм, нарисованный согласно правилу «чем правее — тем позже», считается хорошим, эргономичным (рис. 9). Схемы, где это правило нарушается, объявляются плохими (рис. 7, 8). Их использование запрещено. В разрешенных (эргономичных) алгоритмах имеет место следующий порядок работы (рис. 4, 6, 9): • первой работает крайняя левая ветка, последней — крайняя правая; • остальные ветки передают управление друг другу слева направо (при этом может случиться так, что некоторые ветки будут пропущены); • иногда образуется так называемый «веточный цикл». Это происходит, когда в иконе «адрес» указано имя собственной или одной из левых веток. На рис. 10 веточный цикл помечен черными треугольниками. ЧТО ТАКОЕ ШАПКА? Многие алгоритмы чрезвычайно сложны. Чтобы разобраться в хитросплетениях такого алгоритма, нужно прилагать огромные усилия и тратить слишком много времени. Подобную практику следует признать порочной. Алгоритмы можно и нужно сделать эргономичными, легкими для восприятия. Для этого нужно давать читателю маленькие, но умные подсказки, проглотив которые, он мог бы легко сориентироваться в задаче и быстрее понять материал. Одной из таких подсказок служит «шапка». Название объясняется тем, что шапка находится вверху, «на голове» у алгоритма. Шапка — верхняя часть дракон-схемы (рис. 6), которая включает заголовок алгоритма и комплект икон «имя ветки». Назначение шапки — помочь читателю мгновенно (не более, чем за несколько секунд или минут) сориентироваться в задаче. Расчленить ее на части, увидеть смысловую структуру. Причем увидеть не в фигуральном смысле слова, не с помощью воображения, не духовным оком, а своими двумя глазами — на бумаге или экране. Но как это сделать? Трудность в том, что ни один из существующих языков не предоставляет читателю, изучающему сложный алгоритм, эффективной помощи, позволяющей моментально (за несколько секунд) уяснить ее структуру, деление на смысловые блоки.
Подготовка к ловле Рыбацкая работа Обратная дорога Накопай червей Забрось удочку Рыбка попалась? Удалось что-нибудь поймать? Сними добычу с крючка и кинь в садок Доберись до места ловли Зайди в магазин и купи рыбы, чтобы дома не краснеть С хорошим настроением отправляйся домой Насади червяка Насади червяка Рыбацкая работа Обратная дорога Ожидание 11 Обратная [ 1 Ожидание | Обратная Рис. 10. Алгоритм «Рыбная ловля» ш го О) 5 3 -о > о
62 Часть И. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» В языке ДРАКОН имеются специальные средства, обеспечивающие решение задачи. ТРИ ЦАРСКИХ ВОПРОСА Когда мы сталкиваемся с новой незнакомой задачей, в первую очередь мы желаем получить ответ на три царских (наиболее важных) вопроса: 1. Как называется задача? 2. Из скольких частей она состоит? 3. Как называется каждая часть? Именно с этих вопросов начинается наше знакомство с любой задачей при рациональном подходе к делу. Эргономическая хитрость состоит в том, что шапка, угадывая тайное желание читателя, дает ему мощную подсказку — ответ на все царские вопросы. Вот ответы для рис. 6. • Как называется задача? (Читаем заголовок алгоритма). Сборы на рыбалку. • Из скольких частей она состоит? (Считаем иконы «имя ветки»). Из трех. • Как называется каждая часть? (Читаем текст в иконах «имя ветки»). 1. Подъем и завтрак. 2. Укладка вещей. 3. Поездка. ТРЕХЭТАПНЫЙ МЕТОД ПОЗНАНИЯ АЛГОРИТМА Дополнительные эргономические удобства связаны с тем, что шапка занимает «парадное» место в верхней части чертежа. Названия смысловых частей помещены внутри особых рамок уникальной формы, которые легко отыскать взглядом. Благодаря этому шапка моментально приковывает к себе внимание читателя без всяких усилий с его стороны. Это очень важно, так как человеку не приходится рыскать глазами по темным закоулкам алгоритма, пытаясь выудить нужную информацию. Таким образом, ДРАКОН предоставляет читателю эффективный трехэтапный метод познания незнакомого или забытого алгоритма. На первом этапе, анализируя шапку, читатель узнает назначение алгоритма и его деление на смысловые части (ветки). На втором — осуществляет углубленный анализ каждой ветки. На третьем производит разбор взаимодействия веток. КАК РАБОТАЕТ АЛГОРИТМ-СИЛУЭТ? Выполнить алгоритм — значит пройти путь от начала до конца алгоритма.
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 63 Применим это правило к рис. 6. Будем считать, что существует воображаемый бегунок, который при работе алгоритма пробегает алгоритмическую дорожку от иконы «заголовок» до иконы «конец». Вернемся к вопросу: как работает алгоритм-силуэт? Выехав из иконы «заголовок», бегунок мчится вниз по крайней левой ветке. Он движется через станции (рис. 6): • Подъем и завтрак. • Встань пораньше. • Позавтракай. • Укладка вещей. Икона «адрес» — последняя станция первой ветки. Куда ехать дальше? Ответ содержится внутри самой иконы. Эта икона потому и зовется «адрес», что сообщает адрес (название) следующей станции. В данном случае она говорит — следующая станция называется «Укладка вещей». Из рис. 6 видно, что данная станция находится в начале второй ветки. Но как бегунок доберется туда? По какой линии? Ответ прост. Выехав из иконы «адрес», бегунок сворачивает налево и попадает в точку А (рис. 6). Потом движется вверх к точке Б. Затем едет направо по стрелке и въезжает в верхнюю икону «Укладка вещей». Дальше все происходит аналогично. Бегунок скользит вниз по второй ветке. Добравшись до иконы «адрес», узнает адрес следующей станции («Поездка»). Затем огибает схему по линии АВ7 попадает в начало третьей ветки и спускается по ней до конца. На этом выполнение алгоритма заканчивается. В ЧЕМ СЕКРЕТ ИКОНЫ «АДРЕС»? Сейчас мы поступим, как чеховский злоумышленник — будем разбирать рельсы. Имеются в виду линии, окаймляющие алгоритм на рис. 6. Сотрем линию АБ. Уберем также горизонтальные линии, проходящие через точки А и Б. Результат представлен на рис. 11. Интересно, как будет работать алгоритм после этих исправлений? К нашему удивлению, отсутствие «рельсов» никак не сказывается на работе алгоритма. В этом легко убедиться. Выехав из иконы «заголовок», бегунок движется вниз по крайней левой ветке. Опустившись до конца ветки, бегунок попадает в икону «адрес». Казалось бы, это тупик. Рельсы кончились, и дальше ехать некуда. Но это не совсем так. Ведь в иконе «адрес» записан адрес следующей станции («Укладка вещей»). Зная адрес, бегунок прыгнет туда, куда нужно — в начало второй ветки. И поедет вниз. Добравшись до конца второй ветки, Что такое икона «адрес» Ф> Это команда, передающая управление в начало ветки А
64 Часть II. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» он совершит второй прыжок. И попадет в третью ветку. И так далее. Таким образом, икона «Адрес Л» — это команда «Прыгни в начало ветки Л». Или, выражаясь по научному, «Передай управление в начало ветки А». Проще говоря, данная команда — это приказ: «Брось данную ветку и начни выполнять ветку Л». (Выполнять ветку — значит исполнять записанные в ней команды). Переходя от рис. 6 к рис. 11, мы для «упрощения» стерли несколько линий. Теперь мы убедились, что для работы алгоритма они совершенно не нужны. Потому что маршрут бегунка определяют не они, а указания, записанные в иконе «адрес». Тем не менее, указанные линии не следует удалять по эргономическим соображениям. Дело в том, что обрамляющие линии зрительно «склеивают» разрозненные куски алгоритма. Они превращают их в приятный для глаза целостный зрительно-смысловой образ. И наоборот, устранение скрепляющих линий приводит к тому, что схема зрительно рассыпается на части, что мешает увидеть целостный образ. И сбивает с толку читателя (рис.11). ( Сборы на рыбалку Л Подъем и завтрак Встань пораньше Возьми удочку Позавтракай Возьми запасные крючки Поезжай на вокзал Купи билет I Приготовь наживку Сядь в поезд Возьми садок для рыбы Конец Возьми с собой еду Рис. 11. Схема «с разобранными рельсами». Сравни с рис. 6
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 65 ЕЩЕ РАЗ О РАСПОЛОЖЕНИИ ВЕТОК НА ЧЕРТЕЖЕ В начале главы мы затронули вопрос: как следует располагать ветки в поле чертежа? Учитывая важность темы, коснемся ее еще раз. Давайте мысленно перетасуем ветки на рис. 11, как колоду карт. И расположим их на чертеже в произвольном порядке. Легко сообразить, что подобное «перепутывание» веток никак не отразится на работе алгоритма. Потому что очередность работы веток зависит только от команд «адрес». И совсем не зависит от расположения веток на листе бумаги. Словом, сколько ветки ни тасуй, получим тот же самый алгоритм. Здесь есть тонкость. Перестановка веток не отражается на правильности алгоритма. Однако алгоритм должен быть не только правильным, но и понятным, доходчивым. Хаотичное расположение веток затрудняет понимание, что недопустимо. Поэтому нужно обязательно упорядочить ветки в пространстве чертежа. Удобнее всего расположить их слева направо в той последовательности, в какой они включаются в работу. Для этого служит уже известное нам правило: «Чем правее, тем позже». Отсюда вытекает важная эргономическая Рекомендация. Чтобы дракон-схема была наглядной и удобной, ветки следует упорядочить слева направо. Более правая ветка должна работать позже, чем любая ветка, расположенная левее нее. ЧТО ТАКОЕ ШАМПУР? Шампур — вертикальная линия, соединяющая икону «заголовок» и икону «конец». Между этими иконами обычно помещается несколько других икон. Все они, словно кусочки мяса, оказываются нанизанными на шампур (рис. 12). Правило шампура. Выход иконы «заголовок» и вход иконы «конец» должны лежать на одной вертикали. Если это правило выполняется, дракон-схема становится более упорядоченной, эргономичной, легкой для чтения (рис. 12). И наоборот, нарушение данного правила делает схему корявой, изломанной, неудобной для глаза (рис. 13). ЕСТЬ ЛИ В АЛГОРИТМЕ ЦАРСКАЯ ДОРОГА? Маршрут — это путь, ведущий от начала до конца алгоритма. На рис. 5 и 6 показан неразветвленный алгоритм. В нем всего один маршрут. В разветвленном алгоритме на рис. 14 таких маршрутов два. Если тропинок несколько, среди них можно выделить главный и побочные маршруты.
66 Часть II. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Главный маршрут алгоритма — путь, который ведет к наибольшему успеху. Например, на рис. 14 главный маршрут проходит по левой вертикали, и дела обстоят хорошо. Суп не пролился на скатерть, все довольны. Другой (правый) маршрут ведет к неудаче (скатерть испачкалась). Рассмотрим задачу. В запутанном лабиринте, соединяющем начало и конец сложного алгоритма, нужно выделить один-единственный маршрут — «путеводную нить». С ней можно зрительно сравнивать все прочие маршруты, чтобы легко сориентироваться в проблеме и не заблудиться в путанице развилок. Путеводная нить должна быть визуально легко различимой. Бросив беглый взгляд на дракон-схему, мы должны обнаружить четкие ориентиры, позволяющие сразу и безошибочно увидеть царский ПРАВИЛЬНО с В гостях у льва неправильно ( В гостях у льва J ^ l I ^ Лев сердитый? \ да нет Погладь льва I I Лев сердитый? да Дерни льва за хвост нет Погладь льва Дерни льва за хвост Дай льву морковку Дай льву морковку С Конец ) Запомните: в алгоритме обязательно должен быть шампур! Рис. 12. Правильно нарисованный алгоритм. Иконы «заголовок» и «конец» лежат на одной вертикали. Эта вертикаль называется «шампур» (жирная линия). Рис. 13. Неправильно нарисованный алгоритм. Ошибка в том, что иконы «заголовок» и «конец», лежат на разных вертикалях. Эта ошибка называется «Нет шампура».
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 67 маршрут и упорядоченные относительно него остальные маршруты. Для этого вводится Правило главного маршрута. Главный маршрут алгоритма должен идти по шампуру. Это значит, что царский маршрут не может оказаться где-то на задворках дракон-схемы, где его днем с огнем не сыскать. Нет, он всегда должен находиться на самом почетном месте — на крайней левой вертикали. Соблюдение этого правила делает схему зрительно упорядоченной, предсказуемой и интуитивно ясной. Если правило главного маршрута по каким-то причинам оказалось нарушенным (рис. 15), ошибку надо исправить. Для этого нужно поменять местами слова «да» и «нет» в развилках, а также присоединенные к ним гирлянды икон. Действуя таким путем, всегда можно добиться, чтобы на царском пути оказался тот выход иконы «вопрос», который ведет к наибольшему успеху. ПРАВИЛЬНО ( История с супом ) 1 / Суп вылился на скатерть? да .нет Выстирай скатерть Конец Рис. 14. Хорошая (эргономичная) схема. Главный маршрут идет по шампуру Г История с супом J , : Суп вылился на скатерть? „ ч , да' Выстирай скатерть ( Конец ) Рис. 15. Плохая схема. Нарушено правило «Главный маршрут должен идти по шампуру»
68 Часть II. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» ПОБОЧНЫЕ МАРШРУТЫ НЕЛЬЗЯ РИСОВАТЬ КАК ПОПАЛО Побочный маршрут — любой маршрут разветвленного алгоритма за исключением главного. Правило побочных маршрутов. Побочные маршруты алгоритма нужно рисовать справа от шампура по принципу «Чем правее, тем хуже». Это значит: чем правее нарисован побочный маршрут, тем более неприятную ситуацию он описывает. Вот пример из жизни: «О, ужас! Я, кажется, потерял деньги!» Кому случалось делать подобное открытие, знает, что степень огорчения зависит от потерянной суммы. Рассмотрим пять возможных ситуаций, и дадим им оценку. 1 2 3 4 5 Ситуация Я ничего не потерял Я потерял 100 рублей Я потерял 500 рублей Я потерял 1000 рублей Я потерял всю получку Оценка Хорошо Плохо Очень плохо Совсем плохо Хуже некуда На рис. 16 показана дракон-схема, описывающая эту грустную историю. По каждой вертикали идет свой маршрут. Самая первая, крайняя слева вертикаль — это шампур. По ней идет главный маршрут, имеющий оценку «хорошо», потому что все деньги целы. Чуть правее находится вторая вертикаль (потеряны 100 рублей) с оценкой «плохо». Еще правее идет третья вертикаль (пропали 500 рублей) с оценкой «очень плохо». И так далее. Крайняя справа — пятая вертикаль описывает самую скверную ситуацию, когда потеряна вся получка. Таким образом, четыре побочных маршрута, идущие по вертикалям 2, 3, 4, 5, расположены не случайно, а со смыслом. Они выстроены слева направо по принципу «Чем правее, тем хуже». Чтобы алгоритм был понятным, он должен быть стройным, красивым, упорядоченным, то есть эргономичным. Он не должен содержать непредсказуемые и хаотичные хитросплетения линий и икон. Язык ДРАКОН был разработан, в частности, потому, что традиционные блок-схемы алгоритмов, рекомендованные стандартом [1], с эргономической точки зрения, не выдерживают никакой критики. Они напоминают непроходимые джунгли, в которых легко запутаться и почти ничего нельзя понять. ДРАКОН выгодно отличается тем, что его графический узор подчиняется жестким и тщательно продуманным правилам, которые дисциплинируют мышление, облегчают разработку и отладку алгоритмов.
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 69 ¦С История с деньгами Потерял деньги? нет Главный маршрут Оценки \ '."' "'/ У Каждому из пяти маршрутов дана оценка (внизу). Маршруты упорядочены так, что их оценки уменьшаются слева направо (чем правее, тем хуже). Потерял сто рублей? да Потерял пятьсот рублей? нет да Потерял тысячу рублей? да Сократи расходы на пятьсот рублей Не горюй. Бывает хуже '.42 О, Господи! Я потерял всю получку. На что я буду жить? Займи деньги до следующей получки Сократи расходы на тысячу рублей ( Конец ) Хорошо Плохо Очень плохо Совсем плохо Хуже некуда Рис. 16. Маршруты расположены по принципу «чем правее, тем хуже»
70 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Чтобы убедиться в этом, взглянем еще разок на рис. 16 и проведем взглядом по всем вертикалям слева направо. Мы обнаружим не хаос, а строгий порядок. Потому что маршруты нарисованы не как попало, а по правилам. В результате чертеж алгоритма обретает четкую зрительно-смысловую структуру, которая облегчает работу мысли. Читая такой чертеж, человек не станет плутать в потемках. Ведь он заранее знает, что схема алгоритма составлена по мудрому плану: все хорошее — слева, все плохое — справа. Про такой алгоритм можно сказать: «Все ясно, как на ладони!». ЧТО ДЕЛАТЬ, ЕСЛИ ПРАВИЛО «ЧЕМ ПРАВЕЕ, ТЕМ ХУЖЕ» НЕ РАБОТАЕТ? Из физики известно: если начальная скорость ракеты меньше 7,8 километров в секунду (км/с), она непременно упадет на Землю. Если же разогнать ее чуть сильнее, но не больше 11,2 км/с, она станет спутником Земли. При дальнейшем увеличении скорости ракета станет спутником Солнца. А если скорость превысит 16,4 км/с, ракета навсегда простится с Солнечной системой и умчится в безбрежные просторы космоса. Алгоритм этой задачи показан на рис. 17. Мы знаем, что каждой вертикальной линии на дракон-схеме соответствует свой маршрут, причем вертикали следует рисовать не хаотично, а упорядоченно. До сих пор мы пользовались правилом «Чем правее, тем хуже». Однако здесь оно не имеет смысла. Поэтому на рис. 17 выбрано другое правило «Чем правее, тем больше скорость ракеты». Чтобы понять правило, проведем взглядом по схеме слева направо. Мы увидим, что от маршрута к маршруту скорость неуклонно возрастает. Первый слева маршрут самый медленный. На втором маршруте скорость больше. На третьем — еще больше. Наконец, четвертый (самый правый) маршрут описывает ситуацию, когда ракета с огромной скоростью улетает за пределы Солнечной системы. КАК РИСОВАТЬ ПОБОЧНЫЕ МАРШРУТЫ? Правило. Смещение вправо от главного маршрута должно быть не произвольным и хаотичным, а продуманным и логичным. Например, при решении математических задач вертикали можно расположить в порядке увеличения или уменьшения математической величины (числа), соответствующей этим вертикалям. Можно придумать и другие правила, позволяющие сделать схему упорядоченной. Для разных задач могут понадобиться разные правила (рис. 18). Но у всех правил есть общая черта. Главное, чтобы в схеме был не хаос, а порядок. Здесь действует
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 71 С Запуск ракеты у Дано Ракета запускается сточки на экваторе Земли со скоростью V в направлении движения Земли по орбите вокруг Солнца. Скорость V измеряется в км/с. Надо Выбрать скорость ракеты V в зависимости от цели полета. Как упорядочить маршруты? В данной схеме правило счем правее, тем хуже» неприменимо. К счастью, в иконах имеются явно заданные числа (скорость). Поэтому применяем другое правило «чем правее, тем скорость больше». Ракета должна упасть на Землю? нет да Ракета должна стать спутником Земли? да Ракета должна стать спутником Солнца? нет да Запусти ракету со скоростью 7,8 11,2 Запусти ракету со скоростью V < 7,8 Ракета должна покинуть Солнечную систему Запусти ракету со скоростью V ? 16Д Запусти ракету со скоростью Конец Рис. 17. Маршруты упорядочены слева направо согласно правилу «чем правее, тем скорость больше»
с Как рисовать побочные маршруты? Тщательно изучите алгоритм, который собираетесь рисовать да У Можно использовать правило «Чем правее тем хуже»? Используйте правило «Чем правее, тем хуже» Запомните: правила — не самоцель. Они нужны для того, чтобы сделать алгоритм более понятным ГО л ш нет. 7{ Конец ) Можно упорядочить маршруты с помощью чисел? нет -_ - S Да Придумайте новое чем чем чем чем правее, правее, правее, правее, правило, например: тем тем тем тем дальше; выше; быстрее; дороже. Если удалось придумать несколько правил, выберите из них щ// . наилучшее, которое делает алгоритм более понятным Используйте правило «Чем правее, тем число больше» I ^i. iy Используйте выбранное правило о сг 5 ил о m о СГ § Рис. 18. Как рисовать побочные маршруты?
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 73 Правило хорошей хозяйки. Если постараться, порядок всегда можно навести. ЧТО ЛУЧШЕ: ПРИМИТИВ ИЛИ СИЛУЭТ? Напомним определения понятий, о которых читатель уже мог догадаться из рис. 3 и 4. Силуэт — дракон-схема, разделенная на ветки. Примитив — дракон-схема, не имеющая веток. Сравним их между собой. Какая схема лучше? Какая легче для понимания? Чтобы уяснить суть дела, возьмем один и тот же алгоритм (Поездка на автобусе). И изобразим его двумя способами: в виде силуэта (рис. 19) и в виде примитива (рис. 20). Легко сообразить, что силуэт обладает серьезными преимуществами. В самом деле, примитив на рис. 20 не позволяет увидеть деление задачи на смысловые части. Иное дело рис. 19. Тут сразу ясно — алгоритм состоит из четырех частей: • Поиск автобуса. • Ожидание посадки. • Посадка в автобус. • Поездка. Таким образом, в силуэте смысловые части алгоритма четко выделены и сразу бросаются в глаза. Они зрительно и пространственно разнесены в поле чертежа, делая его более понятным. А в примитиве смысловые части не выделены и перемешаны (все в одной куче), что затрудняет чтение и анализ сложных алгоритмов. Правило. Примитив рекомендуется применять, если дракон-схема очень простая (примитивная) и содержит не более 10 икон. В более сложных случаях выгоднее использовать силуэт. Нарушение этого правила обычно чревато неприятностями, ибо мешает читателю выявить сущность решаемой проблемы. И, следовательно, затрудняет и замедляет понимание алгоритма. Например, алгоритм на рис. 20 выглядит громоздким и неоправданно сложным для восприятия. Это вызвано тем, что он содержит 19 икон, однако изображен в виде примитива. Криминал в том, что схема на рис. 20 не позволяет читателю мгновенно (за несколько секунд) распознать зрительно-смысловую структуру алгоритма. В самом деле, из скольких частей состоит решаемая проблема? Глядя на рис. 20, ответить на этот вопрос довольно трудно. А быстро ответить — невозможно. Положение в корне меняется, когда мы смотрим на рис. 19, где тот же самый алгоритм изображен в виде силуэта. Тут деление алгоритма на части «само бросается в глаза». Однако это не все. Не менее важно, что
Г Поездка на автобусе J Найди остановку автобуса и займи очередь Ожидание посадки Ожидание посадки Автобус \ подошел? f !-¦• В автобус \ можно войти * или хотя бы i втиснуться? / да нет , нет ) ¦ : Жди 1 следующий | автобус J ПРАВИЛЬНО Посадка в автобус Ожидание посадки Посадка в автобус Войди в автобус Есть свободные сидячие места? да Сядь на свободное место и расслабься нет Жди следующий автобус Есть \ нет \ деньги 1 ^ на билет? / да Купи билет и поезжай спокойно Езжай \ зайцем \ и дрожи : ',' Езжай до нужной остановки Выйди из автобуса : -С ш о о сто ел о- о -о -С m 41 о Рис. 19. Алгоритм-силуэт «Поездка на автобусе». Сравни с рис. 20. В чем отличие?
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 75 ( Поездка на автобусе )'? ' НЕ П РАВИ Л Ь Н О Найди остановку автобуса и займи очередь -—1 '-¦ t^v^^v, , , ^—v'. нет Автобус подошел? да ¦¦< В автобус можно войти \ или хотя бы втиснуться? уг нет Войди в автобус В салоне есть свободные сидячие места? нет да Сядь на свободное место и расслабься < Есть желание ехать стоя? да I Выйди из автобуса I Есть деньги на билет? нет да Жди следующий автобус Купи билет и поезжай спокойно Езжай до нужной остановки | Выйди •С из автобуса -» 1 -ar ^ Конец 'у, , _ Рис. 20. Алгоритм-примитив «Поездка на автобусе». Сравни с рис. 19
76 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» запутанность зрительного рисунка полностью исчезла. И схема приобрела новое эстетическое (эргономическое) качество: элегантность, ясность и прозрачность. Таким образом, в сложных случаях силуэт позволяет существенно уменьшить интеллектуальные усилия, затрачиваемые на понимание алгоритма. В силуэте крупные структурные части (ветки) четко выделены, образуя легко узнаваемый, стабильный, предсказуемый и целостный зрительный образ. А в примитиве структурные части не выделены и перемешаны, что затрудняет чтение и анализ алгоритмов. Однако для простых случаев (менее 10 икон) примитив, как правило, оказывается более предпочтительным. В этой главе рекомендации по использованию силуэта и примитива даны в упрощенном виде. Окончательные рекомендации даны в главе 20. ГЛАВНЫЙ МАРШРУТ СИЛУЭТА Выше мы узнали, как упорядочить маршруты примитива. Теперь настала очередь силуэта. Шампур ветки — это вертикаль, соединяющая икону «имя ветки» с иконой «адрес», а если у ветки несколько выходов — с левым из них. Каждая ветка силуэта имеет свой шампур. Например, на рис. 19 четыре ветки. Следовательно, этот силуэт имеет четыре шампура. Для ветки сохраняют силу оба «царских» правила: • главный маршрут ветки должен идти по шампуру ветки; • побочные маршруты ветки следует упорядочить слева направо по какому-либо критерию. Предположим, в качестве критерия выбран принцип «Чем правее, тем хуже». В этом случае для каждой ветки силуэта действует Правило. Чем правее (чем дальше от шампура данной ветки) расположена очередная вертикаль, тем менее успешные действия она выполняет. Например, на рис. 19 ветка «Посадка в автобус» имеет три вертикали. Левая вертикаль (главный маршрут) описывает наибольший успех, так как вы будете ехать в автобусе сидя. Правая вертикаль означает наименьший успех, поскольку вы вышли из автобуса и поездка откладывается. Средняя вертикаль (расположенная выше иконы «Есть желание ехать стоя?») занимает промежуточное положение. Здесь имеет место либо частичный успех (вы будете ехать, но не сидя, а стоя), либо неудача, поскольку вы выходите из автобуса несолоно хлебавши.
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 77 Главный маршрут силуэта — последовательное соединение главных маршрутов поочередно работающих веток. Таким образом, ДРАКОН позволяет читателю моментально увидеть главный маршрут любого, сколь угодно сложного и разветвленного алгоритма. Кроме того, смещение всех побочных маршрутов относительно «царского» оказывается не случайным, а осмысленным и предсказуемым, то есть легким для восприятия. ПЕРЕСЕЧЕНИЯ ЛИНИЙ? — БОЖЕ УПАСИ! Некоторые специалисты, склонные к резким выражениям, называют традиционные блок-схемы алгоритмов [1] «помоечными блок-схемами». Потому что в этих схемах царит беспорядок. Запутанная паутина соединительных линий не помогает, а наоборот, затрудняет работу читателя, который пытается понять суть алгоритма. ДРАКОН выгодно отличается тем, что его графический узор имеет строгое математическое и когнитивно-эргономическое обоснование и подчиняется жестким и тщательно продуманным правилам. Среди них особое место занимает Правило. Пересечения и обрывы соединительных линий запрещены. При вычерчивании обычных блок-схем допускаются два типа пересечения линий: • явное, изображенное крестом линий, • замаскированное, выполняемое с помощью так называемых соединителей. Как известно, соединитель «используется для обрыва линии и продолжения ее в другом месте... для избежания излишних пересечений» [1]. Следует подчеркнуть, что эффективность соединителей для борьбы с пересечениями близка к нулю. Хотя соединители действительно уменьшают число пересечений, но они не улучшают понятность блок-схем. То есть не позволяют решить наиболее важную, приоритетную задачу. В языке ДРАКОН все перечисленные ухищрения (пересечения, обрывы, соединители) по эргономическим соображениям считаются вредными и категорически запрещены. Потому что они засоряют поле чертежа ненужными деталями, создают визуальные помехи для глаз и отвлекают внимание от главного. Поскольку запрет пересечений является серьезным топологическим ограничением, возникает вопрос: можно ли произвольный алгоритм изобразить в виде дракон-схемы? Теорема 1. Любая структурная программа может быть изображена на языке ДРАКОН двумя способами: в виде примитива и в виде силуэта.
78 Часть И. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Запрещенная дракон- схема: примитив с пересечением в точке X В2 ВЗ I ВЗ И В4 Силуэт, эквивалентный примитиву (слева) и не содержащий пересечений Рис. 21. Преобразование примитива в эквивалентный ему силуэт позволяет устранить любые пересечения линий Теорема 2. Произвольная (неструктурная) программа в ряде случаев не может быть изображена в виде примитива. Однако с помощью эквивалентных преобразований, допускающих введение дополнительных переменных (идентификаторов ветки), она всегда может быть изображена в виде силуэта. Чтобы прояснить вопрос, обратимся к примерам. На рис. 21 (слева) приведена запрещенная дракон-схема — примитив, в котором имеется неустранимое (без введения дополнительных переменных) пересечение. На рис. 21 (справа) изображен силуэт, который, как нетрудно убедиться, эквивалентен упомянутому примитиву и вместе с тем не содержит ни одного пересечения. Таким образом, пример на рис. 21 подтверждает справедливость теоремы 21. Подведем итоги. Язык ДРАКОН обладает важным достоинством. Он позволяет изобразить любой алгоритм, полностью отказавшись от таких эргономически неудачных приемов, как пересечения, обрывы, соединители. Отсутствие «паразитных элементов» создает дополнительные удобства для читателя, делает дракон-схему прозрачной, легкой для понимания. Доказательство теорем 1 и 2 предоставляем читателю. Указание: необходимо опереться на теорему о структурировании и метод Ашкрофта — Манны [2, 3].
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 79 АЛГОРИТМ Поездка на автобусе ВЕТКА Поиск автобуса ВЫПОЛНИТЬ Найди остановку автобуса и займи очередь АДРЕС Ожидание посадки КОНЕЦ ВЕТКИ ВЕТКА Ожидание посадки ЕСЛИ Автобус подошел? = ДА ЦИКЛ ЖДАТЬ КОММЕНТАРИЙ Происходит посадка пассажиров ЕСЛИ Твоя очередь подошла? = НЕТ КОММЕНТАРИЙ Жди, пока подойдет очередь КОНЕЦ ЦИКЛА ЕСЛИ В автобус можно войти? = ДА АДРЕС Посадка в автобус М1: ИНАЧЕ КОММЕНТАРИЙ Жди прихода следующего автобуса АДРЕС Ожидание посадки КОНЕЦ ЕСЛИ ИНАЧЕ ПЕРЕХОД НА М1 КОНЕЦ ЕСЛИ КОНЕЦ ВЕТКИ ВЕТКА Посадка в автобус ВЫПОЛНИТЬ Войди в автобус и так далее Рис. 22. Текстовая запись алгоритма, соответствующая дракон-схеме на рис. 19 (описаны только две ветки из четырех) КАК ОПИСАТЬ СИЛУЭТ С ПОМОЩЬЮ ТЕКСТОВОГО ЯЗЫКА? Из рис. 22 видно, что для описания веток в текстовый язык пришлось внести ряд изменений. В частности, появились два новых текстовых оператора, отсутствующие в традиционных языках: ВЕТКА < идентификатор ветки > АДРЕС < идентификатор ветки > Оператор текстового языка ВЕТКА объявляет название ветки (записываемое на графическом языке внутри иконы «имя ветки»). Оператор АДРЕС безусловно передает управление на текстовый оператор ВЕТКА, имя которой совпадает с записью в операторе АДРЕС. Сравнивая два языка: графический и текстовый, можно заметить, что соответствующие алгоритмы (рис. 19 и 22) эквивалентны1. Однако графи- 1 Два алгоритма называются эквивалентными, если они дают одинаковые результаты для одних и тех же исходных данных.
80 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» ческий язык (язык дракон-схем), несомненно, более нагляден и доходчив. Второе преимущество состоит в том, что графика позволяет полностью исключить избыточные (паразитные) элементы, каковыми в текстовом языке оказываются почти все ключевые слова: АЛГОРИТМ, ВЕТКА, АДРЕС, КОНЕЦ ВЕТКИ, ЕСЛИ, ТО, ИНАЧЕ, КОНЕЦ ЕСЛИ, ЦИКЛ ЖДАТЬ, КОНЕЦ ЦИКЛА, КОММЕНТАРИЙ, ПЕРЕХОД НА, а также метки. ВИЗУАЛЬНЫЙ И ТЕКСТОВЫЙ СИНТАКСИС ДРАКОНА ДРАКОН — визуальный язык, в котором используются два типа элементов: • графические фигуры (иконы), • текстовые надписи, расположенные внутри или снаружи икон (тек- стоэлементы). Следовательно, синтаксис ДРАКОНа распадается на две части. Визуальный синтаксис охватывает алфавит икон, правила их размещения в поле чертежа и правила связи икон с помощью соединительных линий. Текстовый синтаксис задает алфавит символов, правила их комбинирования и привязку к иконам. (Привязка необходима потому, что внутри разных икон используются разные типы выражений). Оператором языка ДРАКОН является икона или комбинация икон, взятые вместе с текстовыми надписями. Одновременное использование графики и текста говорит о том, что ДРАКОН адресуется не только к словесно-логическому мышлению автора и читателя программы. Сверх того, он активизирует интуитивное, образное, правополушарное мышление, стимулируя его не написанным, а именно нарисованным алгоритмом, то есть алгоритмом-картинкой. СЕМЕЙСТВО ДРАКОН-ЯЗЫКОВ ДРАКОН — не один язык, а целое семейство, которое может включать практически неограниченное число языков. Все языки семейства имеют одинаковый визуальный синтаксис (что зрительно делает языки почти близнецами). Каждый язык семейства отличается тем, что имеет свой собственный текстовый синтаксис. ДРАКОН-1 — графический псевдоязык, графический аналог обычного текстового псевдокода. В этом языке в качестве текстоэлементов используется естественный язык. Почти все примеры в этой книге даны на языке ДРАКОН-1. Именно этот язык предлагается в качестве универсального средства взаимопонимания, о чем шла речь в предыдущих главах. ДРАКОН-1 служит для описания структуры деятельности, создания технологий, алгоритмов и
Глава 4. ИЗЮМИНКИ ЯЗЫКА ДРАКОН 81 проектов программ. Он используется в методе декомпозиции и пошаговой детализации, а также при формализации профессиональных знаний. ДРАКОН-2 — визуальный алгоритмический язык для разработки алгоритмов и программ реального времени. Упрощенная версия этого языка используется в качестве CASE-тех- нологии «ГРАФИТ-ФЛОКС» в Научно-производственном центре автоматики и приборостроения им. академика Н.А. Пилюгина. Она применяется для разработки программного обеспечения систем управления ракет- носителей и разгонных блоков космических аппаратов. После доработки инструментальных программ язык может быть использован при разработке систем управления реального времени для атомных электростанций, нефтехимических и металлургических заводов, биотехнологических производств и т. д. А также в качестве универсального языка программирования. Кроме того, семейство включает гибридные визуальные языки программирования: Дракон-Бейсик, Дракон-Паскаль, Дракон-Си# и т. д. Чтобы получить гибридный язык, например, Дракон-Бейсик, необходимо взять визуальный синтаксис ДРАКОНа и присоединить к нему по определенным правилам текстовый синтаксис языка Бейсик. Строгое разграничение визуального и текстового синтаксиса позволяет в максимальной степени расширить сферу применения языка, обеспечивая его гибкость и универсальность. При этом единообразие правил визуального синтаксиса семейства ДРАКОН-языков обеспечивает их концептуальное единство. А разнообразие текстовых правил (то есть возможность выбора любого текстового синтаксиса) определяет гибкость языка и легкую настройку на различные предметные области. В настоящей книге основное внимание уделяется визуальному псевдоязыку ДРАКОН-1 (использующему естественный человеческий язык). Что касается остальных языков ДРАКОН-семейства, даются лишь краткие пояснения. ВЫВОДЫ Приведем сводку эргономических правил, позволяющих улучшить когнитивное качество дракон-схем и сделать алгоритмы, программы и технологии более понятными. 1. Сложные алгоритмы следует рисовать в виде системы вложенных друг в друга силуэтов. При этом примитивы используются крайне редко, только как исключение. 2. В иконе «заголовок» запрещается писать слово «начало». Вместо этого следует указать понятное и точное название алгоритма. 3. Разбейте сложный алгоритм на части, каждую часть изобразите в виде ветки. Дайте частям доходчивые и четкие названия и запишите их в иконах «имя ветки».
82 Часть И. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» 4. Вход в ветку возможен только через ее начало. 5. В иконе «адрес» разрешается писать имя одной из веток, другие надписи запрещены. 6. Ветки следует располагать в пространстве согласно правилу «Чем правее, тем позже». Наличие веточного цикла модифицирует это правило. 7. Примитив обязательно имеет шампур. Это значит, что у примитива иконы «заголовок» и «конец» всегда лежат на одной вертикали, которая и называется «шампур». 8. Каждая ветка обязательно имеет шампур. У правой ветки шампур — это вертикаль, соединяющая иконы «имя ветки» и «конец». У остальных веток шампуром служит вертикальная линия, соединяющая иконы «имя ветки» и «адрес». А если адресов несколько — с левым из них. 9. Алгоритм всегда имеет главный маршрут, который должен идти по шампуру. 10. Побочные маршруты должны быть упорядочены слева направо согласно одному из выбранных критериев, например, «Чем правее, тем хуже». 11. В иконе «конец» следует писать слово «конец». 12. Соединительные линии могут идти либо горизонтально, либо вертикально. Наклонные линии не допускаются. 13. Пересечения линий запрещены. 14. Обрывы линий запрещены. 15. Использование соединителей запрещено.
Глава ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ На ошибках мы горим! — Мне сказал Алеха. Непонятный алгоритм — Это очень плохо. Мы ошибки победим! Надо сделать вот чего — Надо сделать алгоритм Ясным и доходчивым! Юрий Примашев ПРОВЕРКА АЛГОРИТМОВ ЗА СТОЛОМ При решении сложных задач, таких как предсказание погоды, управление войсками, управление большой электростанцией или нефтехимическим заводом, приходится создавать крупномасштабные алгоритмы, насчитывающие сотни тысяч и даже миллионы команд. Практика показывает: чем крупнее алгоритмы, тем больше в них ошибок. Тем сложнее их найти. Исправлять ошибки в огромных и сложных алгоритмах — трудное и дорогостоящее занятие, причем цена ошибки тем выше, чем позже она обнаружена. Наименьший ущерб приносят ошибки, которые удается обнаружить в самом начале работы, до генерации кода и исполнения программы на компьютере — в ходе мозговой (зрительной) проверки программы за столом. Мы называем проверку мозговой, если основную работу по поиску ошибок выполняет человеческий мозг, а компьютер играет вспомогательную роль. При такой проверке человек тщательно изучает технические задания, алгоритмы и программы, представленные на бумаге или экране, стараясь обнаружить как можно больше ошибок и слабых мест. Однако сегодня такая проверка является не только дорогостоящей, но и крайне неэффективной.
84 Часть И. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Серьезный недостаток мировой практики программирования Низкая эффективность проверки за столом является важным недостатком существующих методов разработки программного обеспечения. Причина в том, что технические задания, тексты алгоритмов, исходные тексты программ и другие документы начального этапа разработки не приспособлены для решения этой задачи. Устранение данного недостатка является актуальной задачей. КАК ПОВЫСИТЬ ЭФФЕКТИВНОСТЬ ПРОВЕРКИ ЗА СТОЛОМ? Мозговую проверку, как и любую другую деятельность, нужно грамотно проектировать. Критерием ее эффективности служит выявление максимального числа ошибок за минимальное время. Или, что одно и то же, минимизация интеллектуальных усилий мозга, затрачиваемых в среднем на выявление одной ошибки. Нейронная конструкция мозга такова, что он может эффективно проводить проверку за столом отнюдь не при любых условиях. А только в том случае, если проверяемые документы обладают высоким когнитивным качеством. Чтобы минимизировать удельные интеллектуальные усилия, затрачиваемые на обнаружение ошибок, необходимо, чтобы когнитивно-значимые характеристики документов были хорошо согласованы с конструктивными характеристиками мозга. Это значит, что технические задания, алгоритмы и другие документы должны быть специально приспособлены для быстрой и надежной проверки, для легкого и вместе с тем глубокого понимания. НУЖНА НОВАЯ ТЕОРИЯ Вернемся к понятию «критерий сверхвысокого понимания». Считается, что алгоритмический язык удовлетворяет этому критерию, если написанные на нем алгоритмы обладают наивысшим когнитивно-эргономическим качеством. Можно сказать и по-другому. Критерий сверхвысокого понимания требует, чтобы форма записи алгоритмов была максимально удобной. И позволяла человеку читать и анализировать любой алгоритм с максимальной легкостью и глубиной понимания. Чтобы создать подобную легкость, нужны новые, скажем прямо, непривычные для математиков, но понятные «для народа» правила записи алгоритмов. Более того, нужна новая теория — теория эргономичных ал- горитмов.
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 85 ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ АЛГОРИТМ? В этой книге выражения «дружелюбный алгоритм» и «эргономичный алгоритм» употребляются как синонимы. Однако, есть важные оттенки. Слово «дружелюбный» — всего лишь метафора. А выражение «эргономичный алгоритм» мы склонны рассматривать как фундаментальное научное понятие. Разумеется, это утверждение надо тщательно обосновать. Данная книга как раз и является таким обоснованием. Эргономичный алгоритм — это алгоритм, удовлетворяющий критерию сверхвысокого понимания. То есть алгоритм, специально сконструированный таким образом, чтобы обеспечить выявление ошибок за столом без лишней траты умственных сил. Преимущество эргономичных алгоритмов в том, что они намного понятнее, яснее, нагляднее и доходчивее, чем обычные. Если алгоритм непонятный, в нем трудно или даже невозможно заметить затаившуюся ошибку. И наоборот, чем понятнее алгоритм, тем легче найти дефект. Поэтому более понятный, эргономичный алгоритм намного лучше обычного. Лучше в том смысле, что он облегчает выявление ошибок, а это очень важно. Ведь чем больше ошибок удастся обнаружить при проверке за столом, тем больше вероятность, что вновь созданный алгоритм окажется правильным, безошибочным, надежным. Кроме того, эргономичные алгоритмы удобнее для изучения, их проще объяснить другому человеку. ЭРГОНОМИЧНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК Эргономичный алгоритмический язык — это язык, позволяющий создавать эргономичные алгоритмы. Особенность такого языка состоит в следующем. Эргономичные алгоритмы делают проблему более ясной и прозрачной. Поэтому использование эргономичных алгоритмических языков облегчает и ускоряет творческий процесс создания новых алгоритмов. Иными словами, эргономичный язык повышает производительность труда при разработке и отладке алгоритмов и программ. НУЖЕН НОВЫЙ ПОНЯТИЙНЫЙ АППАРАТ В предыдущей главе мы рассмотрели несколько способов, позволяющих улучшить эргономические характеристики алгоритмов. В этой главе мы продолжим тему. И попытаемся ответить на вопрос: можно ли повысить эргономичность алгоритмов, используя формальный метод эквивалентных преобразований? Для этого понадобится особый понятийный аппарат, заметно отличающийся от того, которым обычно пользуются программисты. Дело в том, что традиционные понятия плохо приспособлены для решения проблемы
86 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» понимания. И совершенно не учитывают специфику зрительных образов. ИКОНА «ВОПРОС» Да-нетный вопрос — это вопрос, на который можно ответить либо «да», либо «нет». Все другие ответы запрещены. Вот примеры да-нетных вопросов: утюг сломался? Тетя приехала? Вася купил хлеб? Преступника арестовали? Эта лужа больше, чем та? Температура выше нуля? Прошла команда на включение двигателя? На рис. 1 (позиция И4) изображена икона «вопрос». Она называется так, потому что внутри нее пишут да-нетный вопрос. Другие надписи не допускаются. Икона «вопрос» имеет один вход сверху и два выхода: вниз и вправо. Выход влево запрещен и никогда не используется. Возле выходов обязательно пишут слова «да» и «нет». ЧТО ТАКОЕ РАЗВИЛКА? На рис. 2 (позиция 2) показана макроикона «развилка». Развилка — часть дракон-схемы, внутри которой маршрут сначала раздваивается, а затем соединяется в точке слияния. Развилка имеет один вход сверху и один выход снизу Она представляет собой шампур-блок, который содержит: • икону «вопрос», • левое плечо развилки, • правое плечо развилки, • точку слияния (рис. 23). Суть дела ясна из примера на рис. 24. Левое плечо развилки есть путь от нижнего выхода иконы «вопрос» (точка А) до точки слияния Д. Оно содержит ответ «да», три иконы и соединительные линии (рис. 23). Правое плечо развилки начинается у правого выхода иконы «вопрос» и заканчивается в точке слияния. На рис. 23 оно содержит ответ «нет» и линию БВГД. Таким образом, плечо имеет в своем составе надпись «да» или «нет», соединительные линии, иконы и точку слияния. Одно из двух плеч может быть пустым (не содержать икон). ПРОСТЫЕ И СЛОЖНЫЕ РАЗВИЛКИ Развилки бывают простые и сложные. Простая развилка содержит только одну икону-вопрос. Примеры простых развилок показаны на рис. 25. Развилка называется сложной, если в ее плечах имеется, по крайней
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 87 Тебе нравится фильм «Звездные войны»? нет да Купи билет на 1-й сеанс Купи оидет ив 3-й сеанс В Рис. 23. У развилки два плеча: левое и правое Вход Выход Выход Это икона «вопрос». У нее два выхода Вход Выход Это развилка. У нее один выход Рис. 24. Чем различаются развилка и икона «вопрос»?
88 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» мере, одна простая или сложная развилка. На рис. 16 показаны три сложные развилки. Например, развилка «Потерял 500 рублей?» сложная, так как ее правое плечо содержит простую развилку «Потерял 1000 рублей?». Развилки «Потерял деньги?» и «Потерял сто рублей?» тоже сложные. Другие примеры сложных развилок показаны на рис. 26. Действие слева Действие справа Два действия Вариант 1 3 Вариант5 Вариант 2 Вариант 4 нет Вариант 6¦ нет Рис. 25. Шесть вариантов изображения развилки
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 89 sip] f. \ If 1 ¦?:.'Cll::, ¦&-*¦ 'i i Рис. 26. Примеры сложных развилок МАРШРУТЫ И ФОРМУЛЫ МАРШРУТОВ На рис. 27 (слева) представлена дракон-схема «Охота на мамонта». Заменим текст внутри икон буквами. Вместо «Охота на мамонта» запишем букву А Вместо «Поймай мамонта» — букву ? и т. д. В результате получим буквенную (литеральную) дракон-схему на рис. 27 (справа). Буквенные схемы удобно использовать для описания маршрутов. Маршрут — это графический путь от начала до конца алгоритма, проходящий через иконы и соединительные линии. Маршрут можно описать с помощью формулы, которая представляет собой последовательность букв, обозначающих иконы. Все иконы, включая одинаковые, обозначаются разными буквами. Линейный (неразветвленный) алгоритм имеет только один маршрут и одну формулу. Например, схема на рис. 27 (справа) описывается формулой АБВГД Разветвленный алгоритм имеет несколько (два или более) маршрутов. Причем у каждого маршрута своя, отличная от других формула (рис. 28, 29). В формулах разветвленных алгоритмов наряду с буквами, обозначающими иконы, используются слова «да» и «нет» (отделяемые пробелами). Для графического алгоритма справедливо Правило. Выполнить графический алгоритм — значит пройти путь от начала до конца алгоритма по одному из возможных маршрутов.
90 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» с 1 с Охота на мамонта - .' 1, ¦'"'-. ' Поймай мамонта i Убей мамонта ' I :- ¦ Отнеси мамонта домой ^ Конец j Обычная (смысловая) дракон-схема У ' С Vv "'.' ;; \ ';.;, .,Г°" Буквенная i • в Г ¦:¦¦ . . дракон-схема Рис. 27. Как преобразовать обычную дракон-схему в буквенную? Маршрут 1. АБВ нет ГДЕ Маршрут 2. АБВ да ЖЕ Рис. 28. Алгоритм с двумя маршрутами нет, Д° [ж 5 ¦& | Д 1 да нет Маршрут 1. АБВ да ГДЕ Маршрут 2. АБВ нет ЖИ нет ДЕ Маршрут 3. АБВ нет ЖИ да КЕ Рис. 29. Алгоритм с тремя маршрутами
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 91 Для наглядности можно считать, что существует воображаемый «бегунок», который при работе алгоритма пробегает алгоритмическую дорожку (маршрут) от иконы «заголовок» до иконы «конец». ЧТО ТАКОЕ РОКИРОВКА? Рокировка — преобразование алгоритма, при котором левое и правое плечо развилки меняются местами. При этом слова «да» и «нет» также меняются местами. Простейшие примеры рокировки показаны на рис. 14,15 и 30, 31. Говорят, что два алгоритма имеют одинаковый набор маршрутов, если для каждого маршрута первого алгоритма можно найти парный маршрут второго алгоритма, причем для каждой пары маршрутов их формулы совпадают. Если два алгоритма имеют одинаковый набор маршрутов, они называются равносильными. Равносильные алгоритмы всегда эквивалентны. Обратимся к рис. 31. Легко убедиться, что схемы на рис. 31 (слева) и 31 (справа) имеют одинаковый набор маршрутов: А да Б А нет Следовательно, указанные дракон-схемы равносильны и эквивалентны. Формальное преобразование алгоритма А1 в алгоритм А2 называется равносильным, если алгоритмы А1 и А2 равносильны. Отсюда вытекает Следствие. Рокировка является равносильным и эквивалентным преобразованием алгоритмов. (При рокировке смысл алгоритма не меняется). РОКИРОВКА И ЭРГОНОМИЧНОСТЬ: ОБСУЖДЕНИЕ ВОПРОСА Полученный результат чрезвычайно важен. Ведь рокировка позволяет улучшить наглядность и понятность алгоритмов. Попытаемся обосновать этот вывод для рис. 30, рассмотрев последовательно все промежуточные шаги рассуждений. Шаг 1. Выдвигаем гипотезу: для сравнения двух маршрутов на рис. 30 можно использовать признак «лучше—хуже». Шаг 2. Проверяем гипотезу с помощью следующих рассуждений. Если брюки впору — это хорошо, если их приходится подворачивать — это плохо. Следовательно, использование в данном алгоритме признака «лучше—хуже» правомерно. Шаг 3. Определяем главный маршрут, который по соглашению соответствует признаку «хорошо». Убеждаемся, что главный маршрут на рис. 30 (слева) идет через правое плечо развилки, что
92 Часть II. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» \ / Ноги короче, \ чем брюки? а ц да Подверни брюки ет Ноги короче, У?? чем брюки? Л / нет Подверни брюки Рис. 30. Пример равносильных алгоритмов нет да Б 1- Маршрут 1. А да Б Маршрут 2. А нет "' 'а К* л > ;нвтУ .- 1 Б |. . Маршрут 1. А нет Маршрут 2. А да Б Рис. 31. Буквенные дракон-схемы, полученные из смысловых дракон-схем на рис. 30
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 93 соответствует хорошей ситуации «брюки впору — их не надо подворачивать ». Шаг 4. Констатируем, что главный маршрут на рис. 30 (слева) не идет по шампуру. Делаем вывод: данный алгоритм является плохим, неэргономичным. Однако его можно исправить с помощью рокировки. Шаг 5. Выполняем рокировку и получаем более эргономичный алгоритм на рис. 30 (справа). На этом процедура заканчивается1. РОКИРОВКА МОЖЕТ УЛУЧШИТЬ ЭРГОНОМИЧНОСТЬ АЛГОРИТМОВ На рис. 32 показана плохая дракон-схема. Согласно правилу главный маршрут (жирная линия) должен быть прямым, как стрела, и идти точно по шампуру. А он вместо этого превратился в ломаную-переломаную линию, которая делает невообразимые скачки и путает читателя. Чтобы исправить ошибку, нужно три раза сделать рокировку. Первый раз делаем рокировку в развилке «В меню есть ваш любимый салат?». Это позволяет пустить главный маршрут по шампуру на верхнем участке. Однако внизу главный маршрут по-прежнему совершает неоправданные зигзаги. Затем делаем рокировку в развилке «Борщ очень вкусный?». Тем самым улучшаем среднюю часть схемы. Нам осталось выпрямить главный маршрут на нижнем участке. Для этого переставляем плечи у развилки «Жаркое как подошва?». Таким образом, в результате трех рокировок неэргономичная схема на рис. 32 превратилась в хорошую (эргономичную) схему на рис. 33. Подведем итоги. Выпрямляя главный маршрут, мы делаем алгоритм более наглядным, легким для понимания. Потому что главный маршрут - путеводная нить алгоритма, позволяющая быстрее уяснить суть дела. А теперь — самое главное. Мы осуществили выпрямление главного маршрута не случайно, не по принципу «Что хочу, то и ворочу!», а на основании строгого математического закона — закона рокировки. Напомним суть закона: рокировка — эквивалентное преобразование алгоритма. Наличие такого закона придает нашим эргономическим действиям (позволяющим выпрямить «кривой» главный маршрут) математическую строгость и точность. Мы убедились, что рокировка алгоритма на рис. 32 позволила получить алгоритм на рис. 33, который имеет более высокие эргономические Правило «Главный маршрут идет по шампуру» — это необходимое, но отнюдь не достаточное условие эргономичности алгоритма. Другое условие — эргономизация текста, то есть превращение запутанного и невразумительного текста в ясный и понятный. Вопрос «Ноги короче, чем брюки?» звучит вычурно, противоестественно и сбивает с толку читателя. Вместо него следует написать: «Брюки слишком длинные?». В итоге получим действительно понятный и хороший алгоритм.
94 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» ( Обед в ресторане В меню есть твой любимый салат? "" | нет ^ Есть хоть какой-то салат? _ _ ? П РА В И ЛЬ НО да нет Закажи то, что есть I Придется обойтись без салата / Борщ очень вкусный? да нет / Борщ пересолен? V нет Борщ невкусный, но есть можно Потребуй заменить борщ Ешь борщ Жаркое как подошва? нет да Потребуй другую порцию / Другая порция еще хуже? да нет Жестковато, но, в общем, терпимо Безобразие! Ноги моей здесь не будет! I Ешь жаркое I Конец J Закажи свой любимый салат Жаркое очень нежное Ешь жаркое J Рис. 32. Плохая дракон-схема. Главный маршрут (жирная линия) все время петляет и делает зигзаги. Его трудно проследить взглядом
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 95 Обед в ресторане ± ПРАВИЛЬНО В меню есть твой любимый салат? ЛуНв / Т Есть хоть какой-то салат? Да нет Закажи свой любимый салат Закажи то, что есть Придется обойтись без салата Борщ очень вкусный? нет Борщ просто божественный /Борщ пересолен? да нет Борщ невкусный, но есть можно Потребуй заменить борщ • / Жаркое как подошва? нет Попроси другую порцию Другая порция еще хуже? нет да Жестковато, но, в общем, терпимо Безобразие! Ноги моей здесь не будет! Конец ) Рис. 33. Хорошая дракон-схема. Она получена в результате улучшения схемы на рис. 32
96 Часть И. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» характеристики. Это означает, что операция «рокировка» в примере на рис. 32 и 33 действительно улучшает эргономичность алгоритма. ЕЩЕ ОДИН ПРИМЕР На рис. 34—37 представлены четыре схемы, на которых описана история с чернильницей. На всех схемах изображен один и тот же алгоритм. Однако схемы выглядят по-разному. Зададим вопрос, какие из них начерчены правильно, а какие нет? Сначала нужно найти главный маршрут. В развилке «Чернильница упала?» главный маршрут идет через «нет». Потому что, когда вещи падают, это плохо. А когда не падают — хорошо. Значит, две схемы — на рис. 34 и 35 — нарисованы неверно. В чем ошибка? Согласно правилу, главный маршрут должен идти по шампуру. А он вместо этого петлят по задворкам, как заяц. Проверим правило побочных маршрутов. На рис. 34—37 их два. Один описывает ситуацию, когда чернильница упала, но уцелела. Во втором случае она разбилась. Первой ситуации выставим оценку «плохо», второй — «очень плохо». Отсюда делаем вывод, что на рис. 36 маршруты не упорядочены. Значит, схема нарисована неверно. Почему? Потому что самый плохой маршрут (с оценкой «очень плохо») должен быть крайним справа. А он по ошибке затесался в середину. Таким образом, правильно нарисована только одна, самая последняя, схема (см. рис. 37). В ней нет ни одной ошибки. Главный маршрут идет по шампуру, и все маршруты упорядочены по правилу «Чем правее, тем хуже». Чтобы превратить плохую схему на рис. 34 в хорошую на рис. 37, достаточно сделать всего две рокировки в обеих развилках. Таким образом, на основании анализа ряда примеров мы убедились: равносильное преобразование «рокировка» позволяет улучшить эргономичность алгоритмов. Однако этот вывод относится только к смысловым алгоритмам (где можно указать главный маршрут). Он неприменим к буквенным алгоритмам (где понятие главного маршрута теряет силу). Отсюда вытекает, что применение рокировки к буквенной схеме на рис. 31 бессмысленно, так как в данном случае рокировка не влияет на эргономичность. ВЕРТИКАЛЬНОЕ ОБЪЕДИНЕНИЕ Иногда бывает, что в дракон-схеме иконы повторяются. Например, на рис. 38 икона «Отдай мотоцикл в ремонт и впредь будь умнее» встречается три раза. Это плохо. Навязчивые повторения раздражают читателя, которому приходится тратить лишнее время и несколько раз читать одно и то же. К счастью, некоторые повторы можно устранить. Такая возможность
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 97 появляется, если одинаковые иконы находятся рядом, причем их выходы соединены между собой (рис. 38). В этом случае действует Правило. Повторы запрещены. Устранение повторов производится с помощью вертикальной линии (рис. 39) и называется вертикальным объединением. При этой операции несколько икон объединяются в одну. Это делается так: • сначала входы икон объединяются вертикальной линией, • затем удаляются все одинаковые иконы, кроме крайней левой (рис. 38). Нетрудно доказать, что операция «вертикальное объединение» есть равносильное преобразование алгоритмов. Сравнивая алгоритмы на рис. 38 и 39, легко заметить, что схема стала более компактной, ясной и наглядной, поскольку освободилась от бессмысленного повторения икон. Отсюда проистекает Вывод. Равносильное преобразование «вертикальное объединение» позволяет улучшить эргономичность алгоритмов. ГОРИЗОНТАЛЬНОЕ ОБЪЕДИНЕНИЕ Иногда для исключения повторов используется не вертикальная, а горизонтальная линия. Соответствующая операция называется горизонтальным объединением. Она является равносильным преобразованием алгоритмов. Рассмотрим более сложную задачу на рис. 40, где также имеются повторы, подлежащие удалению. Сначала устраним повторение иконы «Съешь кашу» и получим схему на рис. 41. В данном случае для исключения повторов используется горизонтальное объединение. Затем применим вертикальное объединение и исключим повторение развилки «Есть можно?». Окончательный результат показан на рис. 42. Полученная схема более удобна и занимает меньше места, чем исходная схема на рис. 40. Самое главное, она стала проще и намного понятнее. Разобранный пример позволяет сделать Вывод. Равносильное преобразование «горизонтальное объединение» улучшает эргономичность алгоритмов. ВИЗУАЛЬНЫЕ ФОРМУЛЫ ОБЪЕДИНЕНИЯ Формулы объединения показаны на рис. 43 и 44. На этих формулах для примера расставлены слова «да» и «нет». Следует иметь в виду, что это всего лишь один из возможных примеров расстановки. Возле каждой ико-
98 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» НЕПРАВИЛЬНО НАРИСОВАННАЯ СХЕМА С История с чернильницей Оценка Чернильница упала на пол? \ нвт да Чернильница разбилась? нет да Собери осколки чернильницы Слава Богу, обошлось Хорошенько вымой пол с Подними чернильницу и убери подальше Конец Очень плохо Плохо Хорошо Рис. 34. Очень плохая дракон-схема. В ней две ошибки: • главный маршрут не идет по шампуру • нарушено правило «Чем правее, тем хуже»
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 99 ещегоШ$ЩЁТ] РА В И Щ Ь НА РИС 6 В АН Н АЯ СХ ЕМ А С История с чернильницей Оценка Чернильница 'нет упала на пол? Г да да Подними чернильницу и убери подальше Конец 4 Плохо Собери осколки чернильницы Хорошенько вымой пол Очень плохо Хорошо Рис. 35. Плохая дракон-схема. Ошибка в том, что главный маршрут (жирная линия) не идет по шампуру
100 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» С История с чернильницей Чернильница упала на пол? нет У" + ^ Гч Чернильница разбилась? нет, да Собери осколки чернильницы Хорошенько вымой пол Подними чернильницу и убери подальше С Конец ' 4 Оценка Хорошо Очень плохо Плохо Рис. 36. Плохая дракон-схема. Нарушено правило «Чем правее, тем хуже»
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 101 i \ - -С''.. :}<i '" История с чернильницей 1 Чернильница упала на пол? ft: с нет ( Чернильница разбилась? 4 "> нет Подними чернильницу и убери подальше ль но СХЕМА да Конец Оценка Хорошо Плохо Собери осколки чернильницы Хорошенько вымой пол Очень плохо Рис. 37. Хорошая (эргономичная) дракон-схема: • главный маршрут идет по шампуру • соблюдается правило «Чем правее, тем хуже»
102 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» История с мотоциклистом, который врезался в КАМАЗ Руки-ноги целы? ;ч \ | /Да ; -. Повезло тебе, браток. Считай, второй раз родился заклинило? нет г< / да нет Двигатель заводится? нет да Колеса в лепешку? нет Садись на мотоцикл и поезжай дальше Отдай мотоцикл в ремонт и впредь будь умнее Отдай мотоцикл в ремонт и впредь будь умнее Отдай мотоцикл в ремонт и впредь будь умнее Одна и та же икона повторяется три раза От этого рябит в глазах С Конец Рис. 38. Плохая дракон-схема. Нарушено правило «Повторы запрещены». К счастью, повторы можно убрать (см. рис. 39)
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 103 История с мотоциклистом, который врезался в КАМАЗ / Руки- ноги целы? да Повезло тебе, браток. Считай, второй раз родился "\ Руль заклинило? нет Двигатель заводится? \ да Колеса в лепешку? нет Садись на мотоцикл и поезжай дальше ( Конец нет да нет да Линия а* вертикального | объединения j ******* Отдай мотоцикл в ремонт и впредь будь умнее Благодаря вертикальному объединению три иконы превратились в одну. Схема стала компактной, ясной и наглядной. Рис. 39. Хорошая схема. Повторы устранены. Данная схема получена из рис. 38 с помощью операции «Вертикальное объединение»
104 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» ны «вопрос» указанные слова могут быть записаны любым из двух способов: • «да» внизу, «нет» вправо; • «нет» внизу, «да» вправо. На рис. 45 и 46 показан более сложный пример вертикального объединения. Совместное использование вертикального и горизонтального объединения в некоторых случаях позволяет существенно упростить дракон-схемы (см. пример на рис. 47 и 48). ОПАСНОСТЬ ПЕРЕСЕЧЕНИЙ На рис. 49 в точке X линии пересекаются. Это очень плохо! Ведь пересечение — визуальная помеха. Она затрудняет восприятие и анализ алгоритмов. Обилие пересечений мешает читателю думать. Практика показывает: пересечение линий — это источник опасности, который может привести к ошибке. Поэтому в языке ДРАКОН действует правило: пересечения запрещены. Существуют специальные приемы позволяющие устранить пересечения. Самый простой из них показан на рис. 49 и 50. ПРОСТОЕ ДОКАЗАТЕЛЬСТВО Можно доказать, что схемы на рис. 49 и 50 равносильны. На рис. 49 имеются три маршрута: Номер маршрута Маршрут 1 Маршрут 2 Маршрут 3 Описание маршрута А-Б-В А-Б-Д А-Г Легко убедиться, что схема на рис. 50 имеет точно такие же маршруты. Совпадение маршрутов говорит о том, что на обеих схемах представлен один и тот же алгоритм. Значит, схемы 49 и 50 равносильны. КАКАЯ ОШИБКА ПОДСТЕРЕГАЕТ НАС ПРИ ОБЪЕДИНЕНИИ? На рис. 51 (слева) икона Е повторяется три раза. На первый взгляд кажется, что две иконы Е можно убрать с помощью операции «горизонтальное
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ Ю5 объединение». Действуя подобным образом, получим результат на рис. 51 (в центре). Мы допустили грубую ошибку! Вспомним, что при рисовании дракон-схем пересечения запрещены. А у нас получилось, что две линии пересекаются в точке X. Отсюда следует Правило. Разрешается объединять не любые одинаковые иконы, а только соседние. Обратите внимание: на рис. 51 (слева) из трех одинаковых икон Е только две правые являются соседними. А третья (крайняя левая) отделена от них иконой Ж. Поэтому она не может участвовать в объединении. Правильный ответ показан на рис. 51 справа. ЧТО ДЕЛАТЬ, ЕСЛИ ЭРГОНОМИЧЕСКИЕ ТРЕБОВАНИЯ ПРОТИВОРЕЧАТ ДРУГ ДРУГУ? До сих пор мы рассматривали простейшие случаи, когда различные эргономические требования не вступали в конфликт. Однако конфликты возможны. Вот два эргономических критерия, которые могут противоречить друг другу: • правило главного и побочных маршрутов, • минимизация числа вертикалей. Чтобы исключить конфликт, следует соблюдать Принцип приоритета. Правило главного и побочных маршрутов имеет более высокий приоритет, нежели стремление уменьшить число вертикалей. В качестве иллюстрации сравним эквивалентные схемы на рис. 52 и 53. По критерию «минимизация числа вертикалей» выигрывает схема на рис. 52. У нее на одну вертикаль меньше. А как насчет порядка в маршрутах? Попробуем разобраться. На рис. 52 правило маршрутов грубо нарушено, причем сразу в двух местах. Во-первых, главный маршрут (когда человек здоров) не совмещен с шампуром. Во-вторых, маршруты не упорядочены слева направо. Действительно, самое тяжелое заболевание (когда человек вынужден лечь в больницу) находится на средней вертикали. Это неправильно, так как слева и справа от нее находятся более легкие недомогания. Таким образом, правило «Чем правее, тем хуже» не соблюдается. Поэтому схема на рис. 52 является плохой, неэргономичной. Чтобы исправить недостаток, необходимо выполнить: • вертикальное разъединение в точке С (эта операция обратна вертикальному объединению); • рокировку развилки «Заболел?», • рокировку развилки «Врач помог?».
Юб Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» (j=> ' НЕПРАВИЛЬНО Свари кашу Каша подгорела? да нет Каша ^ да пересолена? нет Эта развилка повторяется два раза Конец Есть можно? нет Есть можно? Съешь кашу I Съешь кашу да Выброси кашу Свари новую да лнет 1L Выброси кашу Свари новую Съешь кашу Икона «Съешь кашу» повторяется три раза Рис. 40. Очень плохая дракон-схема. Правило «Повторы запрещены» нарушено в двух местах
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 107 История НЕПРАВИЛЬНО Свари кашу Каша подгорела? нет Каша пересолена? IV Г I,- - " нет Эта развилка повторяется два раза <- , ¦¦ , Ч нет Есть можно? >- да есть можно? нет Выброси кашу Свари новую да Выброси кашу Свари новую Съешь кашу ж X Конец \ Линия горизонтального объединения у Рис. 41. Данная схема получена из рис. 40 в результате объединения трех икон «Съешь кашу». Однако работа еще не закончена. Нужно устранить оставшиеся повторы
108 Часть п- ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» с История с кашей Свари кашу Каша подгорела? нет Каша пересолена? Q Конец ) lb ПРАВИЛЬНО да Да нет > "! ¦ < Съешь кашу f Есть можно? да "Ч нет _/ Выброси кашу Свари новую Рис. 42. Хорошая (ясная и наглядная) дракон-схема. Все повторы устранены. Данная схема получена из рис. 40 в результате объединения двух развилок «Есть можно?»
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 109 ОБЬЕДИНЕНИЕ формула) h \- ( А ) ( В ) да С нет нет ¦о 1 1 Рис. 43. Преобразование визуального алгоритма «Вертикальное объединение» ОБЪЕДИНЕНИЕ ( А ) да D ¦ нет ' ; Cv.-.I i.'^.JSS-.^-y Рис. 44. Преобразование визуального алгоритма «Горизонтальное объединение»
110 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» нет нет Равносильное преобразование «вертикальное объединение» улучшает эргономичность визуального алгоритма "Л Рис. 45. Плохая схема. В ней слишком много вертикалей (семь) и одинаковых икон (шесть). Кроме того, есть пять лишних изломов, а пять горизонталей неоправданно длинные Рис. 46. Хорошая схема. Число вертикалей, икон и изломов удалось значительно сократить
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 111 с II с i <ж>-! ПрГс| льно ~>, -к. Равносильные преобразования «вертикальное объединение» и «горизонтальное объединение» позволяют преобразовать неэргономичный алгоритм (слева) в эквивалентный ему эргономичный алгоритм (справа) J Рис. 47. Плохая схема. В ней слишком много икон и соединительных линий, без которых вполне можно обойтись Рис. 48. Хорошая схема. Число икон и соединительных линий удалось значительно сократить
112 Часть II. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» В итоге получим безукоризненно четкую схему на рис. 53. Здесь все маршруты упорядочены по принципу «Чем правее — тем хуже». В самом деле, левая вертикаль означает, что дела идут хорошо, ибо человек здоров. Значит, главный маршрут идет по шампуру. Вторая вертикаль описывает легкое недомогание, которое можно снять таблеткой. Третья вертикаль говорит: самочувствие ухудшилось, нужен врач. Наконец, четвертая (крайняя правая) вертикаль означает, что дела плохи — пришлось лечь в больницу. Как уже упоминалось, схема на рис. 53 тоже не без греха — в ней на одну вертикаль больше, чем на рис. 52. Тем не менее, мы признаем ее наилучшей, поскольку выполняется более приоритетное правило маршрутов. Отсюда вытекает, что (благодаря наличию приоритетов) комплекс эргономических требований является взаимоувязанным и непротиворечивым. ЭРГОНОМИЧНОСТЬ АБСТРАКТНЫХ АЛГОРИТМОВ Можно ли улучшить эргономичность абстрактных (буквенных) дракон- схем с помощью равносильных преобразований? Мы уже знаем, что рокировка в этом случае бесполезна. Однако вертикальное и горизонтальное объединение позволяют заметно повысить эргономичность буквенных схем. Чтобы убедиться в этом, обратимся еще раз к рис. 45 и 46. В самом деле, схема на рис. 45 выглядит неоправданно громоздкой. Она содержит семь вертикалей, тринадцать икон и заставляет читателя шесть раз читать идентификатор В, чтобы убедиться, что правые шесть икон одинаковые. А равносильная ей схема на рис. 46 (полученная методом вертикального объединения) свободна от этого недостатка. Она наглядна, проста и изящна. Содержит только две вертикали и восемь икон. Занимает втрое меньше места на листе бумаги (на экране). И к тому же имеет всего два излома линий (на рис. 45 — семь изломов). Таким образом, буквенная схема на рис. 46 более эргономична, чем ее соседка. Еще более громоздкой выглядит абстрактная схема на рис. 47, в которой насчитывается 14 вертикалей. А эквивалентная ей схема на рис. 48 (полученная методом вертикального и горизонтального объединения) снова выигрывает. Она позволяет уменьшить число вертикалей в три раза (с 10 до 3). Сокращает число икон более чем в два раза (с 45 до 19). Обеспечивает более экономное топологическое упорядочивание маршрутов. Заметно сокращает суммарную длину соединительных линий. Проведенный анализ позволяет сделать Вывод. В отличие от рокировки, которая полезна только для смысловых дракон-схем, вертикальное и горизонтальное объединение
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 113 НЕПРАВИЛЬНО нет Рис. 49. Плохая схема. Есть пересечение в точке X ПРАВИЛЬНО Рис. 50. Хорошая схема. Пересечение устранено НЕПРАВИЛЬНО щ > V ч \ [ рц : II ' 41 ж || i if (г = II \ ¦ \ Икона Е повторяется три раза НЕПРАВИЛЬНО I а И б 1Гв|ГТ 0 точке X линии пересекаются, что запрещено ПРАВИЛЬНО шттш шшш- Две иконы Е разделены иконой Ж. Такие повторы разрешены Плохая схема. Нарушено правило «Повторы запрещены» Плохая схема. Одно лечим, другое калечим. При устранении повторов нарушено правило «Пересечения запрещены» Хорошая схема. Все ошибки устранены Рис. 51. Устраняя повторы, следите, чтобы не появились пересечения
Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» НЕПРАВИЛЬНО ( Лечение J _ ^ Заболел? \ да Выпей таблетки __ ^ Помогло? \ Да нет нет Вызови врача / Врач \ \ помог? / да i * нет Ложись в больницу ПРАВИЛЬНО ( Лечение Л Заболел? нет Выпей таблетки Ч Помогло? нет Да Вызови врача \ нет Врач \~ .,ч, помог? I да Ложись в больницу ; Вопрос. Что важнее: уменьшить число вертикалей или навести j в схеме уют и порядок? \ Ответ. Уют и порядок намного важнее. Поэтому в первую голову ! надо упорядочить маршруты. V J Рис. 52. Плохая схема. В ней три вертикали (это хорошо). Но зато маршруты не упорядочены (это очень плохо) Рис. 53. Хорошая схема. В ней четыре вертикали (это плохо). Но зато маршруты упорядочены согласно правилу «Чем правее, тем хуже» (это очень хорошо)
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 115 улучшают эргономичность не только смысловых, но и абстрактных алгоритмов. ИКОНА-ВСТАВКА КАК ЭРГОНОМИЧЕСКИЙ ПРИЕМ Мы уже знаем, что язык ДРАКОН запрещает применять пересечения, обрывы и соединители. Отсюда вытекает жесткое ограничение: любая дракон-схема должна целиком размещаться на одном листе бумаги. А если она слишком большая и вылезает за рамки прокрустова ложа? Тогда можно взять бумагу больших размеров, например формата А1. А если схема громадная и все равно не помещается? На этот случай предусмотрены специальные приемы, позволяющие уменьшить габариты дракон-схемы и разрубить ее на удобные куски. Эти приемы позволяют разместить дракон-схему на листах желаемого размера. Рассмотрим проблему на «миниатюрном» примере. Предположим, линейный алгоритм состоит из двенадцати икон, а бумажный лист небольшой, так что на нем можно разместить по вертикали не более восьми икон. Как быть? На рис. 54 и 55 показаны два варианта решения проблемы. Алгоритм на рис. 54 не годится, так как на участке ЛБ бегунок (рабочая точка) движется вверх, что запрещено правилами языка ДРАКОН. Преодолеть затруднение можно двумя способами: • применить конструкцию «силуэт» (о которой шла речь в главе 4); • применить прием «разрежь великана» и разделить алгоритм на части. Рассмотрим последний способ. Для этого удалим из алгоритма несколько связанных по смыслу икон. А вместо них нарисуем икону-заместитель, которая называется вставкой (рис. 55). Вставка нужна, чтобы напомнить об изъятых иконах. Вставка занимает мало места — намного меньше, чем выброшенные иконы. Поэтому алгоритм становится короче. Разумеется, выброшенные иконы не пропадают — они образуют новый алгоритм — процедуру. На рис. 56 показано, как взаимодействуют основной алгоритм и процедура. Икона-вставка — это команда «Передай управление в процедуру». Икона «конец» процедуры означает: «Верни управление в основной алгоритм». При этом управление возвращается в точку, расположенную после иконы-вставки. На языке программистов икона-вставка — это оператор «Вызов процедуры». ЧТО ТАКОЕ ПОДСТАНОВКА? Операция «подстановка» связана с использованием иконы-вставки. Она выполняется за три шага.
Сборы на рыбалку Б I - • : •.V., - -,r Встань пораньше Позавтракай Возьми удочку Возьми запасные крючки Приготовь наживку Возьми садок для рыбы Возьми с собой еду - и-пп.г.д:^ У4 ¦ '4 ¦ Поезжай на вокзал - 1 Купи билет Сядь в поезд ? Конец 3 На участке АБ бегунок движется вверх, что запрещено U,:: ... Л-;/ "' Рис. 54. Плохая схема. В ней есть ошибка, которая называется «Движение вверх» Основной алгоритм Процедура j ( Сборы на рыбалку Л ( Собери рыбацкое Л | IV J \ ruapawouMA / 1 Встань пораньше Позавтракай Возьми удочку [ Икона I 1 Возьми запасные крючки [ «Вставка» 1 у Собери рыбацкое снаряжение 1 Поезжай на вокзал i Купи билет Сядь в поезд ( Конец }; ¦ ¦ 1 1 Приготовь наживку Возьми садок для рыбы Возьми с собой еду Q Конец у Рис. 55. Хорошая схема. Для исправления ошибки исходный алгоритм разделен на две части: • основной алгоритм • процедуру
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 117 Шаг 1. Из дракон-схемы удаляется фрагмент, имеющий один вход и один выход. Шаг 2. Вместо него подставляется икона-вставка с именем X. Шаг 3. К удаленному фрагменту добавляется икона-заголовок с тем же именем X и икона-конец. В результате получается процедура. Два алгоритма на рис. 54 и 55 неравносильны, так как их формулы не совпадают. Ведь маршрут на рис. 54 содержит 11 икон, а на рис. 55 — 15 икон (см. также рис. 56). Вместе с тем нетрудно убедиться, что подстановка — эквивалентное преобразование алгоритмов, так как исходный и преобразованный алгоритмы дают одинаковые результаты для одних и тех же исходных данных. Попутно заметим, что равносильные алгоритмы всегда эквивалентны (обратное неверно). УЛУЧШЕНИЕ ЭРГОНОМИЧНОСТИ АЛГОРИТМОВ С ПОМОЩЬЮ МАТЕМАТИКИ Когда рисуешь алгоритм, нужно стремиться, чтобы он с самого начала удовлетворял правилам и был эргономичным. А если это не получилось? Если первый блин комом, как на рис. 34? В этом случае необходимо довести алгоритм до ума с помощью изложенных выше приемов. Мы рассмотрели ряд операций, позволяющих выполнить эквивалентное преобразование алгоритмов (при котором смысл алгоритма не меняется). К их числу относятся: рокировка, вертикальное объединение, горизонтальное объединение и подстановка. Подчеркнем еще раз, что эти операции являются математически строгими. С другой стороны, они позволяют улучшить эргономическое качество алгоритмов. Отсюда следует Вывод. Понятность (эргономичность) алгоритмов можно повысить с помощью строгих математических методов. Для удобства читателя на рис. 57 дана общая сводка эквивалентных преобразований. КРАСОТА И ИЗЯЩЕСТВО АЛГОРИТМОВ Алгоритм, представленный в письменном виде, предназначен для зрительного восприятия человеком. Следовательно, алгоритм представляет собой зрительную сцену. Или, если угодно, — зрительный образ, зрительную картину. Красота алгоритма — это красота его зрительного образа, в частности, красота дракон-схемы. Алгоритм можно назвать красивым в том случае, если процесс зрительного восприятия, понимания и постижения алгоритма протекает с максимальной скоростью, наименьшими усилиями и максимальным эстетическим наслаждением. Чем красивее алгоритм, тем быстрее и легче можно его понять. Отсюда
Часть И. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Основной алгоритм с Жирной линией показан маршрут выполнения алгоритма Сборы на рыбалку Встань пораньше Процедура Собери рыбацкое снаряжение i Собери рыбацкое снаряжение Икона «Вставка» — это команда «Передай управление | в процедуру» Возьми удочку возьми запасные крючки Приготовь наживку Возьми садок для рыбы 1 Возьми с собой еду Поезжай на вокзал Икона «Конец» процедуры — это команда «Верни управление в основной алгоритм» Рис. 56. Как взаимодействуют основной алгоритм и процедура?
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 119 Подстановка ВИЗУАЛЬНАЯ ФОРМУЛА 1 М пример Рокировка ВИЗУАЛЬНАЯ ФОРМУЛА 2 у-4-чнет — у-Цда [нет 1 м 1 ц fr^6#pTHK«lllbHO» ' объ^ди н^мие \ ц 1 t I ВИЗУАЛЬНАЯ 1 м It м 1 1 1 •1 ФОРМУЛА штт \ L 3 s >- JL м 1 Горизонтальное объединение ВИЗУАЛЬНАЯ ФОРМУЛА 4 Рис. 57. Эквивалентные преобразования алгоритмов
120 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» вытекает, что красота и элегантность алгоритмов открывают путь к экономии умственных усилий. Но не только. Чем красивее зрительные образы частей алгоритма, чем изящнее они соединены в общую (алгоритмическую) картину, тем приятнее на них смотреть. Чем точнее и элегантнее зрительный «пейзаж» обнажает глубинный смысл алгоритма, тем плодотворнее мышление. Чем больше красоты, тем глубже понимание алгоритмов. Чем скорее течет наша алгоритмическая мысль, тем легче мы постигаем суть дела. Тем быстрее и качественнее протекает важнейший производственный процесс, играющий немалую роль в мировой экономике, — процесс массовой разработки алгоритмов и программ. И наоборот, если зрительный образ алгоритма кажется некрасивым, неприятным, отталкивающим и запутанным, процесс понимания и обдумывания неизбежно замедляется, что снижает производительность умственного труда. ДРАКОН — графический язык, язык зрительных образов. С учетом сказанного можно уточнить: ДРАКОН — язык красивых зрительных образов. Но красота ДРАКОНа — не самоцель. Она позволяет ощутимо повысить производительность труда при создании алгоритмов. Мы исходим из того, что зрительные образы алгоритмов следует сознательно проектировать. Для этой цели можно (в разумных пределах) использовать средства художественного конструирования. Уместно напомнить слова видного психолога Бориса Ломова: «Средства художественного конструирования в конечном счете направлены на то, чтобы вызвать тот или иной эффект у работающего человека... Применяя средства художественного конструирования, мы создаем положительные эмоции, облегчаем операцию приема информации человеком, улучшаем концентрацию и переключение внимания, повышаем скорость и точность действий. Короче говоря, мы пользуемся этими средствами для управления поведением человека в широком смысле слова, для управления его психическим состоянием» и умственной работоспособностью [1]. ПРАВИЛА, РОЖДАЮЩИЕ АЛГОРИТМИЧЕСКУЮ КРАСОТУ О каких правилах идет речь? Приведем несколько примеров. Правило лаконичности. Зрительный образ алгоритма должен быть лаконичным. Все ненужные, лишние детали должны быть отсечены. Поясним. Блок-схема алгоритма должна содержать лишь те элементы, которые необходимы для сообщения читателю существенной информации, точного понимания ее смысла и стимулирования правильных решений и разумных действий. Пустые украшения, избыточные, затемняющие детали должны быть удалены.
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 121 Характеризуя это правило, Ф. Эшфорд пишет: «Бесполезно стремиться направить внимание на важнейшие характеристики, если они окружены лишними, не относящимися к ним визуальными раздражителями, мешающими восприятию главного» [2]. ДЬЯВОЛ ТАИТСЯ В ПОДРОБНОСТЯХ Чтобы найти и изгнать «дьявола», надо засучить рукава и заняться чисткой авгиевых конюшен. Надо заглянуть во все углы, внимательно рассмотреть мельчайшие детали и устранить затаившиеся в них недостатки. Это грязная и неблагодарная работа. Однако обойтись без нее нельзя. Чтобы добиться «великой победы», надо устранить тысячи вредных мелочей. Одна из таких мелочей — ненужные изломы соединительных линий. Правило устранения изломов. Чтобы алгоритм был удобным для чтения, количество изломов соединительных линий должно быть минимальным. Из двух схем лучше та, где число изломов меньше. Сравним две схемы на рис. 58 и 59. На рис. 58 показана обычная блок- схема, заимствованная из технической литературы [3]. На рис. 59 изображена эквивалентная ей дракон-схема. Эти рисунки позволяют выявить различия между уродливой блок- схемой и красивой дракон-схемой. С точки зрения правил, рождающих алгоритмическую красоту, блок-схема на рис. 58 имеет следующие недостатки. • Неоправданно большое число изломов линий (в блок-схеме 12 изломов, а в дракон-схеме только 4). • Большое число паразитных элементов: 14 стрелок и 3 кружка, которые в дракон-схеме отсутствуют (поскольку они совершенно не нужны и представляют собой визуальные помехи, затемняющие суть дела). Мы рассмотрели два эргономических закона — правило лаконичности и правило устранения изломов. Мы убедились, что в дракон-схеме эти правила строго соблюдены, а в блок-схеме грубо нарушены. КРИТИЧЕСКИЙ АНАЛИЗ Обратимся снова к рис. 58 и 59. Мы сделали лишь первый шаг к расчистке авгиевых конюшен. На рис. 58 осталось еще немало «грязи», которую необходимо отмыть. Итак, вооружимся микроскопом и продолжим наш критический анализ. Блок-схема на рис. 58 имеет следующие недочеты.
122 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» НЕПРАВИЛЬНО В этой схеме слишком много изломов A2). Это очень плохо Нарушено правило лаконичности. 3 кружка и 14 стрелок совершенно не нужны. Они являются паразитными элементами, «визуальными помехами», которые отвлекают внимание от главного. ПРАВИЛЬНО В этой схеме всего 4 излома. (На 8 изломов меньше). Это очень хорошо Паразитные кружки и стрелки полностью устранены. Схема стала компактной, ясной и удобной. Правило лаконичности соблюдается. Рис. 58. Плохая схема. Недостатки: слишком много изломов; имеются паразитные элементы Рис. 59. Хорошая (эргономичная) схема. Она нарисована по правилам языка ДРАКОН
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 123 • Для обозначения развилки используется ромб, который занимает слишком много места и не позволяет поместить внутри необходимое количество удобочитаемого текста, состоящего из строк равной длины. В дракон-схеме верхний и нижний углы ромба «отпилены». Поэтому схема становится компактной и удобной как для записи текста, так и для чтения. • Функционально однородные иконы Д, Е, Ж, И хаотично разбросаны по всей площади чертежа, занимая три разных горизонтальных уровня (что путает читателя). В дракон-схеме они расположены на одном уровне, что служит для читателя наглядной подсказкой об их функциональной однородности. • Ромбы имеют выход влево, что разрушает шампур и не позволяет применить правило главного маршрута. В дракон-схеме выход влево не допускается. • Икона Д и ее вертикаль расположены слева от шампура (в дракон- схеме это запрещено). • Ниже икон Ж и И находятся три уровня горизонтальных линий, которые имеют паразитный характер. В дракон-схеме три уровня сведены в одну линию, что делает схему более наглядной и компактной. Да, конечно, каждое из этих улучшений является маленьким и не делает погоды. Но когда мелкие улучшения исчисляются тысячами и становятся массовыми, ситуация может измениться. Количество переходит в качество. В этом случае облегчение умственного труда может стать значительным. «АЛГОРИТМИЧЕСКИЕ МЯТЕЖНИКИ» В последнее время появились алгоритмические «мятежники», которые затеяли восстание против вчерашних авторитетов. Они называют традиционные блок-схемы [4] «кучей мусора». Образчик подобной кучи мусора представлен на рис. 60 [5]. Этот «мусорный» алгоритм мы подвергли косметической операции в «салоне алгоритмической красоты». И превратили в изящную дракон-схему (рис. 61). Сравним, что было и что стало. Схема на рис. 60 имеет множество изъянов. • Слева от иконы Ж есть пересечение линий (в дракон-схеме пересечения запрещены). • Возле иконы Е имеется линия под углом 45° (в дракон-схеме наклонные линии не допускаются). • Иконы Д, Е и Ж имеют более одного выхода (в дракон-схеме это запрещено). • Иконы 5, Д, Е, Ж имеют входы сбоку, что придает схеме неряшливый вид. В дракон-схеме вход разрешается только сверху, что упо-
124 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» рядочивает алгоритм и создает в нем четкую ориентацию «сверху вниз»). • Отсутствует шампур, так как выход иконы «заголовок» и вход иконы «конец» не лежат на одной вертикали. Исчезновение шампура означает, что в схеме отсутствует зрительный остов, художественно-композиционная главная вертикаль. Тем самым уничтожается основа для наглядного выделения главного маршрута. Таким образом, последняя блок-схема (рис. 60), как и предыдущая (рис. 58), по всем параметрам проигрывает дракон-схеме. ЗАЧЕМ ЗДЕСЬ СТРЕЛКИ? РАЗВЕ ОНИ ВНОСЯТ ЯСНОСТЬ? Предыдущие примеры плохих блок-схем были случайным образом взяты из технической литературы. Следующий пример (рис. 62) скопирован из источника [6], где он характеризуется как «стандартная блок-схема ANSI» (Американский национальный институт стандартов). Блок-схема, выполненная по этому стандарту, также имеет многочисленные дефекты: • Ниже иконы G имеет место разрыв шампура (нарушено правило, согласно которому один из путей, идущих от входа к выходу, должен проходить по главной вертикали). • Икона G имеет два входа (в дракон-схеме разрешается только один вход). • Икона G имеет вход сбоку (в дракон-схеме это запрещено). • У иконы G выход находится слева (в дракон-схеме он должен быть снизу). • Две петли обратной связи обычного цикла находятся слева от шампура и закручены по часовой стрелке (в дракон-схеме они расположены справа от шампура и закручены против часовой стрелки). • Используются неудобные ромбы (в дракон-схеме их заменяют эргономичные иконы «вопрос»). • Ромб L имеет выход слева (в дракон-схеме он должен быть справа). • Используются 12 стрелок, из которых 10 — паразитные (в дракон- схеме всего 2 стрелки). • Имеется один избыточный излом линии (в блок-схеме 9 изломов, в дракон-схеме только 8). Таким образом, американская блок-схема, как и предыдущие примеры, по всем параметрам проигрывает дракон-схеме (рис. 63). Мы еще раз убедились, что алгоритмическая красота достигается благодаря совокупному действию многих правил, каждое из которых, взятое по отдельности выглядит скромным и будничным. Нетрудно заметить, что красота дракон-схем во многом достигается за счет стандартизации графических узоров. В «плохих» блок-схемах входы
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 125 МЁП^ВЙЛЬНО В этой схеме нет шампура. Это плохо. Схема без шампура, как всадник без головы. В этой схеме множество эргономических ошибок. Она похожа на запутанный клубок, в котором невозможно разобраться Рис. 60. Плохая схема. Такие схемы часто рисуют многие уважаемые ученые, забывающие об эргономике ПРАВИЛЬНО В этой схеме есть шампур. Это хорошо. Все ошибки исправлены. Шампур — путеводная нить для понимания схемы Рис. 61. Хорошая (эргономичная) схема. Она нарисована по правилам языка ДРАКОН
126 Часть П. ЗНАКОМЬТЕСЬ -ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» В этой схеме слишком много стрелок A2). Это плохо. Лишние стрелки являются визуальными помехами. В схеме царит беспорядок. 1. Ошибка «Разрыв шампура». 2. Ошибки: икона G имеет два входа (один сбоку) и выход слева. 3. Ошибка: петли цикла закручены по часовой стрелке. ПРАВИЛЬНА В этой схеме всего 2 стрелки. (На 10 стрелок меньше). Это очень хорошо. Беспорядок устранен. В схеме, как и положено, есть шампур. Входы и выходы икон нарисованы не хаотично, а по правилам. В результате схема стала ясной и наглядной. Рис. 62. Плохая схема. В ней много эргономических ошибок, что затрудняет понимание алгоритма Рис. 63. Хорошая (эргономичная) схема. Она нарисована по правилам языка ДРАКОН
Глава 5. ЭРГОНОМИЧНЫЕ АЛГОРИТМЫ 127 и выходы икон изображаются как угодно. Стандартизация отсутствует, превращая блок-схемы в царство анархии. В отличие от них язык ДРАКОН задает строгие эргономичные стандарты, направленные на достижение алгоритмической красоты. Это значит, что графические символы, обозначающие одни и те же объекты или явления, должны быть унифицированы. Они должны иметь единое графическое решение. Это касается не только формы икон и правил присоединения к ним входов и выходов. Этому закону подчиняются и более глобальные правила, регламентирующие графический узор всего алгоритма, как целостного зрительного образа. ЭПОХА ПОНЯТНЫХ АЛГОРИТМОВ И ВСЕОБЩАЯ АЛГОРИТМИЧЕСКАЯ ГРАМОТНОСТЬ До сих пор одним из важнейших недостатков теории алгоритмов была ее недостаточная связь с практикой программирования. Это приводило к тому, что разработка и отладка алгоритмов и программ превратилась в сверхтрудный интеллектуальный процесс. В результате производительность труда алгоритмистов и программистов значительно отстает от потребностей практики. Причина этого недостатка — низкая понятность алгоритмов и программ. Причем этот недостаток невозможно устранить чисто математическими методами. Но есть и хорошая новость. Объединение усилий математики и эргономики является плодотворным для решения задачи. Сказанное позволяет предположить, что объявленная выше стратегическая цель — построение ясных, понятных и доходчивых алгоритмов, пригодных для более глубокого взаимопонимания между соисполнителями работ — вполне достижима. Если это верно, то мы находимся на пороге новой эпохи — эпохи понятных алгоритмов. Впервые в истории во всем мире сложные алгоритмы станут легкими для понимания! Это значит, что будет реализована заветная мечта многих алгоритмистов, программистов и заказчиков программных комплексов. Вместо нынешних «уму непостижимых» алгоритмических джунглей повсюду засияют волшебным светом «удивительно наглядные описания алгоритмов и процессов». Перед нашими восхищенными очами откроется новый мир — мир дружелюбных алгоритмов, в котором будет царить необыкновенная легкость и глубина понимания. Можно надеяться, что дальнейшее развитие теории и практики эрго- номизации алгоритмов проложит широкий путь ко всеобщей алгоритмической грамотности (в тех пределах, в которых подобная задача в принципе может быть решена).
128 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» ВЫВОДЫ 1. Понятие «эргономичный алгоритм» должно стать фундаментальным понятием теории алгоритмов. 2. Применение достижений эргономики к теории алгоритмов позволяет значительно улучшить понятность алгоритмов, усилить творческую продуктивность алгоритмистов и программистов. 3. Понятие эргономичного алгоритма задается с помощью конечного набора четко определенных правил и признаков, таких, как «главный маршрут должен идти по шампуру» и т. д. Следовательно, это понятие является строгим. 4. Эргономичность алгоритмов можно улучшить с помощью простых и ясных методов, в частности, с помощью математически строгих эквивалентных преобразований алгоритмов (рокировки, вертикального и горизонтального объединения и подстановки).
Глава ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ Успешность принятия решения во многом зависит от способности человека «визуализировать проблемную ситуацию», наглядно представлять ее и оперировать наглядными образами. Наталья Завалова, Борис Ломов, Владимир Пономаренко [1] ПРОБЛЕМА ЦИКЛИЧНЫХ АЛГОРИТМОВ В этой главе речь пойдет о графических циклах языка ДРАКОН. Проблема втом, что программисты привыкли к текстовой записи циклов, сжились с ней. Для тех, кто всю жизнь использовал текстовую запись, графическая запись (точнее, графический способ мышления о циклах) может показаться непривычным. Чтобы исключить трудности, мы будем рассказывать о циклах на самых простых бытовых примерах, не избегая юмористических приемов. Как говорил великий Блез Паскаль, «предмет математики настолько серьезен, что полезно не упускать случая сделать его немного занимательным». Теперь о главном. Существующие циклы, используемые во всем мире, имеют серьезный недостаток. Они накладывают на творческую мысль ал- горитмиста неоправданные ограничения. Графика позволяет снять многие из этих ограничений. В результате алгоритмическая мысль становится более естественной и плодотворной (подробнее об этом см. главу 22). обычный цикл В языке ДРАКОН имеется следующий ассортимент циклов:
130 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» • обычный цикл; • переключающий цикл; • цикл ДЛЯ; • веточный цикл; • цикл ЖДАТЬ. Первые четыре цикла рассматриваются в этой главе, цикл ЖДАТЬ — в главе 9. Составной графический оператор «обычный цикл» (рис. 2, макроикона 4) содержит иконы «вопрос» и «петля цикла» (рис. 1, иконы И4, И24). Он охватывает циклы трех типов (рис. 64—66): • цикл ДО {do-while), Ф цикл ПОКА (while-do)y Ф гибридный цикл (do-while-do). Визуально отличить их очень легко. У цикла ДО вопрос рисуют внизу, а действие вверху (рис. 64). У цикла ПОКА — все наоборот (рис. 65). Гибридный цикл — это «помесь» цикла ДО и цикла ПОКА (рис. 66). ЦИКЛ «ДО» В цикле ДО действие выполняется до вопроса. Это значит, что бегунок сначала пробегает через одну или несколько икон «Действие», потом — через икону «Вопрос». Например, в цикле на рис. 67 сначала выполняются два действия: • Покрась одну доску; • Шагни вправо на ширину доски. И только после этого задается вопрос: «Все доски покрашены?». При ответе «нет» описанные два действия выполняются снова и снова. Когда все доски будут покрашены, бегунок выходит из иконы «вопрос» через «да». И алгоритм заканчивает работу. ЦИКЛ «ПОКА» В цикле ПОКА иная картина. Действие либо вообще не выполняется, либо выполняется после вопроса. Бегунок сначала движется через икону «вопрос», а затем (если ответ благоприятный) — через икону «действие». Обратимся к примеру на рис. 68. Однажды Карлсон, который живет на крыше, нашел кошелек и открыл его. А что случилось дальше? Здесь возможны варианты. Вариант 1. Кошелек оказался пустым. Поэтому Карлсону не удалось купить плюшку. Вариант 2. В кошельке всего одна денежка, так что Карлсон смог купить только одну плюшку.
Глава 6. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 131 Действие - ( Вопрос я ; У цикла ДО '$ ВОПрОС ВНИЗУ, действие вверху \ Вопрос \ 4,, Действие У цикла ПОКА вопрос вверху, действие внизу I Действие I Вопрос I Действие У гибридного цикла вопрос в середине и два действия: вверху и внизу Рис. 64. Цикл ДО Рис. 65. Цикл ПОКА Рис. 66. Гибридный цикл )\ _ Г Покраска забора [ , I ( Возьми ведро с краской и кисть Подойди к левому краю забора : цикл ДО !¦•¦ \ -^ Покрась одну доску Шагни вправо на ширину доски f:.V у ; Г ВСв ДОСКИ Г окрашены? \__1 да —„„. „,.,1П ..,„„,„„ „ ^ ,гг, | Ура! Задание выполнено. | 1^ Забор покрашен J| Q Конец ) Л Вспомним подсказку: «Пони бегает по кругу». Это значит: при выполнении цикла бегунок ездит по кругу у J Рис. 67. Пример цикла ДО
132 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Вариант 3. В кошельке целая куча монет. Поэтому Карлсон купил гору плюшек и наелся до отвала. Рассмотрим дело подробнее. Цикл на рис. 68 начинается с вопроса: «В кошельке есть денежки?». Если денег нет, из иконы «вопрос» бегунок выходит через «нет», и алгоритм сразу заканчивается. Следовательно, действие «Возьми из кошелька денежку» не выполняется ни разу. Если же деньги есть, бегунок выходит через «да» и начинает кружить по маршруту АБВГДЕЖА. При этом выполняются действия, образующие тело цикла: • Возьми из кошелька денежку. • Купи себе плюшку. • Съешь плюшку. Когда деньги кончатся, бегунок выходит из иконы «вопрос» через «нет». И алгоритм заканчивается. Чем различаются циклы ПОКА и ДО? Цикл ПОКА может либо ни разу не выполняться, либо выполняться один раз, либо много раз (два и более). А цикл ДО обязательно выполняется хотя бы один раз. УСЛОВИЕ ПРОДОЛЖЕНИЯ И ОКОНЧАНИЯ ЦИКЛА Введем два новых понятия. Вообще говоря, эти понятия существовали всегда (без них цикл просто не может работать), но их описание было либо скомканным, либо вообще оставалось за кадром. Уже говорилось, что в иконе «вопрос» записан да-нетный вопрос, то есть логическая переменная величина, принимающая значение «да» или «нет». Условие продолжения цикла — условие, определяемое значением да-не- тного вопроса («да» или «нет»), при котором цикл продолжает работать. Условие окончания цикла — условие, определяемое значением да-не- тного вопроса («да» или «нет»), при котором цикл заканчивает работу. На рис. 68 условие продолжения цикла имеет вид В кошельке есть денежки? да Когда деньги кончатся, логическая переменная изменит свое значение с «да» на «нет». В этот момент условие продолжения цикла исчезнет (станет неистинным). И появится условие окончания цикла: В кошельке есть денежки? нет В обычных языках значения указанных условий жестко регламентируются. Например, в языке Паскаль в цикле ДО (repeat-until) выход из
Глава б. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 133 ( История о том, как Карлсон, который Л \ живет на крыше, нашел кошелек ) -ищ < Подними кошелек Открой кошелек Цикл ПОКА В кошельке есть денежки? да Команда «Вопрос» нет Возьми из кошелька денежку Купи себе плюшку I Съешь плюшку Очень жалко, но ничего не поделаешь Цепь обратной связи АБВГДЕЖ УСЛОВИЕ ПРОДОЛЖЕНИЯ ЦИКЛА В кошельке есть денежки? УСЛОВИЕ ОКОНЧАНИЯ ЦИКЛА В кошельке есть денежки? нет Рис. 68. Пример цикла ПОКА
134 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» цикла производится только тогда, когда логическое выражение принимает значение true (да). Чтобы выполнить столь жесткое условие, иногда приходится делать противоестественную и вычурную запись. В языке ДРАКОН подобные надуманные ограничения полностью отсутствуют, что (в сочетании с другими эргономическими приемами) заметно облегчает разработку алгоритмов. ДОСРОЧНЫЙ ВЫХОД ИЗ ЦИКЛА «ПОКА» Карлсон, который живет на крыше, может съесть очень много плюшек. Наверное, штук сто. Или даже двести. Но не больше! Иначе он просто лопнет. А теперь предположим, что в кошельке, на его счастье (или беду), оказалось пятьсот монет. Как в этой ситуации будет работать алгоритм на рис. 68? Бедный Карлсон! Ему не позавидуешь. Алгоритм заставит его съесть пятьсот плюшек. Все до единой! И он наверняка умрет от обжорства. Почему? Потому что из цикла на рис. 68 нельзя выйти раньше времени. Вспомним — в кошельке пятьсот монет. Значит каждая команда цикла • Возьми из кошелька денежку • Купи себе плюшку • Съешь плюшку будет исполнена ровно пятьсот раз. И лишь затем на вопрос: «В кошельке есть денежки?» — мы получим ответ «нет» и сможем уйти из цикла. Отсюда следует вывод. Чтобы спасти Карлсона, нужно организовать досрочный выход из цикла. Для этого в алгоритм нужно ввести дополнительную команду-вопрос: «Карлсон уже наелся?» (рис. 69). Что это даст? Допустим, в кошельке пятьсот монет, а Карлсон может съесть всего двадцать плюшек. После того как цикл повторится двадцать раз, на вопрос: «Карлсон уже наелся?» — будет получен ответ «да». И мы благополучно выйдем из цикла. Обратите внимание: цикл на рис. 69 имеет не один, а два выхода: основной и досрочный. Через первый мы выходим, когда в кошельке кончились деньги. Через второй — когда Карлсон наелся. ДОСРОЧНЫЙ ВЫХОД ИЗ ЦИКЛА «ДО» Папино слово — закон! А папа сказал: сегодня нужно покрасить забор. На рис. 67 показан случай, когда все идет по плану и работа успешно доводится до конца. Однако в жизни вечно случается то одно, то другое. Например, ни с того ни с сего кончилась краска. Этот случай представлен на рис. 70. Алгоритм на рис. 70 имеет два выхода из цикла: основной (забор удалось покрасить) и досрочный (забор остался недокрашенным).
Глава 6. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 135 История о том ках Карлсон нашел кошелек 1 , утк /\; -/'\ Подними кошелек Открой кошелек цикл ПОКА I ( Цикл ПОКА с двумя выходами Найди эти выходы! В кошельке есть \ да денежки? нет Карлсон уж* \ нет наелся? да Возьми из кошелька денежку Купи себе плюшку Съешь плюшку Досрочный выход из цикла Основной выход из цикла Больше есть не могу, а то, не дай Бог, лопну! ег f i Очень жалко, но ничего не поделаешь Рис. 69. Досрочный выход из цикла происходит потому, что Карлсон больше не хочет есть. Сравни с рис. 68
136 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» С Покраска забора Возьми ведро с краской и кисть Подойди к левому краю забора цикл ДО Цикл ДО с двумя выходами Найди эти выходы! Покрась одну доску Шагни вправо на ширту доски Все доски покрашены? \ нет да Краска кончилась? нет Основной выход из цикла Ура! Задание выполнено. Забор покрашен да Досрочный выход из цикла Забор остался недокрашенным, потому что кончилась краска Собери малярные принадлежности и иди домой Конец ) Рис. 70. Досрочный выход из цикла, потому что кончилась краска
Глава б. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 137 С Покраска забора j Возьми ведро с краской и кисть I Подойди к левому краю забора I Цикл с двумя выходами Найди эти выходы! Покрась одну доску Шагни вправо на ширину доски Вед диски покрашены? \ нет нет да Краска & ведре кончилась? да Сходи в сарай за краской В сарае зсть краска? нет Основной выход из цикла Ура! Задание выполнено. 11 Забор покрашен Да Возьми краску в сарае Досрочный выход из цикла Забор остался недокрашенным, потому что кончилась краска Собери малярные принадлежности и иди домой ( Конец Рис. 71. Досрочный выход из цикла, потому что краска в ведре кончилась. И в сарае краски тоже нет
138 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» 1 С Покраска забора Возьми ведро с краской .Л.'.../..:. ..; ....- :С\;''1. "'% ^) И КИСТЬ 1 j Подойди к левому краю забора [ Цикл с тремя выходами Найди эти выходы! Покрась одну доску I Шагни вправо на ширину доски I Вое доски покрашены? Основной выход из цикла «V нет нет да нет Ребята позвали тебя играть в футбол? Досрочный выход из цикла Забор остался недокрашенным, потому что кончилась краска Ура! Задание выполнено. Забор покрашен да Досрочный выход из цикла Бросай работу и беги играть в футбол Собери малярные принадлежности и иди домой Забор остался недокрашенным, потому что футбол важнее ( Конец ) Рис. 72. Два досрочных выхода: A) потому, что краска кончилась, B) потому что ребята позвали играть в футбол
Глава 6. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 139 Однако, что значит «кончилась краска»? Одно дело, если краски нет в ведре — тогда ее можно взять в сарае. И совсем другое, если в сарае краски тоже нет. Последний случай показан на рис. 71. Жизнь полна неожиданностей. Кому охота красить дурацкий забор, если все нормальные люди уже играют в футбол? Этот полезный для футбола и вредный для забора случай отражен на рис. 72. Данный алгоритм интересен тем, что в нем три выхода из цикла: основной и два досрочных. В первом случае забор будет покрашен как надо. Во втором дело не ладится из-за нехватки краски. В третьем — из-за любви к футболу. Сказанное можно обобщить и записать Правило. В цикле всего один вход. А выходов может быть много. Один выход — основной, остальные — досрочные. ЦИКЛ В ЦИКЛЕ Рассмотрим графическую конструкцию «цикл внутри другого цикла». Пусть это будет цикл ДО внутри цикла ДО. На рис. 67 есть команда «Покрась одну доску». Взглянем на нее «под микроскопом». Чтобы покрасить доску, надо сделать несколько операций: макнуть кисть в краску, сделать мазок, потом еще и еще — до тех пор пока вся доска не станет окрашенной. Эти действия можно изобразить в виде цикла (рис. 73). (Рис. 73 находится слева от рис. 74). Полученный цикл поместим на рис. 67 вместо команды «Покрась одну доску». Результат показан на рис. 74. Мы получили алгоритм, в котором есть конструкция «цикл в цикле». Этот алгоритм работает так. Предположим, забор красит Том Сойер. Сначала Том выполняет две команды (рис. 74): • Возьми ведро с краской и кисть; • Подойди к левому краю забора. Дальше нужно покрасить самую первую доску. Для этого Том исполняет команды, содержащиеся в цикле ДО B): • Обмакни кисть в краску; • Сделай мазок кистью по доске; • Покраска доски окончена? Если не окончена, Том продолжает красить до тех пор, пока не будет выполнено условие окончания цикла ДО B): Покраска доски окончена? да Рассмотрим числовой пример. Допустим, чтобы покрасить одну доску, нужно семь раз макнуть кисть в краску и сделать семь мазков. Значит цикл ДО B) будет выполнен ровно семь раз. После этого Том выполняет команды цикла ДО A): • Шагни вправо на ширину доски; • Все доски покрашены?
140 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Задание 1.Открой рис. 67. 2. Найди команду «Покрась одну доску». 3.Вместо этой команды подставь цикл ДО. —*¦. 4. В результате рис. 67 превратится в рис. 74 (смотри справа). цикл ДО Обмакни кисть в краску Сделай мазок кистью по доске Покраска доски окончена? I Да ' нет Рис. 73. Цикл «Покраска доски» Задание 1. Найди цикл «Покраска доски» на рис. 74. 2. Убедись, что цикл ДО B) находится внутри цикла ( Покраска забора J Возьми ведро с краской и кисть Подойди к левому краю забора цикл ДО A) ЦИКЛ ДО B) Обмакни кисть в краску Сделай мазок кистью по доске Покраска доски окончена? нет да Шагни вправо на ширину доски покрашены? у нет да Ура! Задание выполнено. Забор покрашен ( Конец ) Рис. 74. Цикл в цикле. Внутри цикла ДО A) находится цикл ДО B)
Глава 6. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 141 Если нет (не все доски покрашены), Том примется за следующую доску. Давайте проследим маршрут. Из иконы «Все доски покрашены?» выходим через «нет» направо. По стрелке попадаем на вход цикла ДО A). Затем Том начинает красить вторую доску. Он семь раз макнет кисть и сделает семь мазков. Разделавшись со второй доской, Том шагнет вправо на ширину доски и возьмется за третью доску. И так далее — пока весь забор не будет покрашен (рис. 74). ЦИКЛ «ДО» ВНУТРИ ЦИКЛА «ПОКА» В алгоритме на рис. 68 заменим икону «Съешь плюшку» на цикл ДО, состоящий из икон «Откуси кусок плюшки» и «Плюшка съедена?» (рис. 75). В итоге снова получим цикл в цикле. Цикл ПОКА, построенный с помощью иконы «В кошельке есть денежки?», является внешним. В нем «прячется» внутренний цикл ДО (рис. 75). Поясним. При выполнении цикла ДО бегунок кружит по внутренней петле ВИКЛВ. За это время Карлсон откусывает один кусок плюшки, потом другой и так далее. Когда он покончит с первой плюшкой, будет выполнено условие окончания цикла ДО. Плюшка съедена? да После этого маршрут бегунка меняется. Если в кошельке по-прежнему есть деньги, бегунок побежит по внешней петле ЖАБВГДЕЖ. Предположим, в кошельке 50 монет, а Карлсон съедает плюшку за три приема. Это значит, что каждая команда цикла ПОКА будет выполнена 50 раз, а каждая команда цикла ДО — 150 раз. (Чтобы съесть 50 плюшек, откусив каждую 3 раза, нужно сделать 50 х 3 = 150 «откусываний»). АБСТРАКТНАЯ КОНСТРУКЦИЯ «ЦИКЛ В ЦИКЛЕ» На рис. 76 показано построение абстрактной (буквенной) конструкции «цикл в цикле». На рис. 77 изображены четыре варианта конструкции «цикл в цикле». Этот рисунок очень важен — он задает эргономичные правила графического синтаксиса, используемые при создании конструкции «цикл в цикле». Обратите внимание: в языке ДРАКОН вложение цикла в цикл никогда не порождает пересечения соединительных линий! ОСОБЕННОСТИ ОБЫЧНОГО ЦИКЛА Анализируя рисунки 65—77, можно сделать следующие замечания.
142 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» ¦Р *% С История о том, как Карлсон нашел кошелек Подними кошелек Открой кошелек с Найди выход из цикла ДО и вход в цикл ПОКА. Какая между ними связь? В кошельке есть денежки? да нет I Возьми из кошелька денежку I Купи себе плюшку Л Откуси кусок плюшки / Плюшка съедена? нет И К Очень жалко, но ничего не поделаешь! ( Конец Д Рис. 75. Цикл в цикле. Внутри цикла ПОКА находится цикл ДО. Сравни с рис. 68
Глава б. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 143 щшшпщтщшшпв цикл ПОКА ш Дракон-схема, содержащая цикл ПОКА цикл ДО Вставляем цикл ДО внутрь иконы С, а рамку иконы С удаляем цикл ПОКА ЦИКЛ ДО Схема, полученная из крайней левой схемы в результате замены иконы С на цикл ДО Рис. 76. Как построить цикл в цикле Цикл ДО B) внутри цикла ДОA) Цикл ПОКА B) внутри цикла ДОA) Цикл ДО B) внутри цикла ПОКАA) Цикл ПОКА B) внутри цикла ПОКАA) Рис. 77. Четыре варианта конструкции «цикл в цикле»
144 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Оператор «обычный цикл» имеет один вход и один или несколько выходов. Цикл с одним выходом представляет собой шампур-блок (вход и выход находятся на одной вертикали). Если цикл имеет более одного выхода, основной выход размещается на главной вертикали, дополнительные (досрочные) — правее ее. Шампур цикла проходит через икону «вопрос». Тело цикла ПОКА находится справа от шампура. Петля цикла находится правее главной вертикали и закручена против часовой стрелки. Икона «вопрос» задает условие цикла, которое распадается на две части: условие продолжения цикла и условие окончания цикла (рис. 68). Условие продолжения цикла соответствует правому выходу иконы «вопрос», условие окончания цикла — нижнему. Условие окончания цикла может помечаться как словом «нет», так и словом «да». То же самое относится и к условию продолжения цикла. СТИХОТВОРЕНИЕ И АЛГОРИТМ Наша ближайшая цель — познакомиться с понятием «переключающий цикл». Это цикл, внутри которого находится алгоритмическая конструкция «переключатель». План рассказа таков. Сначала мы познакомимся с переключателем. Чтобы сделать материал приятным для чтения, воспользуемся стихотворением Генриха Гейне, в котором «спрятан» переключатель. Вставай, слуга! Коня седлай! Чрез рощи и поля Скачи скорее ко двору Дункана-короля. Зайди в конюшню там и жди. И, если кто войдет, Спроси: «Которую Дункан Дочь замуж выдает?» Коль чернобровую — лети Во весь опор назад. Коль ту, что с русою косой, Спешить не надо, брат. Тогда ступай на рынок ты, Купи веревку там, Вернися шагом и молчи — Я догадаюсь сам.
Глава 6. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 145 Это стихотворение легко превращается в алгоритм. (Те, кто любит забегать вперед, могут взглянуть на рис. 80). Мы же начнем по порядку. ПЕРЕКЛЮЧАТЕЛЬ Предположим, в алгоритме нужно организовать разветвление на несколько направлений. Задачу можно решить двумя способами: с помощью иконы «вопрос» (рис. 78) и с помощью переключателя (рис. 79). Переключатель — составной графический оператор (рис. 2, макроикона 3), имеющий один вход и один выход, содержащий одну икону «выбор» и несколько (две и более) икон «вариант» (рис. 1, иконы И5, И6). Внутри иконы «выбор» делается надпись, обычно в утвердительной форме, которая обозначает вопрос, имеющий строго определенное число ответов (два и более). Ответы записываются в иконах «вариант». Таким образом, число вариантов равно числу ответов. Говоря формально, в иконе «выбор» записывается переменная, в иконах «вариант» — ее значения. Пример 1. На рис. 80 в иконе «выбор» записан вопрос: «Какую дочь Дункан выдает замуж?». На этот вопрос есть два ответа, записанные в иконах «вариант»: • чернобровую, • с русою косой. Пример 2. На рис. 79 картина иная. На первый взгляд, там нет вопроса. Однако на самом деле вопрос есть, правда неявный. Чтобы убедиться, слово «светофор» прочитаем так: какой сигнал светофора сейчас горит? Вот три ответа: • зеленый, • желтый, • красный. Формально это означает: переменная «Светофор» принимает три значения: зеленый, желтый, красный. КАК РАБОТАЕТ ПЕРЕКЛЮЧАТЕЛЬ? Ответ всегда начинается со слова «если». • Если Дункан выдает замуж чернобровую дочь — лети во весь опор назад. • Если Дункан выдает замуж дочь с русою косой — ступай на рынок, купи веревку, вернись шагом и молчи (рис. 80). • Если светофор зеленый — жми на газ. • Если светофор желтый — притормози.
146 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» • Если светофор красный — стой (рис. 79). Что такое переключатель Что такое «выбор» Что такое «вариант» Это часть алгоритма, имеющая один вход и один выход, внутри которой алгоритм разветвляется на несколько дорожек Переключатель строится с помощью икон «выбор» и «вариант» • Икона, которую рисуют 1 в начале переключателя | • В ней пишут вопрос, имеющий два и более ответов Икона переключателя, в которой пишут ответ на вопрос ПЕРЕКЛЮЧАЮЩИЙ ЦИКЛ Переключатель позволяет создать особый тип цикла — переключающий цикл (рис. 2, макроикона 5). Для этого нужно оторвать выход правой ветви переключателя, загнуть его вверх и присоединить стрелку в нужное место (рис.81). На рис. 82 изображен цикл с переключателем, однако это не переключающий цикл, а обычный. Как их отличить? В первом случае переключатель имеет два выхода, во втором — только один. Есть еще одно отличие. Если вверх загибается выход иконы «вопрос» — это обычный цикл (ДО, ПОКА или гибридный). А если кверху идет выход переключателя — перед нами переключающий цикл. ЦИКЛ ДЛЯ На рис. 83 и 84 показаны два варианта решения простой математической задачи. В первом случае используется цикл ДО, во втором — цикл ДЛЯ. Цикл ДЛЯ — составной графический оператор (рис. 2, макроикона 6). Он содержит иконы «начало цикла ДЛЯ» и «конец цикла ДЛЯ» (рис. 1, иконы И12, И13), между которыми располагаются одна или несколько других икон.
Глава 6. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 147 Yi/ Сигнал светофора зеленый «ЬораЛ"»Т .Г ¦! Сигнал светофора желтый ? нет Жми на газ Притормози i Значит, горит \ красный | Стой Рис. 78. Развилка на три направления, построенная с помощью иконы «вопрос» Рис. 79. Развилка на три направления, построенная с помощью переключателя
148 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» с Любовная история Вставай, слуга! Седлай коня Скачи ко двору короля Дункана Войди в конюшню и спроси Какую дочь Дункан выдает замуж? 7 Чернобровую Лети во весь опор назад Конец J Эта алгоритмическая конструкция называется «Переключатель» 1 С русою косой Ступай на рынок Купи веревку Вернись шагом и молчи "ч •../ Л * >>х^> • ••.' , | v.j. jv/j Рис. 80. Стихотворение Генриха Гейне, преобразованное в алгоритм
Глава б. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 149 С Как доехать до работы ? Дано Возле моего дома останавливаются трамваи 1,2,4 и автобусы 5,6,7,8,9. Чтобы добраться до работы, я должен сесть на трамвай 2 и ехать без пересадок. Или на автобусы 8 и 9 (с пересадками). Все остальные маршруты мне не подходят. Надо Доехать от дома до работы. Чтобы построить переключающий цикл, нужно: • оторвать правый выход переключателя; • загнуть его вверх; • превратить его в цепь обратной связи цикла Какой транспорт У подошел / ПЕРЕКЛЮЧАТЕЛЬ Поезжай без пересадок Поезжай с пересадкой на метро Поезжай $ пересадкой на троллейбус Ехать нельзя* Жди следующий трамвай или автобус Левый выход переключателя Правый выход переключателя Рис. 81. Переключающий цикл
150 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Внутри иконы «начало цикла ДЛЯ» указываются переменная цикла, ее начальное и конечное значения и шаг. Порядок записи этих величин определяется выбранным вариантом текстового синтаксиса. На рис. 84 изображен вариант, по умолчанию принимающий, что шаг равен 1. веточный цикл Циклы, описанные выше, могут использоваться как в примитиве, так и в силуэте. В этом параграфе речь пойдет о веточном цикле, который встречается только в силуэте. Веточный цикл — это повторное исполнение одной и той же ветки. Чтобы построить веточный цикл, нужно написать в иконе «адрес» название данной ветки (или более левой ветки). На рис. 67 изображен циклический алгоритм «Покраска забора». Можно ли нарисовать его в виде силуэта? Да, можно. Результат показан на рис. 85. Во второй ветке слово «Покраска» встречается дважды: вверху и внизу. Это значит, что перед нами веточный цикл. Бегунок, доехав до адреса «Покраска», тут же вернется к началу ветки и будет «утюжить» ее вновь и вновь. Л История студента, который вынужден подрабатывать /День недели/ ПЕРЕКЛЮЧАТЕЛЬ Учись в институте Работай грузчиком Работай сторожам Учись &"¦ институте Работай дворником -Г Студент закончил институт? да Q Конец Рис. 82. Цикл ДО, в котором есть переключатель
Глава б. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 151 / Вычисление ( факториала с помощью ;Л цикла ДО Дано Задано целое число п ? 1 Надо Вычислить факториал X по формуле М" Х= 1 Х = кХ к= к+ <с цикл ДО нет Q Конец Рис. 83. Как вычислить факториал X = п! с помощью цикла ДО Вычисление \ факториала с помощью 1 цикла ДЛЯ J Дано Задано целое число п ? 1 Надо Вычислить факториал по формуле Х= 1 X / от к * t до п X » ЮС Конец цикла к цикл ДЛЯ Конец ) Рис. 84. Как вычислить факториал X = п! с помощью цикла ДЛЯ
152 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Циклическое движение по ветке «Покраска» будет продолжаться, пока выполняется условие продолжения цикла: Все доски покрашены? нет Когда Том Сойер кончит красить забор, появится условие окончания цикла: Все доски покрашены? да После этого бегунок, проходя через икону «вопрос», повернет направо и через адрес «Завершение» попадет в ветку «Завершение». На этом алгоритм закончит работу (рис. 85). Другой пример веточного цикла показан на рис. 86. Как и любой цикл, веточный цикл может иметь основной и досрочный выходы (рис. 87 и 88). Веточный цикл можно использовать в сочетании с циклами ПОКА и ДО. Например, на рис. 89 изображена конструкция «цикл в цикле». Внутри веточного цикла «Покраска» находится цикл ДО, содержащий иконы: • Обмакни кисть в краску; • Сделай мазок кистью по доске; • Покраска доски закончена? Вопрос, Зачем нужны маленькие черные треугольники в иконах «Покраска» и «Покупка плюшек» (рис. 85—89)? Ответ. Это флажки. Они привлекают внимание и позволяют легко заметить веточный цикл даже при беглом взгляде. ПРЕЖНИЙ ПОДХОД ИСЧЕРПАЛ СЕБЯ Описание циклов с помощью текста следует признать устаревшим. Визуальные циклы гораздо удобнее и эффективнее. Существующая «текстовая» традиция возводит в ранг закона «насилие» над мыслью программиста, заставляя его, в частности, вводить никому не нужные и нередко опасные инверсии логических условий. Например, язык Си требует: «выход из цикла производится только по false». Данное требование заставляет «искалечить» пример на рис. 67 и заменить утвердительный вопрос «Все доски покрашены?» на отрицательный «Доски не покрашены?». Это явно противоречит рекомендациям эргономики, согласно которым отрицательные вопросы нежелательны, ибо провоцируют ошибки [2].
Глава 6. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 153 Покраска забора Подготовка к работе Возьми ведро с краской и кисть Покрась одну доску Подойди к левому краю забора Шагни вправо на ширину доски Ура! Задание выполнено. Забор покрашен Рис. 85. Силуэт с веточным циклом. Сравни с рис. 67 Карлсон нашел j кошелек у Покупка плюшек Завершение есть денежки? Возьми из кошелька денежку Купи себе плюшку Очень жалко, но ничего не поделаешь
154 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» С Карлсон нашел кошелек Находка Подними кошелек Открой кошелек Покупка плюшек Покупка плюшек В кошельке есть денежки? да нет Возьми из кошелька денежку Купи плюшку Завершение / Карлсон \ ( Уже У \ наелся? / да Рис. 87. Веточный цикл с досрочным выходом. Сравни с рис. 69
С ПокРаска забора Покрась одну доску Сходи в сарай за краской Возьми ведро с краской Собери малярные принадлежности и иди домой Основной выход из цикла Шагни вправо на ширину доски Подойди к левому краю забора Досрочный выход из цикла / Все доски \ покрашены? Досрочный выход из цикла Ура! Задание выполнено. Забор покрашен Забор остался недокрашенным потому что кончилась краска Краска в ведре кончилась? Покраска | | Уборка | Рис. 88. Найдите веточный цикл. Найдите досрочные выходы. Сравните с рис. 71 1Л
156 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» (Покраска Л забора / П од готовка к работе Возьми ведро с краской и кисть Подойди к левому краю забора цикл ДО Обмакни кисть ш краску Сделай мазок кистью по доске Покраска досяи закончена? г нет да Шагни вправо на ширину доски Ура! Задание выполнено. Забор покрашен Рис. 89. Цикл ДО внутри веточного цикла. Найдите цикл ДО и веточный цикл. Объясните, как они работают
Глава б. ВИЗУАЛИЗАЦИЯ ЦИКЛИЧНЫХ АЛГОРИТМОВ 157 ВЫВОДЫ 1. В различных текстовых языках при описании циклов применяются разные наборы ключевых слов, имеющих к тому же разную семантику. Неразбериху усугубляют отличия в логике окончания цикла. Например, в языке Си для циклов while и do-while условие окончания цикла соответствует значению false или 0, условие продолжения — значению true или 1. В языке Паскаль картина иная: в цикле while—do выход из цикла соответствует значению false, а в цикле repeat—until по каким-то загадочным причинам применяется диаметрально противоположный принцип: выход из цикла производится, когда логическое выражение принимает значение true. Все эти путаные правила программист обязан знать и неукоснительно выполнять. 2. Отсутствие унификации ключевых слов и разнобой в определении условий выхода из цикла является серьезным недостатком. Программисты вынуждены зубрить ключевые слова и значения условий, причем освоение каждого следующего языка требует новой зубрежки. 3. С точки зрения визуального программирования, указанные трудности являются надуманными и легко устраняются. Надо лишь отказаться от сложившихся привычек и устаревших стереотипов мышления, связанных с текстовым программированием. Визуализация качественно меняет ситуацию, поскольку текст больше не является единственным носителем информации. 4. Визуальные образы уменьшают нагрузку на память программиста. Ликвидируют ошибки, вызванные неправильным пониманием семантики ключевых слов. Отменяют ненужные ограничения. Предоставляют пользователю богатую палитру выразительных средств. И в конечном итоге обеспечивают более высокую понима- емость алгоритмов и программ. 5. Визуализация циклов — весьма полезный инструмент, так как сложные вложенные циклы со многими выходами часто бывают источником трудных ошибок. Многие из них возникают из-за путаницы, связанной с устаревшей привычкой описывать циклы словами. Сегодня никто не пытается заменить конструкторские и строительные чертежи словесными описаниями. По мнению автора, текстовая форма записи циклов во многих случаях является таким же анахронизмом, как словесное описание механического чертежа или электрической схемы.
Глава ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКИХ ФОРМУЛ Существует форма представления информации наглядная, броская, понятная всем с детства. Такой формой является графика. Валерий Венда [1] ЩЕПОТКА МАТЕМАТИКИ В большинстве случаев математики записывают алгоритмы в виде текста (математического текста). В последнее время развивается новое направление — визуальное представление алгоритмов и программ. Однако известные чертежи алгоритмов обладают важным недостатком — они слишком трудны для понимания. Язык ДРАКОН выгодно отличается от конкурентов тем, что удовлетворяет критерию сверхвысокого понимания и облегчает работу с алгоритмами. Тем не менее, есть одно «но». Читатель-математик вправе усомниться: обеспечивают ли дракон-схемы необходимую математическую строгость? Является ли визуальная запись алгоритмов столь же точной, как и текстовая математическая запись? На этот вопрос следует дать утвердительный ответ. Дракон-схемы нисколько не уступают тексту. Чтобы пояснить суть дела, рассмотрим частный случай — алгоритмическую конструкцию Если-то-иначе и равносильную ей дракон-схему (рис. 90). Из рисунка видно, что обе формы алгоритма (текст и схема) математически эквивалентны, то есть выражают в точности одинаковое содержание.
Глава 7. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКИХ ФОРМУЛ 159 Текст Если (Суп готов? = то Ешь суп иначе Ешь кашу да) < L Дракон-схема J СуП ГОТОВ: у?11" т Ешь суп | 1 Ешь кашу | ] 1 Рис. 90. Содержательный алгоритм. (Текст и схема математически равносильны) Введем обозначения: • А = Суп готов? • В = Ешь суп • С = Ешь кашу Подставив новые обозначения в рис. 90, получим «буквенный» алгоритм на рис. 91. Текст Если А = да то В иначе С Дракон-схема I А нет В Рис. 91. Буквенный алгоритм. (Текст и схема математически равносильны) Применим рокировку к дракон-схеме. Для этого в правой части рис. 91 поменяем местами: • иконы В и С; • слова «да» и «нет». Аналогичные изменения произведем и в левой части рис. 91. Результат представлен на рис. 92. Текст Если А = нет то С иначе В Дракон-схема 1 \ А > 1 нет 1 с | | в | Рис. 92. Буквенный алгоритм после рокировки. (Текст и схема математически равносильны)
160 Часть п- ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Заметим, что все четыре формы записи алгоритма, показанные на рис. 91 и 92, равноценны. Можно сказать и по-другому: один и тот же алгоритм записан четырьмя разными способами. Сделаем следующий шаг рассуждений. Уберем из рис. 92 символы А, Ву С, да, нет, =. В итоге получим рис. 93. Текст Если то иначе Дракон-схема < > 1 11 1 Рис. 93. Абстрактный алгоритм. (Текст и схема математически равносильны) Абстрактная дракон-схема — схема, из которой удалены все текстовые надписи. На рис. 93 справа показан частный случай такой схемы — абстрактная развилка. Ее математический смысл выражается формулой Если-то-иначе (If~-Then-Else). Сделанные пояснения убедительно подтверждают, что графический узор дракон-схемы является четко определенным математическим объектом. Сочетание математической строгости и богатых возможностей когнитивно-эргономического подхода позволили превратить язык ДРАКОН в удобный инструмент, обеспечивающий заметный рост производительности умственного труда при решении широкого класса задач. ВИЗУАЛИЗАЦИЯ ФУНКЦИИ «И» — Где можно купить щенка? — В нашем городке они продаются на рынке, но сегодня рынок закрыт. К тому же щенков продают не каждый день. Щенки довольно дорогие и какие-то невзрачные — не знаю, понравятся ли они вам. Упростим ситуацию. Будем считать, что покупка щенка возможна в том и только в том случае, когда выполняются три условия (рис. 94): • у покупателя деньги есть (Q); • щенки есть в продаже (R)', • щенок понравился E). В итоге получаем логическую функцию и Rи S где X означает «Можно купить щенка» (рис. 94).
Глава 7. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКИХ ФОРМУЛ 161 1"^ / "^ ЛОГИЧЕСКОЙ ФУНКЦИИ «И» Можно купить щ*Н1Ш Деньги есть? И Щенки есть в продаже? И Щенок понравился? Логическая функция «Можно купитыценка» принимает значение «да», если одновременно выполняются три условия: Деньги есть? Логическая функция X = Qh RmS принимает значение «да», если одновременно выполняются три условия: Щенки есть в продаже? 1 = I да Щенок понравился? = да да S - * Во всех остальных случаях логическая функция «Можно купить щенка» принимает значение «нет» Во всех остальных случаях логическая функция X = Qh RhS принимает значение «нет» КАКИЕ СЛОВА ЭРГОНОМИЧНЕЕ: «ДА, НЕТ» ИЛИ «ИСТИНА, ЛОЖЬ»? Большинство людей, отвечая на вопрос «Деньги есть?», отвечают «да» или «нет». И это всем понятно. Однако в программировании принята иная (и крайне неудачная) традиция. Отвечая на тот же самый вопрос, программисты говорят «Истина» или «Ложь». Подобное отступление от здравого смысла ничем не оправдано. В языке Дракон эта несообразность устранена. И принято правило: ЛОГИЧЕСКИЕ ПЕРЕМЕННЫЕ ПРИНИМАЮТ ЗНАЧЕНИЯ «ДА» И «НЕТ» Рис. 94. Логическая функция «Можно купить щенка» является функцией трех логических переменных, связанных операцией «И»
162 Часть п- ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» БУДЬТЕ ПРОЩЕ — К ВАМ ПОТЯНУТСЯ! В традиционных языках программирования значениями логических переменных считаются пары (ИСТИНА, ЛОЖЬ) или A,0). С эргономической точки зрения, такой подход нельзя признать удачным. В самом деле, использование «шибко мудреных» слов ИСТИНА и ЛОЖЬ или таинственных цифр 1 и 0 в примере о щенках (как и в любом другом конкретном примере) является надуманным и дезориентирующим. Оно не содействует пониманию сути дела, а наоборот, затемняет картину. Чтобы поправить дело, надо убрать никому не нужные сложности. В качестве значений логических переменных и логических функций гораздо лучше выбрать простые и ясные слова «да» и «нет». Смысл этих слов не требует пояснений. Он понятен любому. Даже ребенок знает, что такое «да» и «нет». Поэтому в языке ДРАКОН используются ключевые слова «да» и «нет». А логические функции, переменные и выражения рассматриваются как да-нетные вопросы или утверждения. ЛОГИЧЕСКАЯ ФУНКЦИЯ «И» Логическая функция И — это функция, которая принимает значение «да», если все логические переменные имеют значение «да». В остальных случаях функция приобретает значение «нет» (рис. 94). АЛГОРИТМЫ, ИСПОЛЬЗУЮЩИЕ ФУНКЦИЮ «И» На рис. 95 приведены два примера алгоритмов. Слева описан рассказ о покупке щенков. Справа тот же самый алгоритм представлен в абстрактной математической форме. Попытайтесь в правом алгоритме найти и выделить логическую функцию «И». Полученный результат пригодится при анализе рис. 96. ДВА СПОСОБА ЗАПИСИ ФУНКЦИИ «И» На языке ДРАКОН существуют два способа записи функции И: текстовый и визуальный. В первом случае используют одну икону «вопрос», внутри которой пишут логическое выражение, состоящее из логических переменных, соединенных знаками логической операции И (рис. 96 слева). В другом случае на одной вертикали рисуют N икон «вопрос», где N — число логических переменных, причем в каждой иконе записывают одну логическую переменную (рис. 96 справа).
Глава 7. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКИХ ФОРМУЛ 163 Покупка щенка jtf Деньги есть? g S; <; 4Y Щенки есть в продаже? Щенок понравился? Покупай щенка ( Конец Рис. 95. Примеры алгоритмов с операцией «И» •?*• I - , ^ ФОРМУЯАч нет да Алгоритм Нерекомендуемая схема Логическое выражение построено с помощью одной иконы «вопрос», внутри которой записано составное условие Q и R и S Алгоритм *И»* Рекомендуемая схема Логическое выражение построено с помощью трех икон «вопрос», в каждой из которых записано простое условие Рис. 96. Рисуйте дракон-схему «И», как показано справа. Избегайте нерекомендуемых схем
164 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» КАКОЙ СПОСОБ ЛУЧШЕ: ТЕКСТОВЫЙ ИЛИ ВИЗУАЛЬНЫЙ? Визуальная формула на рис. 96 показывает, что оба способа эквивалентны. Для практического использования рекомендуется визуальный способ, так как он более нагляден и позволяет быстрее найти ошибку в сложном алгоритме. Следует подчеркнуть, что текстовый способ не является запрещенным, но пользоваться им следует с осторожностью и лишь в тех случаях, когда пользователь убежден в своих способностях гарантировать отсутствие ошибок. Опыт показывает, что большинство людей выбирает визуальный способ как более легкий. Однако подготовленные специалисты, знакомые с основами математической логики, иногда предпочитают текстовый метод. Таким людям можно посоветовать освоить оба метода. СРАВНЕНИЕ МАТЕМАТИЧЕСКОЙ ФОРМУЛЫ И ДРАКОН-СХЕМЫ На рис. 97 приведена математическая формула и равносильная ей дракон- схема. Какую из них следует предпочесть? Какая является более эргономичной? Слева представлена традиционная формула, понятная далеко не всем. Формула справа, написанная на языке ДРАКОН, намного легче для понимания. Она становится еще более наглядной, если заменить абстрактные буквы Q, R, S, В на конкретные производственные понятия. Например: Q = норма подачи топлива; R = норма зажигания; S = норма электропитания; В = включить двигатель. Два объекта (текстовый слева и графический справа на рис. 97) математически равносильны. Это значит, что графическая дракон-схема является МАТЕМАТИЧЕСКОЙ ФОРМУЛОЙ. Отсюда вытекает, что математические формулы бывают не только текстовые, но и графические. И последнее. Анализируя формулу слева на рис. 97, обычно приходится вникать в сложные подробности, например: X = [Q & R & S = да] - [«2 - да) & (R = да) & (S « да)] Дракон-схема (рис. 97, справа) хороша тем, что полностью избавляет читателя от подобной ненужной работы.
Глава 7. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКИХ ФОРМУЛ 165 Если (Q & R & S то В = да) Условный оператор Если X то В с логическим выражением X = (Q & R & S = да) ДРАКОН-рХЕМА Рис. 97. Математическая формула и дракон-схема ВИЗУАЛИЗАЦИЯ ФУНКЦИИ «ИЛИ» Пете не повезло — он заболел. Что с ним случилось? На этот счет может быть тьма ответов. Но медициной мы заниматься не будем. Ограничимся логикой. Для простоты будем считать, что Петя болен, если выполняется хотя бы одно из трех условий (рис. 98): • у Пети грипп (L); • у Пети ангина (М); • у Пети ушиб (N). В итоге получаем логическую функцию X = L или М или N где X означает «Петя заболел» (рис. 98). ЛОГИЧЕСКАЯ ФУНКЦИЯ «ИЛИ» Логическая функция ИЛИ — это функция, которая принимает значение «да», если хотя бы одна логическая переменная имеет значение «да». Функция принимает значение «нет», если все логические переменные имеют значение «нет» (рис. 98).
166 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» ЛО ГИ ЧЕС КОЙ ФУН КЦИ И « И Л И » м . Петя „ заболел У Пети грипп? ИЛИ У Пети ангина? ИЛИ У Пети ушиб? Логическая функция «Петя заболел» принимает значение «да», если выполняется хотя бы одно из трех условий: I УПётй грипп? I Логическая функция X = L или М или N принимает значение «да», если выполняется хотя бы одно из трех условий: L У Пети ангина? УПетиушцб? Во всех остальных случаях логическая функция «Петя заболел» принимает значение «нет» Во всех остальных случаях логическая функция X = L или М или N принимает значение «нет» КАКИЕ СЛОВА ЭРГОНОМИЧНЕЕ: «ДА, НЕТ» ИЛИ «ИСТИНА, ЛОЖЬ»? Большинство людей, отвечая на вопрос «Петя заболел?», отвечают «да» или «нет». И это правильно. Однако программисты поступают по-другому. Отвечая на тот же самый вопрос, они говорят «Истина» или «Ложь». Подобное уклонение от здравого смысла ничем не оправдано. В языке Дракон эта нелепость устранена. И принято правило: ЛОГИЧЕСКИЕ ПЕРЕМЕННЫЕ ПРИНИМАЮТ ЗНАЧЕНИЯ «ДА» И «НЕТ» Рис. 98. Логическая функция «Петя заболел» является функцией трех логических переменных, связанных операцией «ИЛИ»
Глава 7. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКИХ ФОРМУЛ 167 АЛГОРИТМЫ, ИСПОЛЬЗУЮЩИЕ ФУНКЦИЮ «ИЛИ» На рис. 99 приведены два примера алгоритмов. Слева рассказ о Петиных недугах. Справа тот же самый алгоритм представлен в абстрактной математической форме. Попытайтесь в правом алгоритме найти и выделить логическую функцию «ИЛИ». Полученный результат пригодится при анализе рис. 100. ДВА СПОСОБА ЗАПИСИ ФУНКЦИИ «ИЛИ» На языке ДРАКОН существуют два способа записи функции ИЛИ: текстовый и визуальный. В первом случае используют одну икону «вопрос», внутри которой пишут логическое выражение, состоящее из логических переменных, соединенных знаками логической операции ИЛИ (рис. 100 слева). В другом случае лесенкой рисуют N икон «вопрос», где N — число логических переменных, причем в каждой иконе записывают одну логическую переменную (рис. 100 справа). КАКОЙ СПОСОБ ЛУЧШЕ: ТЕКСТОВЫЙ ИЛИ ВИЗУАЛЬНЫЙ? Визуальная формула на рис. 100 показывает, что оба способа эквивалентны. Для практического использования рекомендуется визуальный способ. Он более нагляден и позволяет быстрее понять суть сложного алгоритма. Следует подчеркнуть: ДРАКОН не запрещает работать с левой формулой. Но тем, для кого она трудна, предлагается более гуманный и легкий вариант. СРАВНЕНИЕ МАТЕМАТИЧЕСКОЙ ФОРМУЛЫ И ДРАКОН-СХЕМЫ На рис. 101 приведена математическая формула и равносильная ей дракон-схема. Слева — традиционная текстовая формула, понятная узкому кругу математиков и программистов. Справа — «демократическая» графическая формула, записанная на языке ДРАКОН. Она понятна значительно более широкому кругу работников. Как показывает практика, правая формула доступна даже тем людям, которые испытывают непреодолимые затруднения при работе со сложной левой формулой.
168 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» С Что с Петей? \ * * ' : \ У Пети грипп? >—^ да Л <^ У Пети - | Петя заболел [ j (Конец ) Рис. вт ". v / ! •••';•'А.: да ;„ si У Пети ушиб?у~г т , ч^ -;: j '' ' ¦¦ ¦ 99. Примеры алгоритмов с * ч •от? г- в [ G 'Л ' '1 да; г ¦ ' -й операцией «И» ВИЗУАЛЬНАЯ ФОРМУЛА !" нет или 1м|илиш1 нет да нет Алгоритм «ИЛИ», Нерекомендуемая схема Логическое выражение построено с помощью одной иконы «вопрос», внутри которой записано составное условие «L или М или N» Алгоритм «ИЛИ». Рекомендуемая схема Логическое выражение построено с помощью трех икон «вопрос», в каждой из которых записано простое условие Рис. 100. Рисуйте дракон-схему «ИЛИ», как показано справа. Избегайте нерекомендуемых схем
Глава 7. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКИХ ФОРМУЛ 169 Если (L v M V N то В = да) Условный оператор Если X то В с логическим выражением X ¦ (L V М v N = да) ДРАКОН-СХЕМА нет Рис. 101. Математическая формула и дракон-схема НЕПРАВИЛЬНО* Логическая схема «И» Эта схема считается запрещенной и исключается из рассмотрения ПРАВИЛЬНО Логическая схема «И» Главный выход Инверсный выход Рис. 102. Два выхода логического фрагмента: главный и инверсный
170 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Анализируя формулу слева на рис. 101, нередко приходится вникать в сложные подробности, например: X = [I v M v N- да] - [(I = да) v (iV= да) v (tf- да)] Дракон-схема (рис. 101, справа) хороша тем, что полностью избавляет читателя от подобной ненужной работы. ЛОГИЧЕСКИЙ ФРАГМЕНТ ДРАКОН-СХЕМЫ На рис. 102 схема И представлена двумя способами: слева и справа. Подобная неоднозначность зрительных образов нежелательна, так как может привести к путанице. В связи с этим левая схема считается «незаконной» и исключается из рассмотрения. Весь дальнейший текст относится исключительно к «законной» правой схеме. Определение. Фрагмент дракон-схемы называется логическим, если он имеет один вход, два выхода и содержит только иконы «вопрос». Левый выход логического фрагмента называется главным, правый — инверсным. Главный выход лежит на шампуре и обычно обозначается буквой Х^ Инверсный выход находится справа от шампура и обозначается буквой Х(рис. 102). В реальных дракон-схемах буквы X и X обычно не пишут, а подразумевают. ЛОГИЧЕСКАЯ ФУНКЦИЯ «НЕ» Логическая функция НЕ — это функция W= Z, где логические переменные Zu W принимают инверсные значения, то есть удовлетворяют условиям: если Z = да, то W = нет; если Z = нет, то W = да. ВИЗУАЛИЗАЦИЯ ФУНКЦИИ «НЕ» Как известно, логическое отрицание представляет определенную трудность для понимания. В связи с этим Эдвард Йодан советует: «Если это возможно, избегайте отрицаний в булевых выражениях. Представляется, что их понимание представляет трудность для многих программистов» [2]. Учитывая сказанное, ниже будет показано, что логическое отрицание (а также логические связки «И» и «ИЛИ») можно безболезненно изъять из логических выражений.
Глава 7. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКИХ ФОРМУЛ 171 . Г ,? ^feSrv /\ z: ч нет ^' ' , '< i, л . ' нет 'В. Схемы слева содержат двойное отрицание. С точки зрения эргономики, двойное отрицание нежелательно, так как оно увеличивает вероятность ошибок. Схемы справа позволяют убрать двойное отрицание Алгоритм «Hi», Нерекомендуемая схема Логическое выражение «НЕ» построено с помощью знака логического отрицания - верхней черты Алгоритм : Рекомендуемая схема Чтобы убрать знак логического отрицания (верхнюю черту), поменяйте местами надписи «да» и «нет» Рис. 103. Визуальные формулы, позволяющие освободиться от знака логического отрицания (верхней черты).
172 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Правило. Знак логического отрицания (верхнюю черту) всегда можно исключить из дракон-схемы. Для этого надо поменять местами слова «да» и «нет» на выходах иконы вопрос. (При этом иконы, находящиеся в плечах развилки, следует оставить на своих местах). Визуальные формулы на рис. 103 иллюстрируют это правило. КАНОНИЧЕСКИЙ ВИД ДРАКОН-СХЕМЫ Определение. Дракон-схема имеет канонический вид, если она: • не содержит логических связок И, ИЛИ, НЕ; • не содержит повторяющихся частей, которые можно удалить с помощью операций горизонтального и вертикального объединения; • иконы «вопрос», образующие логическую схему И расположены на шампуре, (см. рис. 96, справа); • иконы «вопрос», образующие логическую схему ИЛИ расположены лесенкой, (см. рис. 100, справа). Теорема. Дракон-схему всегда можно привести к каноническому виду с помощью цепочки равносильных преобразований. Приведение дракон-схемы к каноническому виду показано для частного случая (рис. 104). Упражнения на рис. 105 помогут читателю закрепить материал. ЗАПРЕЩЕННЫЕ ДРАКОН-СХЕМЫ На рис. 102 был показан пример запрещенной схемы «И». Рассмотрим вопрос в более общем виде. Правило. Выход логической функции X должен находиться на шампуре. Понятие «канонический вид» подразумевает запрет использовать дракон-схемы на рис. 106 слева. Запрет объясняется тем, что в этих схемах выход логической функции X не находится на шампуре. Теорема. Если главный выход логической дракон-схемы есть результат вычисления логической функции Х} то инверсный выход вычисляет ее логическое отрицание X. Доказательство теоремы предоставляем читателю.
Глава 7. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКИХ ФОРМУЛ 173 Щт!15И;ВШЕШ:ШШК KA»-i;©m и ч eg ко му в иду Удаление логического отрицания нет С . нет Удаление логической связки «И» Рокировка АиВ нет Канонический вид дракон- схемы Рис. 104. Цепочка равносильных преобразований позволяет привести дракон-схему к каноническому виду
174 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Рис. 105. Преобразуйте дракон-схемы к каноническому виду Запрещенная схема «И» i да Разрешенная схема «И» Запрещенная схема «ИЛИ» да IV, А да X Разрешенная схема «ИЛИ» i нет ¦^Л^к. Рис. 106. Рисуйте схемы, как показано справа. Схемы слева логически правильны; тем не менее они ЗАПРЕЩЕНЫ, чтобы исключить неоднозначность
Глава 7. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКИХ ФОРМУЛ 175 П Р Й М Ё Р ;СШ^Н0 Й Л ОТЙ Ч ЕС КО И ФУ Н КЦ И Й Первая функция «И» Вторая функция «И» ; X Я|: (А и В и С) или (D и Е и F) Дракон-схема, реализующая функцию X Эта схема реализует первую функцию «И» Эта схема реализует вторую функцию «И» Точка К реализует функцию «ИЛИ» Рис. 107. Как нарисовать дракон-схему для сложной логической функции?
176 Часть п- ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» да Данная схема реализует функцию: Данная схема реализует функцию: X » В или (О и D) или (В и F и &) или К Рис. 108. Преобразование дракон-схемы в логическую функцию / S нет Ли? да Гнет Тнет да ^ ш '¦ * х* 4 Д-JL да нет у т v нет < С ^—W 1 y-^f нет |да ; Гнет 1 V V ( <4>^ i |нет Л ! tx Рис. 109. Какую логическую функцию вычисляют эти схемы? •' 1 Pi" Tier 1 1 XT'j
Глава 7. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКИХ ФОРМУЛ 177 ВИЗУАЛИЗАЦИЯ СЛОЖНЫХ ЛОГИЧЕСКИХ ФУНКЦИЙ Рассмотрим функцию Х=(А и В и С) или (Dh E и F A) На рис. 107 показан визуальный способ записи этой функции. Из рисунка видно, что формула A) разбивается на три части: • Ли В и С; • ИиЕиF; • Операция «или». Функция А и В и С изображается с помощью трех икон А, В, С, расположенных на одной вертикали. Аналогично рисуют функцию БиЕи F . Связка «или» реализуется с помощью линий, объединяющих нижние выходы икон С и Fb точке К (рис. 107). В формуле A) некоторые члены записаны без логического отрицания (Л, В, Д ?), другие — с отрицанием ( В , F ). Члены без отрицания превращаются в иконы Л, 5, Д Е, у которых нижний выход помечен словом «да». Членам с отрицанием соответствуют иконы В и F, где нижний выход помечен словом «нет» (рис. 107). Другие примеры алгоритмов, вычисляющих сложные логические функции, представлены на рис. 108, 109. Опираясь на изложенные соображения, можно показать, что справедлива Теорема. Дракон-схему, содержащую логические связки И, ИЛИ, НЕ внутри икон «вопрос», всегда можно преобразовать в эквивалентную дракон-схему, не содержащую указанных связок. Доказательство теоремы, как всегда, оставляем читателю. выводы 1. В алгоритмах со сложной логикой часто используются условные операторы с логическими выражениями. Опыт показывает, что такие операторы во многих случаях трудны для понимания, что нередко приводит к ошибкам. 2. В языке ДРАКОН используются визуальные логические выражения, позволяющие при желании полностью исключить логические связки И, ИЛИ, НЕ из условных операторов. 3. Визуализация логических формул во многих практически важных случаях заметно облегчает их понимание и уменьшает вероятность ошибок.
Глава ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 8 Все в алгоритме понятно и ясно, Если он сделан эргономично. Эргономично — это прекрасно! Эргономично — значит отлично! МОЖНО ЛИ СДЕЛАТЬ ЛОГИЧЕСКИЕ ВЫРАЖЕНИЯ ЭРГОНОМИЧНЫМИ? Одна PI3 основных целей языка ДРАКОН — улучшение понятности алгоритмов, программ и технологий. До сих пор мы решали эту задачу методом визуализации, превращая часть текста в эргономичный графический образ. А как должна выглядеть другая часть текста — та, что не подлежит визуализации и записывается внутри икон? Можно ли сделать ее более ясной и доходчивой? Более эргономичной? Поставленный вопрос слишком обширен и сложен. Поэтому сузим тему и ограничимся частной задачей. Как следует записывать идентификаторы логических переменных и логические выражения, чтобы сделать их более понятными? ПРИМЕР ДЛЯ ИССЛЕДОВАНИЯ ЭРГОНОМИЧНОСТИ ЛОГИЧЕСКИХ ВЫРАЖЕНИЙ Чтобы понять суть дела, желательно иметь под рукой какой-нибудь пример, на котором мы будем «проигрывать» различные методы улучшения эргономичности. Предположим, нужно создать алгоритм, управляющий автомобилем- роботом, проезжающим через перекресток со светофором в условиях реального дорожного движения. Примем соглашение, что робот движется только по прямой, и выберем самый простой алгоритм управления (рис. 110).
Глава 8. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 179 /движение.робота.на.перекрестке} Зеленый.сигнал.светофора нет Помехи.для.движения .да нет нет ^ *\ Желтый.сигнал.светофора Робот.выехал.на.перекресток Помехи.для.движения „нет да нет чда Зеленый.сигнал.светофора >— I нет Желтый.сигнал.светофора I нет <_; VAa Красный.сигнал.светофора > нет Значит, светофор сломался Помехи.для.движения да j нет Ехать.вперед Конец Ji ; ч'' 'Л" - ' .'• * '' ¦ Рис. 110. Алгоритм «Движение робота на перекрестке»
180 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Логический признак, разрешающий (или запрещающий) роботу ехать вперед, имеет идентификатор «Можно.ехать.через.перекресток». Будем считать, что данный признак принимает значение «да» в трех случаях: • горит зеленый сигнал светофора (и нет помех для движения); • желтый сигнал загорелся, когда робот уже выехал на перекресток (и нет помех для движения); • светофор сломался — нет ни зеленого, ни желтого, ни красного сигнала (и нет помех для движения). В остальных случаях признак имеет значение «нет», которое запрещает роботу движение через перекресток. МОДЕЛЬ ДВИЖЕНИЯ РОБОТА Пусть Y= Можно.ехать.через.перекресток Выделим на рис. 110 фрагмент, который вычисляет логическую функцию F. То есть формирует признак «Можно.ехать.через.перекресток». Эта часть изображена в белом прямоугольнике на рис. 111. Можно доказать, что указанный фрагмент всегда можно заменить на одну икону «вопрос» согласно формуле на рис. 112. Эта формула позволяет преобразовать алгоритм на рис. 111 в алгоритм на рис. 113. Алгоритм на рис. 113 имеет две особенности: • он полностью соответствует алгоритму на рис. 110 и 111; • он представляет названный алгоритм в сжатой форме. Фактически рис. ИЗ — это наиболее простая модель движения робота. ОБОЗНАЧЕНИЯ ЛОГИЧЕСКИХ ПЕРЕМЕННЫХ Введем обозначения, показанные на рис. 114, которым соответствуют очевидные равенства: Y= Можно.ехать.через.перекресток A) Л в Зеленый.сигнал.светофора B) В = Желтый.сигнал.светофора C) С = Красный.сигнал.светофора D) D = Робот.выехал.на.перекресток E) Е = Помехи.для.движения F) Если принять указанные условия и обозначения, логическая функция Y задается формулой Y = (А & -Е) v (В & D & -?) v (-Л & -В & -С & -?) G) ПЛАН ИЗУЧЕНИЯ ПРОБЛЕМЫ Пример, представленный на рис. 110—114, позволяет приступить к изуче-
Глава 8. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 181 { Движение, робота, на. перекресткеЛ v З нет Зеленый.сигнал.светофора да П0мехи<для,движения нет В белом квадрате графически описана логическая функция Y, которая означает: «Можно екать через перекресток» Желтый .сигнал .светофора да нет .нет Робот.аыехал.на.перекресток ^ < Помехи.для.движения да нет / J Ч Да < ЗеленыЙ.сигнал.светофора У— нет / ' V Да С Жептый.сигкал.светофора ) нет ' ¦ \Да Красный.сигнал.светофора ) нет Значит, светофор сломался ™ ™,—, m ч да Помехи.дпя.движения )— I нет Y Ехать, вперед Конец Рис. 111. Выделена логическая функция Y «Можно ехать через перекресток»
182 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» ВИЗУАЛЬНАЯ ФОРМУЛА (пример) Можно.ехать.через.перекресток>-| f Рис. 112. Логическая функция Y = Можно.ехать.через.перекресток показана дважды: в развернутом и сжатом виде нию проблемы. Ниже мы рассмотрим несколько вариантов записи логических выражений и сравним их между собой с точки зрения эргономики. Будем считать, что движением робота управляет бортовой компьютер. Глазами робота являются пять датчиков, формирующих логические сигналы Л, В, С, D, Е. Эти сигналы сообщают компьютеру информацию, необходимую для управления движением робота через перекресток. ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ С АБСТРАКТНЫМИ ИДЕНТИФИКАТОРАМИ Произведем эквивалентное преобразование алгоритма на рис. 113. Учитывая A), заменим идентификатор «Можно.ехать.через.перекресток» буквой Y. Затем вместо Y подставим логическое выражение из формулы G). В итоге получим алгоритм на рис. 115. Некоторые математики, скорее всего, похвалят этот алгоритм. Они, возможно, скажут, что с математической точки зрения выражение в иконе «вопрос» является компактным, лаконичным, изящным и обозримым1. К сожалению, подобная позиция не учитывает эргономических соображений и является устаревшей. Сразу оговоримся: речь, разумеется, идет не о том, чтобы заменить математику эргономикой, а всего лишь о том, чтобы, сохраняя математическую строгость в неприкосновенности, 1 Указанное выражение можно еще больше упростить (вынести член -^Е за скобки и удалить член -*А & --Б), но для наших целей это несущественно.
Глава 8. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 183 $h ••• to л : . •< *\ 'C к •';: < Рис. 113. Движение.робота, на. перекрестке Можно.ехать.через.перекресток Да 'V : ' Ехать.вперед :->'ч-г ?х Конец ^) > / j i Y. Логическая функция Y «спрятана» в иконе вопрос \ ['i >, ЛОГИЧЕСКАЯ ФУНКЦИЯ Y ОПИСЫВАЕТСЯ ФОРМУЛОЙ Y = (А&--Е) V (B&DS-'E) V ("-A&-1B&--C&--E) W ' ' Y, А$; В, С, D, JE - Y - означает «Можно.ехать.череа.перекресток» А -означает «Зеленый.си гнал .светофора» В - o$H3wa&T чЖ#*т*й,бигнал.светофора» С - оанач^вт «Красный.сигнал.светофора» D - означает «Робот.выехал.на.перекресток» «И» ; г р V - логическая операция Рис. 114. Обозначения логических переменных 1?! ^^^т1^^ |й " ^ Движение.робота.на.перекрестке |У] <^ (А&-Е) V (B&D&^E) V (-A&-B&-4CS j: :, % J Ехать.вперед ,i . • f ; Q Конец ^ ч НЕПРАВИЛЬНО t-,E) ^ > У Рис. 115. Эргономически неудачная схема с абстрактными идентификаторами \
184 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» решительно отказаться от эргономической беспечности традиционных математических построений. Это означает, что однобокий математический подход должен уступить место системному подходу, в котором органически сочетаются математические и эргономические методы. Для обозначения нового подхода можно предложить термин «когнитивная формализация знаний». Сделаем еще одну оговорку. Формула G) была бы вполне приемлемой, если бы речь шла об абстрактной задаче, цель которой — выявить математическую сущность проблемы. Однако в данном случае речь идет о прикладной задаче — создании алгоритма управления автомобилем-роботом. Недостаток формулы G) и алгоритма на рис. 115 состоит в том, что идентификаторы Л, В, С, D, Е не смысловые, а абстрактные. Они оставляют наши знания о предметной области за пределами программного текста. Чем это плохо? Вспомним, что сегодня критической проблемой являются не машинные, а человеческие ресурсы. Причем экономия последних теснейшим образом связана с проблемой понимания, которая превращается в центральную проблему информатики. Производительность труда при создании информационных систем и систем управления напрямую зависит от успешного решения проблемы понимания, обеспечивающего быструю и безошибочную разработку алгоритмов. Это общее положение тесно связано с обсуждаемым вопросом. В самом деле, люди, которые прекрасно знают прикладную задачу и предметную область, но не знают или забыли обозначения A) —F), например заказчики, постановщики задач, комплексники, воспринимают идентификаторы А, В, С, D, Е и составленные из них формулы как бессмысленный набор символов. Следовательно, эти люди лишаются возможности принять участие в проверке правильности алгоритмов и программ. И внести свой вклад в устранение ошибок. Чтобы обнаружить ошибку в логическом выражении, необходимо хорошо понимать его смысл. Чтобы уяснить суть логического выражения на рис. 115, человек вынужден помнить не только смысловые понятия, но и абстрактные идентификаторы. Он должен твердо знать соответствие между ними. Это создает двойную нагрузку на память человека (алгорит- миста, программиста, аналитика). Из-за этого возникают дополнительные и ничем не оправданные трудности при поиске и выявлении ошибок. Для большинства специалистов, знающих прикладную задачу, логическое выражение на рис. 116 не дает никакой подсказки о семантике логических переменных и фактически представляет собой загадочный ребус. Оно служит типичным примером эргономической неряшливости традиционных методов математического описания прикладных задач.
Глава 8. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 185 Отсюда проистекает Вывод. В прикладных задачах использование абстрактных идентификаторов в логических выражениях эргономически недопустимо. ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ С КОРОТКИМИ СМЫСЛОВЫМИ ИДЕНТИФИКАТОРАМИ Абстрактные идентификаторы использовались на первом этапе развития программирования. Сегодня в прикладных программах они встречаются гораздо реже, уступив место так называемым мнемоническим именам. Мнемоническое имя — это короткий смысловой идентификатор, который в большинстве случаев имеет длину не более 8 символов. Преобладание 8-символьных идентификаторов характерно для второго этапа развития языков программирования. Вот типичная рекомендация того периода: «Не оправдано применение имен, подобных X или /, тогда как имена МАХ или NEXT передают смысл гораздо точнее» [1]. Сходную мысль высказывает Дени Ван Тассел: «Имена переменных должны быть выбраны так, чтобы наилучшим образом определять те величины, которые они представляют... Например, в операторе X = F+ Z имена переменных выбраны неудачно, поскольку совсем не использована мнемоника. Такая запись оператора: PRICE = COST + PROFIT намного лучше» [2]. Последуем совету. Продолжая наш пример с автомобилем-роботом, заменим абстрактные идентификаторы на мнемонические имена согласно таблице 1. Таблица 1 Абстрактный идентификатор У А В С D Е Мнемоническое имя Можнех Зелсиг Желсиг Красиг Робнапер Помдвиж /
186 Часть п- ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» На рис. 116 показан алгоритм, полученный в результате такой замены. Можно ли назвать логическое выражение на рис. 116 эргономичным? Очевидно, что мнемонические имена лучше абстрактных. Они были придуманы с благородной целью — облегчить запоминание понятий, чтобы формальное имя создавало намек на содержательную сторону дела. Увы! Говорить намеками — вовсе не значит говорить понятно. Причина неудачи в том, что длина идентификатора 8 символов слишком мала. Она явно недостаточна для хорошего, ясного и доходчивого описания сложных понятий. Поэтому при создании 8-символьных идентификаторов приходится экономить каждый символ и часто использовать невразумительные слова-обрубки, такие, как Зелсиг (зеленый сигнал светофора), Красиг, Желсиг и т. д. В самом деле, глядя на идентификатор «Робнапер» (рис. 116) мало кто догадается, что речь идет о признаке «Робот.выехал.на.перекресток». Сравнивая логические выражения на рис. 115 и 116, можно сказать, что в последнем случае понимаемость алгоритма, если и увеличилась, то ненамного. Таким образом, 8-символьные смысловые идентификаторы не могут обеспечить требуемое улучшение эргономических характеристик логических выражений. ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ С ДЛИННЫМИ СМЫСЛОВЫМИ ИДЕНТИФИКАТОРАМИ Для третьего этапа развития языков программирования характерен переход к длинным смысловым идентификаторам, содержащим до 32 символов. Увеличение длины идентификатора до 32 символов позволяет получить два важных эргономических преимущества: • Во многих (хотя и не во всех) случаях появляется возможность отказаться от сокращений и использовать полные слова; • Для разграничения слов, входящих в состав идентификатора, можно ввести эргономичные разделители, например точку или нижнюю черту. Пример логического выражения, в котором используются идентификаторы с точками-разделителями и полными (несокращенными) словами, представлен на рис. 117. Легко видеть, что оно обладает более высокой понимаемостью, чем предыдущие примеры. Тем не менее, здесь есть одно «но». ГЛАВНЫЙ ВОПРОС УСЛОВНОГО ОПЕРАТОРА На рис. 113 задан вопрос «Можно.ехать.через.перекресток?», который объясняет принцип разветвления алгоритма. При ответе «да» выполняется команда «Ехать.вперед». При ответе «нет» действия отсутствуют.
Глава 8. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 187 НЕПРАВИЛЬНО Движение.робота.на.перекрестке J / (Зелсиг & -«Помдвиж) V С (Желсиг & Робнапер & ^Помдвиж) \ (-"Зелсиг & ->Желсиг & -^Красит & да Ехать.вперед V ^Помдвиж) i нет w s Конец Рис. 116. Эргономически неудачная схема. Несмотря на замену абстрактных идентифи- Щ каторов на смысловые, текст в иконе «вопрос» по-прежнему очень труден для понимания || is НЕПРАВИЛЬНО ( Движение.робота.на.перекрестке ) I (Зеленый.сигнал.светофора & --Помехи.для.движения) V (Желтый.сигнал.светофора & Робот.выехал.на.перекресток & -•Помехи.для.движения) V (-"Зеленый.сигнал.светофора & -«Желтый.сигнал.светофора & -"Красный.сигнал.светофора & -'Помехи.для.движения) да Ехать.вперед v Y Конец Рис. 117. Эргономически неудачная схема. Несмотря на замену коротких смысловых идентификаторов на длинные и понятные, текст в иконе «вопрос» все еще очень труден. Причина в том, что логические знаки & (и), V (или), -> (не) делают логическое выражение непригодным для быстрого понимания. Читая логический текст в иконе вопрос, практически невозможно догадаться, что смысл этого текста выражается словами «Можно.ехать.через.перекресток»/
188 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Данный вопрос играет ключевую роль. Если его удалить, алгоритм становится непонятным. В связи с этим целесообразно ввести новое понятие, выявляющее суть описанной проблемы. Главный вопрос условного оператора — это ясный и понятный текст, записанный в иконе «вопрос» с помощью одного идентификатора. А теперь взглянем на рис. 115—117. Нетрудно заметить, что в иконе «вопрос» записана масса любопытных подробностей, однако интересующий нас вопрос отсутствует. Он бесследно исчез. Таким образом, логические выражения на рис. 115—117 имеют общий недостаток, причем весьма существенный. В них нет главного вопроса! Нет ключа, объясняющего сущность алгоритма! Налицо парадокс: логические выражения не дают явной информации о том, на какой именно вопрос мы отвечаем «да» или «нет». Более того, они не позволяют читателю легко и быстро восстановить формулировку главного вопроса. И даже не стимулируют у него стремления к получению подобной информации. Не будет преувеличением сказать, что перечисленные логические выражения затуманивают суть дела. Потому что отсутствие главного вопроса ничем нельзя компенсировать. В итоге алгоритмы на рис. 115—117 оказываются непонятными и эргономически неприемлемыми. Вывод 1. Использование эргономически правильных длинных смысловых идентификаторов является необходимым, но отнюдь не достаточным условием для построения эргономичного логического текста. Вывод 2. Вторым непременным условием для создания эргономичного логического текста является обязательное использование главного вопроса условного оператора. ВИЗУАЛЬНЫЕ ПОМЕХИ ЗАСОРЯЮТ ЗРИТЕЛЬНУЮ СЦЕНУ НЕНУЖНОЙ ИНФОРМАЦИЕЙ Уже говорилось, что в традиционных языках для значений логических переменных используют слова TRUE и FALSE, ИСТИНА и ЛОЖЬ, 1 и 0. Однако логико-эргономические исследования показывают, что указанные обозначения являются избыточными. Их можно безболезненно и с пользой для дела исключить из текста. Стремление «уничтожить» лишние обозначения объясняется эргономическими причинами. Известно, что все ненужные записи являются визуальными помехами, которые засоряют текст алгоритма и путают читателя.
Глава 8. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 189 Язык ДРАКОН позволяет решить задачу двумя способами: • с помощью рамочного логического выражения; • с помощью визуального логического выражения. УСТРАНЕНИЕ ВИЗУАЛЬНЫХ ПОМЕХ С ПОМОЩЬЮ РАМОЧНОГО ЛОГИЧЕСКОГО ВЫРАЖЕНИЯ В общем случае идентификатор главного вопроса может оказаться неопределенным. Чтобы устранить этот недочет, надо заранее присвоить ему нужное значение. Для этого можно использовать, например, процедуру под названием «Формирование.признака» (рис. 118). Рассмотрим случай, когда процедура строится с помощью рамочного логического выражения (рис. 119). В этом случае применяют икону «действие», внутри которой записывают оператор присваивания. Графический оператор на рис. 119 означает, что идентификатору «Можно.ехать.через.перекресток» присваивается некоторое значение. Какое именно? Ответ таков. Нужно вычислить рамочное логическое выражение, записанное в трех рамках, соединенных знаками ИЛИ. Результатом вычисления будет «1» или «О». Таким образом, цель достигнута, хотя обозначения «1» и «О» в тексте программы отсутствуют. ПРАВИЛА ЗАПИСИ РАМОЧНЫХ ЛОГИЧЕСКИХ ВЫРАЖЕНИЙ Увеличение длины идентификаторов приводит к тому, что традиционная горизонтальная запись логических выражений становится невозможной. В связи с этим применяется вертикальная запись, пример которой показан на рис. 119. Вертикальный логический текст на языке ДРАКОН пишут в соответствии со следующими правилами. • В иконе «действие» размещают один оператор присваивания. • В верхней строке пишут идентификатор логической переменной и знак присваивания. • Ниже пишут логическое выражение, причем каждая конъюнкция заключается в прямоугольную рамку. • Для операций И, ИЛИ, НЕ используют обозначения &, ИЛИ, -• соответственно. • Используют идентификаторы длиной до 32 символов. • Первые символы всех идентификаторов располагают на одной вертикали. • Знак логического отрицания -1 пишут слева от идентификатора внутри рамки.
190 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» • Все знаки отрицания (если они есть) помещают на одной вертикали. • Знаки конъюнкции & записывают справа от идентификатора внутри рамки. • Все знаки & пишут на одной вертикали. • Вертикальные линии рамок располагают на одной вертикали. • Знаки присваивания := и знаки ИЛИ помещают на одной вертикали. ЗРИТЕЛЬНАЯ СЦЕНА РАМОЧНОГО ЛОГИЧЕСКОГО ВЫРАЖЕНИЯ Взглянем на икону «действие» как на зрительную сцену (рис. 119). В ней можно увидеть четыре столбца, разделенные воображаемыми вертикальными линиями. Назовем эти воображаемые столбцы зрительными зонами. Каждая зона имеет строго определенное назначение. В 1-й зоне пишут знаки логического отрицания -• (если они есть). Во 2-й зоне пишут идентификаторы. В 3-й зоне пишут знаки конъюнкции &. В 4-й зоне пишут знак присваивания := и знаки ИЛИ. В итоге зрительная сцена приобретает четкую регулярную структуру. Она разделена на 4 зоны, в каждой из которых должна находиться заранее определенная информация. Благодаря горизонтальным рамкам и вертикальным зрительным зонам зрительная сцена становится не хаотичной, а предсказуемой, упорядоченной и удобной для чтения. УСТРАНЕНИЕ ВИЗУАЛЬНЫХ ПОМЕХ С ПОМОЩЬЮ ВИЗУАЛЬНОГО ЛОГИЧЕСКОГО ВЫРАЖЕНИЯ Рассмотрим случай, когда процедура «Формирование.признака» строится с помощью визуального логического выражения (рис. 120). В этом случае применяют икону «полка» (рис. 1, икона И10). На верхнем этаже полки пишут зарезервированное предложение «Установить признак» или «Снять признак». На нижнем этаже указывают идентификатор признака «Можно.ехать.через.перекресток» (рис. 120). Рассмотрим еще два примера оператора «полка»: Установить признак Норма.насоса Снять признак Норма.насоса
Глава 8. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 191 ш Ш Движение.робота.на.перекрестке Формирование, признака Можно.ехать.через.перекресток Y<> да Ехать.вперед Рис. 118. Добавляем процедуру «Формирование.признака», которая создает признак «Можно.ехать.через.перекресток» С Формирование.признака Л \ Можно, ехать.через, перекресток Зеленый. сигная*саетофора & ^ Помехи .для. движения Желткй.сигнал «светофора & Робот.выехал. на, перекресток & "< Помеха»для,движения ^ Зеленый.сигнал.светофора & -> Желтый.сигнал.светофора & ^ Красный.сигнал.светофора &  Помехи.для .движения : = или или Рамочное логическое выражение Конец Термин «рамочное логическое выражение» объясняется так. Логическое выражение представляет собой эргономичную зрительную сцену, важным элементом которой являются РАМКИ. Внутри рамок записываются конъюнкции (знак &). Рамки связаны между собой знаком дизъюнкции (знак «или») Рис. 119. Логический признак «Можно.ехать.через.перекресток» вычисляется с помощью рамочного логического выражения
192 Часть И. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» ( Формирование.признака ) нет Зеленый.сигнал.светофора Помехи.для.движения нет Визуальное логическое выражение — это логическое выражение, построенное с помощью икон «вопрос» / Желтый.сигнал.светофора Робот, выехал, на. перекресток нет .нет Помехи.для.движения да нет Зеленый.сигнал .светофора Желтый.сигнал.светофора Красный.сигнал.светофора Значит, светофор сломался Помехи.для.движения да J нвт Установить признак Можно.ехать.через.перекресток Снять признак Можно.ехать.через, перекресток I Конец Рис. 120. Логический признак Y = Можно.ехать.через.перекресток вычисляется с помощью визуального логического выражения
Глава 8. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 193 Левый оператор говорит, что логической переменной «Норма.насоса» присваивается значение «1». Правый оператор означает, что переменной «Норма.насоса» присваивается значение «О». Легко видеть, что в этих операторах (как и в операторах на рис. 120) используется та же хитрость, что и на рис. 119. В самом деле, логической переменной присваивается значение «1» или «0», хотя обозначения «1» и «0» в тексте программы нигде не встречаются! ОБСУЖДЕНИЕ Ранее мы пришли к выводу, что алгоритм на рис. 117 является эргономически неудачным. Каким образом можно его исправить? Вопрос отнюдь не прост. По-видимому, в разных ситуациях он может приводить к разным ответам. В связи с этим изложенные ниже соображения и советы имеют не обязательный, а всего лишь рекомендательный характер. Их нужно рассматривать как один из возможных способов решения проблемы. • В иконе «вопрос» не следует записывать логическое выражение, в особенности сложное. Вместо него рекомендуется поместить один- единственный идентификатор, содержащий ясную и четкую словесную формулировку главного вопроса. • В общем случае указанный идентификатор может оказаться неопределенным. Чтобы исключить эту неприятность, необходимо заблаговременно присвоить ему нужное значение. Для этого существуют два метода: рамочный и визуальный. • В рамочном методе используется рамочное логическое выражение, записанное в иконе «действие». Производится вычисление рамочного выражения. Результат присваивается идентификатору главного вопроса (рис.119). • В визуальном методе применяется визуальное логическое выражение и два оператора «Установить признак» и «Снять признак», записанные в иконах «полка» (рис. 120). В отличие от рамочного при визуальном методе вычисление логического выражения как таковое отсутствует. Визуальное выражение разветвляет процесс и приводит его в одну из двух точек (У или Y на рис. 120). В первой точке выполняется оператор «Установить признак», во второй - «Снять признак». Алгоритмы на рис. 119 и 120 эквивалентны. Инструментальные программы языка ДРАКОН должны обеспечить автоматический перевод рамочного алгоритма (рис. 119) в визуальный (рис. 120) и наоборот. Предоставление такой услуги пользователю создает для него дополнительный интеллектуально-эргономический комфорт. Пользователь получает возможность сравнить две формы представления логических знаний и выбрать ту, которая ему больше по душе. Поскольку вкусы автора алгоритма и его читателей могут отличаться, каждый из них может получить листинг (чертеж) программы в том виде, который лично ему больше нравится. В итоге каждый реализует свое пра-
194 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» во на индивидуальное предпочтение той или иной формы представления знаний. ЕЩЕ РАЗ О ВИЗУАЛЬНЫХ ПОМЕХАХ Специальные обозначения для значений логических переменных как принадлежность алгоритмического языка — это анахронизм, который следует исключить из всех языков как совершенно не нужное и даже вредное «архитектурное излишество». Чтобы оправдать этот вывод, сравним два выражения в условном операторе: Если (Норма 1 = 1) & (Норма 2 - 1) & (Авария - 0), то... A0) Если Норма 1 & Норма 2 & -1 Авария, то.... A1) Формула A0) читается так: Если признак «Норма 1» равен единице и признак «Норма 2» равен единице и признак «Авария» равен нулю, то... Формула A1) читается так: Если есть признак «Норма 1» и есть признак «Норма 2» и нет признака «Авария», то... A0а) (Па) Фраза (На) намного понятнее. По своему лексическому строю эта фраза соответствует обычным речевым оборотам, которыми пользуются специалисты предметной области, не являющиеся программистами. Она точно отражает суть дела и доступна всем работникам. В отличие от нее фраза A0а) содержит искусственные и нарочитые вкрапления «равен единице» и «равен нулю», появление которых неоправданно удлиняет текст и разрушительно действует на процесс восприятия. В итоге предложение становится непонятным для всех, кроме программистов. ОСОБЕННОСТИ РАБОТЫ С ДЛИННЫМИ (ЭРГОНОМИЧНЫМИ) ИДЕНТИФИКАТОРАМИ Оптимальная длина формального смыслового идентификатора составляет примерно 32 символа. Имеется в виду, что инструментальные программы осуществляют обработку 32-байтового поля идентификатора. Желательно, чтобы конкретные идентификаторы в зависимости от сложности понятия имели длину не менее 25 и не более 32 символов. Чтобы исключить ошибки при ручном вводе столь длинных идентификаторов в компьютер, целесообразно ввести запрет повторного ввода. Это значит, что идентификатор вводится в систему только один раз и запо-
Глава 8. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 195 минается в базе данных. При необходимости повторного ввода осуществляется копирование из базы данных. Такой способ требует наличия специальных инструментальных средств, но гарантирует идентичность всех копий одного и того же идентификатора. Вывод об оптимальности 32-символьных идентификаторов согласуется с анализом истории развития языков программирования, который обнаруживает отчетливую тенденцию: • переход от абстрактных кодов и имен к 8-символьным мнемоническим именам; • затем — переход к 32-символьным смысловым идентификаторам. Вместе с тем многие программисты, следуя устоявшимся привычкам, «застряли» на этапе 8-символьных имен. Суть в том, что опыт использования новых возможностей, связанных с появлением 32-символьных имен пока еще относительно невелик. Между тем, эргономические перспективы, открывающиеся с увеличением длины имен до 32 символов, обещают существенно изменить наши прежние представления и привычки. Благодаря этому замечательному нововведению язык формальных идентификаторов по своей доходчивости значительно приближается к естественному человеческому языку, что отчетливо видно на рис. 119 и 120. В самом деле, множество 32-символьных идентификаторов образует весьма выразительный, хотя и своеобразный язык, законы и правила оптимизации которого еще предстоит открыть, обсудить и подвергнуть экспериментальной проверке. НЕМНОЖКО ТЕОРИИ Материалы этой главы показывают, что справедлива Теорема. Если некоторый фрагмент дракон-схемы имеет один вход, два выхода и содержит только иконы «вопрос» (две и более), причем внутри каждой иконы записан один идентификатор, этот фрагмент всегда можно заменить на одну икону вопрос, внутри которой записан один идентификатор. Иллюстрацией являются рис. 111—113. выводы 1. Точкой роста современной науки являются междисциплинарные исследования, в частности на стыке логики и эргономики. 2. Сегодня, когда критической проблемой являются не машинные, а человеческие ресурсы, традиционные методы записи логических выражений следует признать во многом устаревшими, ибо они не учитывают эргономических соображений.
196 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» 3. Предложен двухэтапный метод эргономизации логических выражений. На первом этапе производится разделение логических записей на две части, из которых одна подлежит визуализации, а другая сохраняется в текстовом виде. Второй этап — эргономизация обеих частей: визуальной и текстовой. 4. Эргономизация текстовой части включает, в частности, следующие приемы: • оптимизацию длины и правил записи идентификаторов; • выбор альтернативы: логическое выражение или идентификатор главного вопроса; • исключение обозначений для значений логических переменных; • сравнительный анализ визуальной и рамочной форм записи и выбор одной из них.
Глава ВИЗУАЛЬНЫЕ ОПЕРАТОРЫ РЕАЛЬНОГО ВРЕМЕНИ Удачный рисунок иногда не только позволяет сделать наглядной и понятной суть сложного вопроса, но нередко способен подсказать принципиально новое соображение, идею, гипотезу, которые без такого рисунка просто, что называется, не приходят в голову. Александр Зенкин СПИСОК ОПЕРАТОРОВ РЕАЛЬНОГО ВРЕМЕНИ В языке ДРАКОН имеется пять икон реального времени (рис. 1, иконы И16 - И20): • пауза; • период; • пуск таймера; • синхронизатор (по таймеру); • параллельный процесс. Три из них (пауза, пуск таймера и параллельный процесс) — простые операторы. Две другие иконы (период и синхронизатор) служат «кирпичиками» для построения составных операторов и вне последних не используются. Икона «период» является принадлежностью цикла ЖДАТЬ (рис. 2, макроикона 7). Икона «синхронизатор» служит для образования тринадцати составных операторов (рис. 2, макроиконы 8 — 20). Назначение операторов поясним, как всегда, на примерах.
198 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» ОПЕРАТОРЫ ВВОДА-ВЫВОДА В языке ДРАКОН предусмотрены два визуальных оператора ввода-вывода: «вывод» (рис. 1, икона И14) и «ввод» (рис. 1, икона И15). Они не относятся к операторам реального времени и рассматриваются здесь только потому, что встречаются в ближайшем примере. Из рис. 1 видно, что иконы ввода-вывода имеют мнемоническую форму. Икона И14 содержит полую стрелку, направленную наружу, что символизирует «вывод», а икона И15 — стрелку, направленную внутрь (ввод). Оба оператора «двухэтажные». На верхнем этаже пишется ключевое слово или ключевая фраза. На нижнем (в прямоугольнике) — содержательная информация, подлежащая вводу и выводу (рис. 121, 122). ОПЕРАТОР «ПАУЗА» Предположим, управляющий компьютер должен выдать серию электрических команд, которые по линиям связи передаются в исполнительные органы и вызывают срабатывание электромеханических реле. В результате происходит открытие трубопровода, включение насоса и другие операции, | Выдать команду Открыть.трубопровод \ 2мин / 1 V | Выдать команду \ Включить.насос; Открыть.эаслонку \__45cJ 1 Выдать команду \ Подача.топлива \3мин/ | Выдать команду \ Пуск, агрегата j Рис. 121. Пример использования оператора «пауза» : \ А=2мин /г \ А = 2мин45с/- \ А = 5мин45с/- | Выдать команду Открыть.трубопровод L -' -- - • | Выдать команду \ Включить.насос; Открыть.эаслонку Выдать команду I 1 : Подача.топлива ' ' - -' | Выдать команду \ Пуск.агрегата ^ л, :; ; Рис. 122. Пример использования операторов «пуск таймера» и «синхронизатор»
Глава 9. ВИЗУАЛЬНЫЕ ОПЕРАТОРЫ РЕАЛЬНОГО ВРЕМЕНИ 199 необходимые для функционирования управляемого объекта. Такая ситуация может встретиться во многих системах управления реального времени. Например, при заправке топливом баллистических ракет, на атомных электростанциях, нефтеперерабатывающих заводах и т.д. Рассмотрим пример. Предположим, управляющий компьютер должен: выдать команду ОТКРЫТЬ.ТРУБОПРОВОД; подождать две минуты; выдать две команды: ВКЛЮЧИТЬ.НАСОС и ОТКРЫТЬ.ЗАСЛОНКУ; подождать 45 секунд; выдать команду ПОДАЧА.ТОПЛИВА; подождать три минуты; выдать команду ПУСК.АГРЕГАТА. Соответствующий алгоритм представлен на рис. 121. Задержка выдачи команд реализуется с помощью иконы «пауза». Внутри последней указывается время необходимой задержки. Например, 2 мин B минуты), 45 с D5 секунд) и т. д. Верхний оператор «пауза» на рис. 121 работает так. После выдачи команды ОТКРЫТЬ.ТРУБОПРОВОД в управляющем компьютере запускается программный счетчик времени на 2 минуты. По истечении этого времени компьютер выдает в линию связи команды ВКЛЮЧИТЬ. НАСОС и ОТКРЫТЬ.ЗАСЛОНКУ. ОПЕРАТОРЫ «ПУСК ТАЙМЕРА» И «СИНХРОНИЗАТОР» Вернемся еще раз к задаче, описанной в предыдущем параграфе, и слегка изменим ее. Будем считать, что разработчик управляемого объекта хочет указать время выдачи команд не по принципу «задержка после предыдущей команды», а по принципу секундомера. Это значит, что все времена отсчитываются от единого начального момента (совпадающего с пуском секундомера). Исходя из этого, сформулируем задачу управляющего компьютера. Он должен: • включить «секундомер», то есть обнулить и запустить таймер; • выдать команду ОТКРЫТЬ.ТРУБОПРОВОД; • когда таймер отсчитает две минуты, выдать пару команд ВКЛЮЧИТЬ.НАСОС и ОТКРЫТЬ.ЗАСЛОНКУ; • когда таймер отсчитает 2 минуты 45 секунд, выдать команду ПОДАЧА/ТОПЛИВА; • когда таймер отсчитает 5 минут 45 секунд, выдать команду ПУСК. АГРЕГАТА.
200 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Описанный алгоритм изображен на рис. 122. В нем используются операторы «пуск таймера» и «синхронизатор», совместная работа которых обеспечивает нужный эффект. Оператор «пуск таймера» порождает, обнуляет и запускает программный таймер и присваивает ему имя А. Оператор «синхронизатор» задерживает выполнение размещенного справа от него визуального оператора до наступления момента, указанного в иконе «синхронизатор». Например, синхронизатор А = 2мин 45с на рис. 122 задерживает выдачу команды ПОДАЧА.ТОПЛИВА до момента, когда таймер А отсчитает 2 минуты 45 секунд. Сравнивая алгоритмы на рис. 121 и 122, можно заметить, что они почти эквивалентны. Почему почти? Чтобы разобраться, рассмотрим идеальный случай. Представим, что время, необходимое для выдачи одной команды равно нулю. В этом случае оба алгоритма будут выдавать команды синхронно. Однако в действительности идеальные случаи встречаются далеко не всегда. Иногда бывает, что время выдачи одной команды больше нуля. В таком случае алгоритмы работают по-разному. Практика разработки систем управления показывает, что в некоторых ситуациях предпочтительным является принцип паузы, а в других — при- нцип таймера. Поэтому оба инструмента оказываются в равной степени необходимыми и полезными. АЛГОРИТМ РЕАЛЬНОГО ВРЕМЕНИ На рис. 123 представлен более сложный алгоритм, в котором используются операторы «пауза», «пуск таймера» и «синхронизатор». В средней ветке изображена икона «пауза» с записью 2мин48с. Это означает, что после завершения процедуры ВОЛШЕБНЫЙ РЕМОНТ ТАРЕЛКИ отсчитывается пауза длительностью 2 минуты 48 секунд. И только после этого производится снятие признака АВАРИЯ ТАРЕЛКИ. Еще одна 4-секундная пауза предусмотрена в левой ветке. В правой ветке есть икона «пуск таймера» с записью А = 0. Данный оператор порождает, обнуляет и запускает программный таймер А. В той же ветке установлены три иконы «синхронизатор по таймеру» с записями А = Змин, А = 5мин и А = 8мин. При этом вызов процедуры ВКЛЮЧИТЬ ТЕЛЕПОРТАЦИЮ произойдет не сразу, а только после того, как таймер А отсчитает 3 минуты. Соответственно включение в работу процедур ОТКЛЮЧИТЬ ГРАВИТАЦИЮ и ВЫХОД ИЗ АСТРАЛЬНОГО ТЕЛА будет задержано до тех пор, пока таймер А примет значения 5 и 8 минут соответственно. Из рис. 123 видно, что оператор «пуск таймера» можно применять двумя способами: • во-первых, совместно с иконой «синхронизатор» (этот случай мы обсудили);
Проверка \» летающей тарелки / ill ** s '-* Испытания тарелки в полете Проверка двигателей летающей тарелки Ремонт летающей тарелки Пробный полет летающей тарелки Проверка двигателей к Левый двигатель в норме? да \ нет (Правый двигатель\"вт в норме? J^aT П нет Включить плазменный реактор Т> Змин^—I Щ2Е_ Включить фотонный двигатель \у7 Тарелка взорвалась?\ да нет Пробный полет летающей тарелки Ремонт летающей тарелки Установить признак Авария тарелки Вызов главного демона Волшебный ремонт тарелки 2му\\\4Ъс / Снять признак Авария тарелки Пробный полет летающей тарелки \а- \а= \а= Змин/? , -^\. 5минуА? вмин/. Включить телепортацию * • -;/ 'р * > Отключить гравитацию ¦, \'^~ \ "¦'*&¦*" Выход из астрального тела Пуск Шабаш добрых духов Пробный полет тарелки Анализ полета С Конец ) •1 Останов Шабаш злых духов 1 Рис. 123. Алгоритм реального времени «Проверка летающей тарелки»
202 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» • во-вторых, совместно с иконой «вопрос». Последний случай рассмотрен в следующем параграфе. цикл ждать Предположим, нужно в течение 3-х минут ждать появления хотя бы одного из двух признаков ЛЕВЫЙ ДВИГАТЕЛЬ В НОРМЕ и ПРАВЫЙ ДВИГАТЕЛЬ В НОРМЕ. При наступлении этого события (появлении одного из признаков) необходимо включить плазменный реактор. Если же названные признаки отсутствуют, по истечении трех минут следует включить фотонный двигатель. Для решения задачи на рис. 123 используются два оператора: • пуск таймера Г, отсчитывающего три минуты; • цикл ЖДАТЬ. В состав последнего входит икона «период» и три иконы «вопрос». В последних размещены надписи: • ЛЕВЫЙ ДВИГАТЕЛЬ В НОРМЕ? • ПРАВЫЙ ДВИГАТЕЛЬ В НОРМЕ? • Г>3мин. Последний оператор проверяет: значение таймера Т больше трех минут? Если оба признака отсутствуют, а значение таймера не превышает 3-х минут, опрос условий периодически повторяется. При этом период опроса указывается в иконе «период». В данном примере он равен 4 секундам. Как явствует из рисунка, работа цикла ЖДАТЬ закончится в момент Рис. 124. Цикл ЖДАТЬ в общем виде
Глава 9. ВИЗУАЛЬНЫЕ ОПЕРАТОРЫ РЕАЛЬНОГО ВРЕМЕНИ 203 обнаружения одного из ожидаемых признаков. А если они так и не появятся, — через 3 минуты. ЦИКЛ «ЖДАТЬ» В ОБЩЕМ ВИДЕ В общем виде цикл ЖДАТЬ показан на рис. 124. Он позволяет организовать режим ожидания признаков 5, С, Д ..., Е. Если первым появится признак В, выполняется действие F. Если В отсутствует и первым придет признак Су реализуется действие G. И так далее. Операторы AylL обычно не используются. Задача ожидания нескольких признаков (когда система должна по- разному реагировать на каждый признак) является одной из наиболее типичных при разработке систем управления реального времени. Цикл ЖДАТЬ предлагает чрезвычайно простое, удобное, наглядное и эффективное средство для ее решения, удовлетворяя тем самым важную потребность практики. ОПЕРАТОР «ПЕРИОД» Сравнивая макроиконы 4 и 7 на рис. 2 (обычный цикл и цикл ЖДАТЬ), мы видим, что они очень похожи. Поэтому во избежание путаницы нужно иметь какой-то различительный признак. Эту функцию выполняет икона «период». Если она есть в петле цикла — перед нами цикл ЖДАТЬ. Если нет — обычный цикл. Человек, который стоит на остановке и ждет появления трамвая, воспринимает ожидание как нечто непрерывное. Однако программа реального времени организует ожидание как дискретный процесс и запускает цикл ЖДАТЬ периодически. Отсюда вытекает, что период — важная характеристика цикла ЖДАТЬ. А теперь зададим самый интересный вопрос: как работает оператор «период»? Фокус в том, что на этот вопрос придется дать два совсем разных ответа. С точки зрения человека, читающего алгоритм на рис. 123, все обстоит очень просто. Цикл ЖДАТЬ «крутится» по своей петле с периодичностью 4 секунды, пока не выполнится одно из трех условий, после чего произойдет выход из цикла. Таким образом, оператор «период» задает период повторения цикла ЖДАТЬ. С точки зрения функционирования программы реального времени, дело обстоит иначе. Суть в том, что длительность периода отсчитывает не прикладная программа на рис. 123, а дракон-диспетчер, входящий в состав операционной системы реального времени. Оператор «период» означает выход из прикладной программы. Управление переходит к дракон-диспетчеру (с одновременной передачей параметра 4с). Через каждые 4 секунды дракон-диспетчер передает управление в начало цикла ЖДАТЬ (точка Z на рис. 123). Если все три условия дают ответ «нет», оператор «период» всякий раз возвращает управление
204 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» в дракон-диспетчер. Таким образом, функционирование цикла ЖДАТЬ обеспечивается совместными усилиями прикладной программы и дракон- диспетчера. Нередко имеет место ситуация, когда разработчик программы реального времени использует цикл ЖДАТЬ, но считает, что для его программы конкретное значение периода не играет роли. В этом случае икону «период» следует оставить пустой; система по умолчанию присвоит периоду максимальное значение из того ассортимента, которым располагает дракон-диспетчер. ОПЕРАТОР «ПАРАЛЛЕЛЬНЫЙ ПРОЦЕСС» Пусть заданы два алгоритма А и 5, причем А — основной алгоритм, а В — вспомогательный. Алгоритмы А и В могут работать последовательно (рис. 125) или параллельно (рис. 126). Чтобы организовать последовательную работу, необходимо в дракон- схеме основного алгоритма А нарисовать икону-вставку с надписью В. В этом случае алгоритм В называется процедурой. Например, на рис. 123 в основном алгоритме ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ имеется процедура ПРОВЕРКА ДВИГАТЕЛЕЙ. Эти алгоритмы действуют последовательно. Основной алгоритм передает управление процедуре ПРОВЕРКА ДВИГАТЕЛЕЙ и прекращает работу. Возобновление работы алгоритма ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ произойдет только тогда, когда процедура ПРОВЕРКА ДВИГАТЕЛЕЙ закончится. В общем виде ситуация показана на рис. 125. Отличие параллельного режима состоит в том, что после начала вспомогательного алгоритма В основной алгоритм А не прекращает работу и действует одновременно с алгоритмом В (рис. 126). Чтобы организовать параллельную работу, нужно в дракон-схеме основного алгоритма А нарисовать икону «параллельный процесс» (рис. 1, икона И20). Икона «параллельный процесс» двухэтажная. На верхнем этаже пишут ключевое слово, обозначающее команду, изменяющую состояние параллельного процесса, например, «Пуск», «Останов» и т. д. На нижнем этаже помещают идентификатор (название) параллельного процесса. Обратимся к примеру на рис. 123. В правой ветке находятся два оператора управления параллельными процессами. После окончания процедуры ВЫХОД ИЗ АСТРАЛЬНОГО ТЕЛА производится останов параллельного процесса ШАБАШ ЗЛЫХ ДУХОВ и пуск процесса ШАБАШ ДОБРЫХ ДУХОВ. При этом предполагается, что до начала алгоритма ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ некий третий алгоритм выдал команду «Пуск» и запустил параллельный процесс ШАБАШ ЗЛЫХ ДУХОВ. Последний работает одновременно с алгоритмом ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ вплоть до момента выдачи команды «Останов» (см. последнюю ветку на рис. 123).
Глава 9. ВИЗУАЛЬНЫЕ ОПЕРАТОРЫ РЕАЛЬНОГО ВРЕМЕНИ 205 У ^^уf Если в основном \ алгоритме А ПвГП имеется икона LLpLI Jg) значит, выполняется последовательная работа алгоритмов А и В Алгоритмы А и В работают строго последовательно(поочередно). Они никогда не работают одновременно (параллельно). Основной алгоритм А [ работает А Процедура В Передача управления из алгоритма А в процедуру В (вызов процедуры) Работаете Работает А Возврат управления из процедуры В в основной алгоритм А Рис. 125. Последовательная работа алгоритмов Если в основном алгоритме А имеется икона I В значит, выполняется параллельная работа алгоритмов А и В Алгоритм В называется спараллельный процесс», потому что он работает параллельно (одновременно) с алгоритмом А Основной алгоритм А \ Работает А Алгоритм В (параллельный процесс) Работает В *g> -^ ; Икона, нарисованная в алгоритме А, - это оператор, который запускает (порождает) параллельный процесс В \\ Икона, нарисованная IОстанов! в алгоритме А, - это оператор, который останавливает(ликвидирует) V параллельный процесс В ) Рис. 126. Параллельная работа алгоритмов
206 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Указанная команда ликвидирует параллельный процесс ШАБАШ ЗЛЫХ ДУХОВ. В этот момент одновременная работа заканчивается. Однако следующая команда «Пуск» запускает другой параллельный процесс — ШАБАШ ДОБРЫХ ДУХОВ, который начинает работать одновременно с алгоритмом ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ. ОСОБЕННОСТИ ОПЕРАТОРОВ РЕАЛЬНОГО ВРЕМЕНИ Уже говорилось, что цикл ЖДАТЬ выполняется прикладной программой при участии дракон-диспетчера. Этот вывод относится ко всем операторам реального времени. Следует подчеркнуть, что данное утверждение относится не к языку, а к реализации системы и для разных реализаций может быть различным. Операторы реального времени — это формальные операторы языка визуального программирования ДРАКОН-2. Однако их можно использовать и в языке ДРАКОН-1 при неформальном изображении алгоритмов. Например, для построения наглядных «картинок», позволяющих легко объяснить ту или иную идею, относящуюся к системам реального времени. Примеры таких картинок представлены на рис. 127 и 128. При этом в цикле ЖДАТЬ икону «период» обычно опускают, чтобы не загромождать рисунок (см. последнюю ветку на рис. 127). Однако если длительность периода нужна для понимания, икону «период» можно сохранить (рис. 128). БЕСКОНЕЧНЫЕ АЛГОРИТМЫ В отличие от обычных вычислительных и информационных программ в программах реального времени икона «конец» может отсутствовать. Это имеет место, когда нужно организовать бесконечный цикл, который прекращается особой внешней причиной, например выключением питания системы (рис. 127,128). НЕСКОЛЬКО ВХОДОВ В ДРАКОН-ПРОГРАММУ Дракон-программа может иметь более одного входа. Чтобы организовать дополнительный вход, нужно поместить икону «заголовок» над иконой «имя ветки», как показано на рис. 123 справа. Таким образом, любая ветка может быть объявлена дополнительным входом. Однако есть исключение: если несколько веток образуют веточный цикл, вход разрешается только в начало цикла. Остальные ветки конструкции «веточный цикл» не могут являться входами в программу. Разумеется, созданием нескольких входов в программу не следует злоупотреблять. Этот прием следует использовать лишь в особых случаях.
t ..>v.-... >¦"..*> ...V^.yA.... > Управление светофором Управление зеленым светом Включить зеленый 1 1 X Прошли 2 минуты ¦ Л -^ Л Выключить зеленый . 1.. .:. Включить желтый Л Прошли 10 секунд 7 Выключить желтый Управление красным светом Управление красным светом \ Прошли / , - 2 минуты / : Выключить красный Включить желтый \ Прошли / 10 секунд/ фишла команда Ночной режим»? Управление зеленым светом Ночной режим Ночной режим Включить желтый мигающий Пришла команда «Дневной режим»? Vгнет; Выключить желтый мигающий Управление зеленым светом Рис. 127. Алгоритм «Управление светофором»
с Часы IУстановка | [начального значения]. Ячейка «секунды» представляет собой программно-доступный аппаратный счетчик. На вход счетчика каждую секунду поступает импульс Записать в часы текущее время Опрос счетчика секунд Рис. 128. Алгоритм «Часы» о 00 о > О 1=2 Э6 5 ел IE > о со 3=з > О
Глава 9. ВИЗУАЛЬНЫЕ ОПЕРАТОРЫ РЕАЛЬНОГО ВРЕМЕНИ 209 ВЫВОДЫ 1. Наличие операторов реального времени резко расширяет изобразительные возможности языка ДРАКОН и позволяет использовать его при проектировании и разработке не только информационных, но и управляющих систем. Это обстоятельство существенно увеличивает область применения языка. 2. Дополнительным преимуществом является лаконичность выразительных средств, их универсальность. В языке всего пять икон реального времени, однако их алгоритмическая мощь — в сочетании с другими возможностями языка — позволяет охватить обширный спектр задач, связанных с созданием программного обеспечения для управляющих систем. 3. Важную роль играет эргономичность операторов реального времени. Как и другие операторы языка ДРАКОН, они имеют визуальный характер, что позволяет сделать операции реального времени более наглядными и легкими для понимания по сравнению с традиционной текстовой записью. 4. Четыре иконы (пауза, период, пуск таймера и синхронизатор) — «близкие родственники» в том смысле, что внутри каждой из них указывается значение времени. Эта родственная связь находит свое эргономическое отражение в том, что перечисленные операторы имеют визуальное «фамильное сходство». Все они построены (с вариациями) на основе одной и той же геометрической фигуры — перевернутой равнобедренной трапеции. 5. Операторы реального времени порождают сложные действия компьютера, связанные с частыми передачами управления между прикладной программой и операционной системой (дракон-диспетчером). Эргономическая изюминка состоит в том, что эти передачи намеренно скрыты от читателя программы, чтобы не загромождать ее текст (чертеж) второстепенными подробностями. Благодаря этому внимание читателя не отвлекается на мелочи, и он имеет возможность сосредоточиться на главном, поскольку дракон-схема предоставляет ему ясную, четкую и целостную картину алгоритмического процесса, очищенную от «мелкого мусора».
Глава ДРУЖЕЛЮБНОЕ ПРОГРАММИРОВАНИЕ 10 Индустрии программирования необходимо чудо — чудо, которое воплотило бы в жизнь мечту о быстрой и легкой разработке программ. Том Мануэль ГИБРИДНЫЙ ЯЗЫК ДРАКОН-СИ Любой процедурный язык программирования X можно превратить в гибридный язык Дракон-Х Для примера превратим программы на языке Си в программы на языке Дракон-Си. Как это сделать? Ответ дан на рис. 129 и 130. В 1-м примере на рис. 129 рассмотрен оператор языка Си if-else. В средней графе показана программа на языке Си, в которой используется этот оператор. А правее изображена математически эквивалентная ей программа на языке Дракон-Си. Чем же отличаются программы? В си-программе мы видим два ключевых слова if else, четыре фигурные скобки и две круглые скобки. В дракон-программе они исчезают и превращаются в чертеж. Благодаря этому схема приобретает важное качество — наглядность. Во 2-м примере на рис. 129 рассмотрен оператор if-elseif-else. Рядом показаны математически эквивалентные программы на языках Си и Дракон-Си. В обеих программах применяется названный оператор — соответственно в текстовой и графической форме. В 3-м примере рассмотрены ключевые слова switch, case, break, default. В си-программе видим большое количество избыточных слов и текстовых символов.
Глава 10. ДРУЖЕЛЮБНОЕ ПРОГРАММИРОВАНИЕ 211 switch (два раза) case 1 case 2 break две фигурные скобки две круглых скобки две косые скобки три двоеточия пять точек с запятой две звездочки. Нужны ли все эти символы? Нет, не нужны! В дракон-программе эти значки устраняются, превращаясь в приятный для глаза графический образ, пригодный для быстрого симультанного восприятия. Обобщая материалы, представленные на рис. 129 и 130, можно сделать следующие выводы. Вывод 1. Показанные на рисунках фрагменты на языках Си и Дракон- Си математически эквивалентны. Вывод 2. Хотя, с точки зрения математики, программы эквивалентны, но с точки зрения эргономики, они существенно отличаются. Графический образ имеет значительные преимущества перед текстовым. Вывод 3. Программы на языке Си представляют собой эргономически неудачную попытку описать словами чертеж дракон-схемы. И наоборот, визуальный образ программы на языке Дракон-Си удовлетворяет критерию сверхвысокого понимания и повышает производительность труда. Вывод 4. Процедурный текст на любом языке программирования X всегда можно преобразовать в математически эквивалентный графический образ — дракон-программу на гибридном языке программирования Дракон-Х СИСТЕМА ПРОГРАММИРОВАНИЯ ДРАКОН-СИ Предположим, нужно построить систему визуального программирования на гибридном языке Дракон-Си. Задачу можно решить, например, с помощью трех программ: дракон-редактора, дракон-конвертора и компилятора языка Си. Пользователь с помощью дракон-редактора рисует на экране компьютера программу на языке Дракон-Си (рис. 129, 130, правая графа). Затем дракон-конвертор преобразует выходные коды редактора в исходный текст языка Си (рис. 129, 130, средняя графа). Затем стандартный компилятор Си превращает исходный текст в объектный код.
212 Часть П. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Операторы языка Си Программы на языке Си Программы на языке Дракон-Си © jf-else If ( а >= 0 ) { else{ х = r1; У = г2; \ а> х = У = = 0 \ Да„ : f2 нет У = М; г2 If- elseff- else if ( х < b ) x = b; elseif ( x < с ) x = с; else x = d; 3) switch, case,* default switch (n) { case 1: x = a; break; case 2: x= b; break; default: x - c; } /• switch •/ . % л I x a I \ x:b 11 © while while ( n++ < 50 ) { x = z + n; w = z - n; } /* while •/ z + n; z-n; -- - i >**| Рис. 129. Примеры программ на языке Си и эквивалентные им программы на языке Дракон-Си
Глава 10. ДРУЖЕЛЮБНОЕ ПРОГРАММИРОВАНИЕ 213 Операторы языка Си Программы на языке Си Программы на языке Дракон-Си do-while do{ у = р-а; z = р + а; } while ( а- - > b ); Г do while */ У = Р-а; z = р + а; 1 i 1 y >b ^" нет. r 1;n<20; n++ t = y + n 1 | ¦ ifor for(n»1; n<20; continue, while (n ++ < 50) { x = z + n; if (n + b < 20) continue; w = z- n; if (n + k > 70) go to ml; if (n + k > 80) return; } /* while V (пн<50 y? j I x=rn n + b < 20 нет ml: q-r; s=k+5 да } /* end •/ да Рис. 130. Примеры программ на языке СИ и эквивалентные им программы на языке Дракон-Си (продолжение)
214 Часть И. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Чтобы лучше уяснить преимущества языка Дракон-Си, произведем мысленно обратное преобразование. Как видно из рис. 129, 130, при преобразовании текстовой программы в визуальную исходный текст си-программы разбивается на две части. Операторы присваивания, условные выражения и декларативные описания почти без изменения переносятся в визуальную программу и размещаются внутри ее икон. Остальные текстоэлементы языка Си (которые можно назвать удаляемыми или «паразитными») становятся ненужными. Они превращаются в графические линии и ключевые слова «да» и «нет» (yes и по). Рисунки 129 и 130 показывают, что список паразитных (удаляемых) элементов языка Си оказывается внушительным. Он включает все ключевые слова в примерах 1—7, кроме default, все фигурные, круглые и косые скобки, двоеточия, метки, комментарии в примерах 3—5 и, кроме того, точки с запятой в примерах 2, 3, 7 и отчасти 6. Таким образом, чтобы построить язык Дракон-Си, надо по определенным правилам соединить визуальный синтаксис Дракона с текстовым синтаксиса языка Си. Из последнего следует удалить все элементы, функции которых реализуются визуальными операторами Дракона. Пара языков Си и Дракон-Си эквивалентна в том смысле, что может быть построен конвертор, выполняющий как прямое, так и обратное преобразование. Такой конвертор может превращать исходный текст программы на языке Дракон-Си в эквивалентную си-программу и наоборот. Создание любого гибридного языка (например, Дракон-Си) вряд ли стоит считать оригинальной разработкой, так как такой язык почти полностью сохраняет концепцию, структуру, типы данных и другие особенности исходного языка Си. Наверно, правильнее говорить о том, что построение гибридного языка (Дракон-Си) есть технический прием, при котором в строго определенном числе случаев текстовая нотация исходного языка заменяется на визуальную. Однако этот технический прием позволяет существенно улучшить эргономический облик исходного языка. (Для краткости проблема данных здесь не рассматривается). ГИБРИДНЫЙ ЯЗЫК ДРАКОН-ПАСКАЛЬ На рис. 131 (слева) приведены некоторые ключевые слова языка Паскаль: IF-THEN-ELSE, CASE-OF, OR, END, WRITELN. Рядом написана программа на паскале, в которой используются эти слова. Правее изображены две дракон-программы. Обе математически эквивалентны паскаль-программе, но эргономически отличаются между собой. В чем состоит различие? Программа 1 фотографически точно повторяет программу на Паскале. В ней имеется визуальный оператор «развилка». В иконе «вопрос» записано логическое выражение А —1 Wiv A — Z
Глава 10. ДРУЖЕЛЮБНОЕ ПРОГРАММИРОВАНИЕ 215 Операторы Паскаля Программа на Паскале Программы на Дракон-Паскале Программа 1. НЕПРАВИЛЬНО IF ( K=1 OR K=2 ) THEN CASE К OF 1: X:=SIN(X); 2: X := COS(X); END (* CASE •) ELSE WRITELN ("ОШИБКА"); \ 1 j I 2 j | Сообщение [^ОШИБКА " X=SIN(X) X=COS(X) i> Программа 2. ПРАВИЛЬНО /Г/ Ш | X=SlN(X) X=COS(X) Сообщение ошибка е \ ]-/ Рис. 131. Пример программы на языке Паскаль и две эквивалентные ей программы на языке Дракон-Паскаль Операторы Модулы-2 Программа на Модуле-2 Программа на Дракон-Модуле-2 END LOOP К := К + 2; N := N + 3; IF К > 10 THEN EXIT ELSEIF N>20 THEN EXIT ELSE X:=A+K + N; END END K = N = N + 3; ^ к > ^,f j, 10 "<¦ ^ нет N>20 - 1 да i S / X нет =A+K+N Рис. 132. Пример программы на языке Модула-2 и эквивалентная ей программа на языке Дракон-Модула-2
216 Часть И. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Нижний выход иконы «вопрос» помечен словом «да» и присоединен к переключателю с двумя иконами «вариант». Правый выход («нет») подключен к иконе «вывод». В последней сверху написано СОБЩЕНИЕ, снизу - ОШИБКА. В итоге получилась дракон-программа, которая, несомненно, является совершенно правильным решением поставленной задачи. Но является ли она эргономичной? Для сравнения рассмотрим Программу 2. Легко видеть, что она является эргономически оптимальной для русскоязычного читателя. Бросается в глаза структурное различие между программами. Паскаль-программа содержит две конструкции: if-then-else и case-of. Эргономическая оптимизация состоит в том, что в Программе 2 используется всего один визуальный оператор (переключатель с тремя вариантами). Тем не менее, этот переключатель «в одиночку» выполняет те же самые функции, что и два текстовых оператора языка Паскаль. В итоге логическое выражение 1С — 1 OR К = 2 и другие излишества Программы 1 устраняются. А дракон-схема заметно упрощается и становится лаконичной, прозрачной и элегантной. С эргономичной точки зрения, ключевые слова и многие символы, присутствующие в текстовых языках, есть не что иное, как визуальные помехи. Они притягивают к себе внимание читателя, отвлекая его от содержательной стороны дела. Мешая ему продуктивно мыслить. Эргономическое преимущество Дракона состоит в том, что вместо ключевых слов используется визуальный образ, который воспринимается читателем бессознательно, на интуитивном уровне. За счет этого канал сознательного внимания действует более продуктивно — для восприятия наиболее важных, содержательных аспектов задачи. ГИБРИДНЫЙ ЯЗЫК ДРАКОН-МОДУЛА На рис. 132 представлена программа на языке Модула и эквивалентная ей программа на языке Дракон-Модула. Слева приводится список ключевых слов, которые используются в модула-программе и являются «жизненно необходимыми» для языка Модула. Но которые совершенно не нужны в дракон-программе. Замечание. Использование текста для представления сложных управляющих конструкций и ключевых слов выглядит столь же нелепо, как попытка описать географическую карту словами. Тот факт, что текст все еще применяется для этой цели, можно объяснить только одним: программирование намного моложе географии.
Глава 10. ДРУЖЕЛЮБНОЕ ПРОГРАММИРОВАНИЕ 217 ПРОГРАММА ОБРАБОТКИ МАССИВОВ НА ЯЗЫКЕ ДРАКОН На рис. 133 и 134 даны примеры программ, в которых имеются операции с массивами. Для описания данных используется икона «полка». На верхнем этаже полки пишут ключевое слово «Данные». На нижнем — собственно данные. МАССИВ ВЕЩ Вес.кролика[100] Итак, задан одномерный массив с именем «Вес.кролика», содержащий 100 элементов, каждый из которых является вещественным числом. Основным элементом обеих программ служит цикл ДЛЯ. В иконе «начало цикла ДЛЯ» в верхней строке пишут слово «Цикл». И после пробела односимвольный алиас, обозначающий переменную цикла (буква к на рис. 133, 134). В нижней строке указывают диапазон ее изменения, например, к=\ до 100 В иконе «конец цикла ДЛЯ» пишут Конец цикла <переменная цикла> Смысл операторов, организующих обработку массивов, ясен из рис. 133 и 134. ПЕРЕМЕННАЯ ЦИКЛА В ДРАКОН-ПРОГРАММЕ Что означает переменная цикла к на рис. 133 и 134? Каков ее физический смысл? Многие программисты забывают (или не считают нужным) ответить на этот вопрос. В результате смысл буквы к остается неясным, а сама программа нередко превращается в ребус. Чтобы этого не случилось, можно применить эргономический прием. В иконе «начало цикла ДЛЯ» в средней строке следует написать формализованный комментарий, то есть комментарий, который пишется по правилам записи идентификаторов. Эргономический «навар» формализованного комментария включает два преимущества. • Во-первых, он позволяет устранить традиционную «забывчивость» программистов и доходчиво объяснить читателю смысл абстрактного идентификатора. Дескать, к — это номер кроличьей клетки. • Во-вторых, что немаловажно, объяснение размещается на поле чертежа именно там, где нужно (в иконе «начало цикла ДЛЯ»), по принципу «дорого яичко ко Христову дню». Это значит, что читатель
218 Часть II. ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» Г Общий.вес.всех.кроликов ) Максимальный.вес.кролика Дано В крольчатнике сто клеток. В одной клетке не более одного кролика. В памяти компьютера имеется таблица из ста ячеек, причем в k-ой ячейке, к=1,2,..., 100 записан вес кролика, сидящего в k-ой клетке. Надо Вычислить общий вес всех кроликов в крольчатнике $t' Данные МАССИВ ВЕЩ Вес.кролика [100] ВЕЩ Общий.вес.всех.кроликов ЦЕЛ к Общий.вес.всех.кроликов = 0 Цикл к к = Номер.кроличьей.клетки от к=1 до 100 Общий.вес.всех.кроликов = Общий.вес.всех.кроликов + Вес.кролика[к] Ч. Конец цикла к ) ( Конец ) Дано В крольчатнике сто клеток. В одной клетке не более одного кролика. В памяти компьютера имеется таблица из ста ячеек, причем в k-ой ячейке, к=1,2,..., 100 записан вес кролика, сидящего в k-ой клетке. Надо Узнать максимальный вес кролика в крольчатнике Данные МАССИВ ВЕЩ Вес.кролика [100] ВЕЩ Максимальный.вес.кролика ЦЕЛ к Максимальный.вес.кролика ; Вес.кролика[1] Цикл к к = Номер.кроличьей.клетки от к=1 до 100 Вес.кролика [к] > Максимальный.вес.кролика Максимальный.вес.кролика : Вес.кролика[к] « \ Л Конец цикла к Кон>|| Рис. 133. Программа, вычисляющая общий вес всех кроликов в крольчатнике Рис. 134. Программа, определяющая максимальный вес одного кролика в крольчатнике
Глава 10. ДРУЖЕЛЮБНОЕ ПРОГРАММИРОВАНИЕ 219 получает ответ моментально — в ту самую секунду, когда он впервые увидел алиас к ив его голове забрезжил вопрос, а что такое к? ЗАЧЕМ НУЖНЫ ДЛИННЫЕ ИДЕНТИФИКАТОРЫ? В дружелюбной программе все должно быть ясно и понятно. Можно ли этого добиться? Одним из источников трудностей являются идентификаторы, то есть имена понятий. Здесь есть противоречие. Некоторые понятия очень сложны. Чтобы доходчиво описать сложное понятие, нужно использовать длинный идентификатор. Однако слишком длинные идентификаторы не пригодны для математических формул. Как же быть? Можно ли найти выход из положения? Предположим, нужно создать идентификатор для следующего понятия. Радиус-вектор центра Земли в центре взлетно-посадочной полосы в посадочной системе координат Словесное описание понятия содержит 92 символа. Задача состоит в том, чтобы сократить 92-символьное описание до 32-символьного, сохранив по возможности ясный смысл понятия. Сокращение проведем по следующему плану: • «Радиус-вектор центра Земли» заменим на «Радиус.земли». • Вместо в «В центре взлетно-посадочной полосы» напишем «на.по- лосе» • «В посадочной системе координат» заменим на ПСК, поскольку такое сокращение является общеупотребительным в коллективе разработчиков данной системы. В итоге получим 26-символьный идентификатор. 1 Радиус.земли.на.полосе.ПСК 1 li___ 1 Этот идентификатор сохраняет почти все опорные слова исходного понятия и обеспечивает довольно высокую понимаемость. ПРАВИЛА ЗАПИСИ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ В ОПЕРАТОРАХ ПРИСВАИВАНИЯ Следует различать два случая. Если выражение простое, рекомендуется использовать 32-символьные идентификаторы и «вертикальную» запись математических формул, как показано на рис. 133 и 134. Но как быть, если выражение сложное? Если речь идет о громоздких математических вычислениях?
220 Часть IL ЗНАКОМЬТЕСЬ - ДРУЖЕЛЮБНЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК «ДРАКОН» В таком случае описанный способ не годится по двум причинам. Если писать сложную формулу «горизонтально», она окажется слишком длинной и нечитаемой. Если же использовать «вертикальную» запись (вроде той, что мы использовали для логических формул на рис. 119, 133, 134), то результат снова будет непригодным для чтения. Почему? Потому что «вертикальные формулы с 32-символьными идентификаторами не позволяют читателю увидеть математическую структуру вычислений, отвлекая его внимание на чтение длинных идентификаторов, которые парадоксальным образом превращаются из полезной подсказки в свою противоположность. И начинают играть негативную роль визуальной помехи. Таким образом, возникает эргономический тупик. Короткие идентификаторы не позволяют быстро уяснить смысл понятий, а длинные — затемняют структуру сложных формул. В качестве одного из возможных подходов можно предложить такой план. • Для каждого математического понятия предусматривается два идентификатора: длинный C2-символьный) и короткий (алиас). • В арифметических выражениях используются только алиасы, что делает структуру формул прозрачной. • В начале программы предусматривается икона «комментарий», в которой размещается таблица, устанавливающая связь между алиа- сами и длинными (понятными) идентификаторами. • Эта таблица играет роль шпаргалки, которая позволяет быстро узнать, что означает тот или иной алиас. ВЫВОДЫ 1. Если в нашем распоряжении имеется формальный визуальный синтаксис, то для построения визуального языка программирования достаточно построить (или заимствовать) формальный текстовый синтаксис. В итоге можно получить семейство языков программирования как оригинальных (Дракон-2), так и гибридных (Дракон- Си, Дракон-Паскаль, Дракон-Модула, Дракон-Оберон и т.д.). 2. Понятность визуальных языков существенно выше, чем понятность их текстовых собратьев. Во всех случаях, когда понятность рассматривается как главный критерий качества программ, визуальные языки оказываются вне конкуренции. 3. Сам по себе термин «визуальный» ничего не гарантирует. Успех дела достигается за счет тщательного применения методов науки о человеческих факторах (эргономики). Речь идет о синтезе методов информатики и эргономики, формировании нового междисципли-
Глава 10. ДРУЖЕЛЮБНОЕ ПРОГРАММИРОВАНИЕ 221 нарного направления — инфоэргономики, перестройке всего здания современного программирования на эргономической основе. 4. Создание любого языка программирования следующего поколения должно начинаться с анализа эргономических требований и заканчиваться оценкой полученных эргономических характеристик языка. Главная трудность состоит в инерции мышления многих специалистов, недооценке важности эргономических методов. Чтобы изменить сложившиеся стереотипы мышления, нужно внести серьезные изменения в программу и методы преподавания информатики в школе и вузе.
Часть III ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЯ
Глава АЛГОРИТМЫ В МЕДИЦИНЕ 11 Визуализация — это революционное изменение способа, с помощью которого мы понимаем данные, взаимодействуем с ними... и передаем информацию другим. Дж. Браун и др. [1] ЯЗЫК ДРАКОН: БОЛЬШЕ ПРИМЕРОВ, ХОРОШИХ И РАЗНЫХ! В предыдущей части (главы 4—10) мы закончили беглое знакомство с языком ДРАКОН. В этой части (главы 11—20) перейдем к примерам. Мы рассмотрим большое число примеров из самых различных областей деятельности. И покажем, что ДРАКОН — «повсюду молодец». Он позволяет наглядно изображать технологии, процессы и алгоритмы почти во всех ситуациях. Что это дает? Поскольку процесс создания алгоритмов оказывается чрезвычайно легким, он становится доступным, можно сказать, для любого человека. С появлением ДРАКОНа каждый специалист приобретает новые возможности: • он может выражать свои мысли на своем родном профессиональном языке, но в строгом формализованном виде; • он может рисовать алгоритмы с большой скоростью, о которой раньше нельзя было и мечтать; • мысли одного специалиста благодаря ДРАКОНу становятся понятными специалистам других специальностей. Вследствие этого решается проблема взаимопонимания и интеллектуального взаимодействия между людьми. В итоге специалист получает мощное средство делового общения. Благодаря ДРАКОНу его родной профессиональный язык каким-то чу-
226 Часть ш- ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ десным образом становится очень похож на профессиональные языки других специальностей. Начнем с медицины. И покажем, что ДРАКОН без труда справляется с процедурными медицинскими проблемами. ИЗМЕРЕНИЕ КРОВЯНОГО ДАВЛЕНИЯ Медики редко произносят слово «алгоритм». А жаль! — ведь алгоритмы составляют значительную часть медицинских знаний. На рис. 135 представлен знакомый почти каждому пример — измерение кровяного давления. Пояснение Артериальное давление — это давление внутри кровеносных сосудов, обеспечивающих движение крови по кровеносной системе. Оно измеряется в миллиметрах ртутного столба. Артериальное давление считается нормальным, если верхнее (систолическое) давление равно 120 мм. рт. столба. А нижнее (диастоли- ческое) давление равно 80 мм. рт. столба. Если давление повышается, это плохо для здоровья. О повышенном артериальном давлении говорят, когда верхнее давление превышает 140 мм. рт. столба. Или когда нижнее давление превышает 90 мм. рт. столба. Алгоритм на рис. 135 получен путем точного воспроизведения инструкции для врачей, подготовленной комитетом США по профилактической медицине [2]. Обычно артериальное давление измеряют однократно. Но американские медики для надежности рекомендуют измерять давление НЕ ОДИН, А ДВА РАЗА. Если разница между двумя измерениями меньше 5 мм рт. столба, результат считается достоверным. Если же разница превышает указанную величину, заокеанские врачи рекомендуют аннулировать результат, как недостоверный. И повторить измерение заново. Алгоритм на рис. 135 в точности отражает американские рекомендации. ПЕРВАЯ ПОМОЩЬ ПРИ ХИМИЧЕСКОМ ОЖОГЕ ГЛАЗА ЖИДКОСТЬЮ Ожог — это повреждение тканей, вызванное тепловым, химическим, электрическим или радиационным воздействием. Химические ожоги органов зрения вызваны прямым действием химических веществ: кислот, щелочей и других химических агентов (клеи,
Глава 11. АЛГОРИТМЫ В МЕДИЦИНЕ 227 красители и пр.). В общем случае ожоги глаз могут быть вызваны как твердыми веществами, так и жидкостями. На рис. 136 изображена первая помощь при химическом ожоге глаз жидкостью. Дракон-схема составлена на основании Практического руководства для врачей общей (семейной) практики [3]. Деление алгоритма на три ветки показывает, что первая помощь при химическом ожоге состоит из трех этапов: • промывание глаз водой; • промывание глаз нейтрализатором; • лекарственная обработка. Содержание каждой ветки позволяет дать целостную картину проблемы. И, сверх того, указать точную последовательность действий, выполняемых при оказании первой помощи обожженному глазу. АЛГОРИТМЫ В МЕДИЦИНЕ Алгоритмическими описаниями полны многие медицинские руководства. Например, описания иммунологических методов, клиническая лабораторная диагностика, микробиологические инструкции по идентификации микроорганизмов и многое другое. Процесс обследования и лечения всегда представляет собой некоторую последовательность действий. Следовательно, его можно рассматривать как технологический процесс или алгоритм. К сожалению, форма представления этих алгоритмов далека от совершенства. Этот недостаток вносит серьезные затруднения в процесс распространения медицинских знаний. И неблагоприятно отражается на разработке новых сложных методов лечения. По мнению автора, учебные альбомы и компьютерные библиотеки медицинских дракон-схем могли бы принести ощутимую пользу в медицинских научных исследованиях. А также в системе медицинского образования и во врачебной практике. Кроме того, дракон-схемы могут существенно облегчить взаимопонимание медиков между собой и с медицинскими программистами.
228 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ ( Измерение кровяного давления J Подготовка к измерению Измерение давления Пациент! За 30 минут до процедуры откажитесь от курения и приема кофеина! I \ 30 минут / Медработник! Усадите пациента Пациент! Примите спокойное положение \ 5 минут / Медработник! Оголите руку пациента до предплечья. Положите ее на упор на уровне сердца. Наденьте на руку манжету, чтобы резиновая надувающаяся прокладка охватывала две трети предплечья Измерение давления Измерьте систолическое давление S1 Исчезли шумы Короткова? Ч нет да Измерьте диастолическое давление D1 Измерьте еще раз систолическое давление S2 и диастолическое давление D2 S, -S2| > бммрт.ст. да нет -D2| > 5мм рт. ст. \ да нет Постановка диагноза
Глава 11. АЛГОРИТМЫ В МЕДИЦИНЕ 229 Постановка диагноза Определите среднее значение систолического давления S, ¦ S2 Получены недостоверные результаты. Нужно повторить измерение Измерение давления Определите среднее значение диасистолического давления D, + D2 Систолическое давление превышает норму? S > 140 мм рт. ст. нет Диастолическое давление превышает норму? D > 90 мм рт. ст. нет Диагноз У пациента гипертонии нет да да Диагноз У пациента гипертония Конец I л Рис. 135. Алгоритм «Измерение кровяного давления»
230 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ С Первая помощь при химическом ожоге глаза жидкостью Промывание глаза водой Закапывать в конъюнк- тивальный мешок: 0,25% раствор дикаина; или 2% раствор новокаина Промывать глаз водой При промывании надо выворачивать веки или оттягивать их от глазного яблока Промывать глаз можно: • свободно текущей водой из крана • из резинового баллона объемом 10-20 мл • из шприца объемом 20 мл • из ундинки • из кружки Эсмарха, подвешенной на высоте 1,5-2 м над больным Промывание глаз нейтрализатором Промывание глаза нейтрализатором Опустите в жидкость лакмусовую бумажку (Удалось определить \ нет жидкость? / да / Какая жидкость? / 1 I Щелочь I I Кислота | Промывать глаз 2,5% раствором борной кислоты Промывать глаз 2% раствором питьевой соды Продолжить промывание водой \ 10—15 минут /
Глава 11. АЛГОРИТМЫ В МЕДИЦИНЕ 231 Лекарственная обработка / Какой ожог / Легкий Средний и тяжелый / Что повреждено / Конъюнктива или рогововица Ввести подкожно 1500-3000 ME провиво- столбнячной сыворотки Закапать в конъюнк- тивальный мешок: • 0,25% раствор дика- ина или 2% раствор новокаина • 30% раствор хульфацила натрия Смазать обожженную кожу: • спиртом • затем дезинфицирующей мазью Заложить за веки дезинфицирующую глазную мазь Ввести внутримышечно или дать внутрь антибиотики Наложить на поврежденный глаз повязку Направить больного к специалисту- офтальмологу ( Конец ) Рис. 136. Первая помощь при химическом ожоге глаза жидкостью
232 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ ВЫВОДЫ 1. Важным недостатком современной медицины является отсутствие эффективных способов описания процедурных медицинских знаний. 2. В медицинской литературе доминирует текст и некачественные рисунки, доставшиеся врачам в наследство от предыдущих эпох, что существенно тормозит фиксацию, понимание и передачу медицинских знаний. 3. Чтобы сделать новый прорыв в развитии медицины, необходимы не только новые медицинские знания, но и новые способы описания этих знаний. 4. Визуализация медицинских знаний и разработка новых методов описания знаний представляют собой самостоятельное направление научных исследований в области медицины. 5. Широкомасштабное внедрение языка ДРАКОН для описания процедурных медицинских знаний позволит сделать эти знания намного более ясными, понятными. При этом, скорее всего сократятся сроки медицинского образования. 6. Традиционные способы описания медицинских действий (диагностика и лечебная практика) не позволяют выявить глубинные инварианты медицинских действий. Последние оказываются замаскированными, скрытыми, спрятанными от читателя медицинской литературы. Это обстоятельство затрудняет перенос знаний и навыков, играющий важную роль в медицинском образовании и лечебной практике. 7. Язык ДРАКОН — новое средство, созданное для описания структуры медицинской деятельности. Оно позволяет выявить и обнажить логические инварианты деятельности, сделать их явными, зримыми, доступными для всех врачей и студентов-медиков. 8. Язык ДРАКОН кардинальным образом облегчает труд формализации процедурных медицинских знаний и повышает его производительность. 9. Описание структуры и последовательности медицинских действий и результаты формализации процедурных медицинских знаний целесообразно хранить в компьютерной форме (в виде библиотек визуального гипертекста), а также в виде бумажных визуальных альбомов подходящего формата (например, формата A3). 10. Можно предположить, что использование языка ДРАКОН в медицине позволит существенно повысить производительность той части медицинского труда, которая связана с наиболее сложными, интеллектуальными действиями и операциями.
Глава АЛГОРИТМЫ В ПРОМЫШЛЕННОСТИ 12 Мы сейчас так привыкли к изображению, что мгновенно схватываем его смысл. Между тем было время, когда прочитывание изображения (даже самого простейшего) представляло трудности. Внедрение изображения в культуру — процесс все большего овладения языком изображений. Николай Хренов [1] ДВА ТИПА АЛГОРИТМОВ, ИСПОЛЬЗУЕМЫХ В ПРОМЫШЛЕННОСТИ Современная промышленность — царство алгоритмов. Эти алгоритмы можно разделить на две части: • выполняемые автоматически с помощью компьютеров, • выполняемые вручную или с помощью различных механизмов. Следует подчеркнуть, что язык ДРАКОН позволяет единообразно, стандартным способом описать оба типа алгоритмов: • математические (компьютерные) алгоритмы, • структуру человеческой деятельности и трудовых процессов. АЛГОРИТМ И ДЕЯТЕЛЬНОСТЬ. В ЧЕМ СХОДСТВО И В ЧЕМ РАЗЛИЧИЕ? Математические алгоритмы и человеческая деятельность не разделены китайской стеной. В некотором смысле они являются не чужаками, а близкими родственниками. У них есть нечто общее. Но что именно? Попытаемся разобраться. Не претендуя на строгость (в данном случае она не нужна), можно предложить следующие определения.
234 Часть IIL примеры алгоритмов для различных отраслей знаний Алгоритм — последовательность информационных действий, ведущая к поставленной цели. Деятельность — последовательность информационных и физических действий, ведущая к поставленной цели. Таким образом, отличие состоит в том, что в алгоритме физические действия являются запрещенными, а в деятельности — разрешенными. Примерами физических действий служат: транспортировка груза, нагрев детали, пуск ракеты, зашивание раны и т.д. Отсюда проистекают два предварительных вывода. • Алгоритм есть частный случай человеческой деятельности. • Язык ДРАКОН позволяет описывать любую деятельность и, в частности, алгоритмы. КЛАССИЧЕСКИЕ АЛГОРИТМЫ Перейдем к примерам. Сначала рассмотрим классические (математические) алгоритмы, затем — неклассические алгоритмы, описывающие структуру деятельности. На рис. 83 и 84 изображены математические алгоритмы. Они вычисляют факториал. На рис. 83 факториал вычисляется с помощью цикла ДО. На рис. 84 — с помощью цикла ДЛЯ. На рис. 127 представлен алгоритм «Управление светофором». В данном случае результатом алгоритма являются не числа, а процесс управления уличным движением. Если светофор установлен на бойком месте, он должен работать круглосуточно, не останавливаясь ни на секунду. Поэтому управляющий светофором компьютер и «живущий» в нем алгоритм работают непрерывно, безостановочно. На рис. 128 показан еще один алгоритм, который «замурован» в крохотном компьютере, спрятанном в электронных ручных часах. Он вычисляет время в часах, минутах и секундах. Этот алгоритм постоянно обновляет результаты вычислений, чтобы часы не отстали от жизни. НЕКЛАССИЧЕСКИЕ АЛГОРИТМЫ Перейдем к анализу неклассических алгоритмов. На рис. 137 изображена проверка самолета. При такой проверке часть операций выполняется автоматически, часть — вручную. Является ли проверка самолета алгоритмом? С классической точки зрения — нет. Потому что кое-что делается вручную. Примером таких операций на рис. 137 являются ремонтные работы: • ремонт двигателей; • ремонт крыльев; • ремонт шасси; • ремонт топливной системы;
Глава 12. АЛГОРИТМЫ В ПРОМЫШЛЕННОСТИ 235 • ремонт бортовых систем; • ремонт системы пожаротушения; • ремонт электрооборудования. Здесь возникает противоречие. С одной стороны, необходимо иметь ЦЕЛОСТНУЮ картину проверки самолета, включающую ВСЕ операции: и автоматические, и ручные. С другой стороны, большинство программистов, как правило, исключают из рассмотрения ручные операции. Потому что компьютер не участвует в их реализации. В итоге программисты делают себя «полуслепыми», отказываясь анализировать ручные операции, БЕЗ КОТОРЫХ РАБОТА ПРОМЫШЛЕННОСТИ СТАНОВИТСЯ НЕВОЗМОЖНОЙ. Почему программисты допускают столь грубую ошибку? Потому что они привыкли иметь дело только с классическими алгоритмами. Как разрешить это противоречие? Для этого надо расширить понятие алгоритма, чтобы оно охватывало не только компьютерные операции, но и человеческую деятельность. Еще один пример. На рис. 138 изображена технология изготовления сиропа и маринада. Здесь показаны не информационные, а физические действия. Их выполняет не компьютер, а различные технологические установки и агрегаты: мешкоопрокидыватель, вибросито, магнитная ловушка, бункер-накопитель и т.д. Технология, показанная на рис. 138, спроектирована, реализована и эксплуатируется человеком. Следовательно, она является человеческой деятельностью. С точки зрения математики, схема на рис. 138 не является алгоритмом, ибо она не удовлетворяет классическому определению алгоритма [2]. Чтобы избежать путаницы, мы называем подобные схемы неклассическими алгоритмами. ИЗГОТОВЛЕНИЯ ФРУКТОВЫХ КОНСЕРВОВ На рис. 139 представлен технологический процесс изготовления фруктовых консервов из косточковых плодов. Подобное описание обладает огромными преимуществами по сравнению с традиционным. Обладая высокой эргономичностью, оно позволяет читателю за короткое время (буквально за считанные минуты) составить полное, детальное и точное представление обо всех технологических операциях и последовательности их выполнения. Реальный технологический процесс может быть очень сложным. Обычно его описывают как головной процесс, содержащий большое число вставок. В качестве примера в головном процессе на рис. 139 показана вставка «Изготовление сиропа и маринада», раскрытая на рис. 138.
236 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ Г Проверка самолета J Проверка двигателей Проверка крыльев Проверка шасси Проверка топливной системы Проверка левого двигателя Проверка левого элерона Проверка правого двигателя Проверка правого элерона / Норма V91" у двигателей/" Выпустить шасси Убрать шасси Включить топливную систему Норма \ нет t ТОПЛИВНЫХ) баков V 71 да да Крылья М«вт порядке Г Ремонт двигателей да Норма шасси Ремонт крыльев Проверка крыльев Г Проверка 1 \нет да / Норма ( главного \ насоса .нет Ремонт шасси да Ремонт топливной системы шасси Проверка топливной системы Проверка бортовых систем
Глава 12. АЛГОРИТМЫ В ПРОМЫШЛЕННОСТИ 237 Проверка электрооборудования Проверка бортовых систем Проверка системы пожаротушения I Завершение I проверки J Проверка оборудования Норма \ нет [ бортовых систем да / Норма / пожаро \ тушения Ремонт бортовых систем [проверка1 I пожаро- I тушения i \ нет '•Л Слить топливо да Норма оборудования Ремонт системы пожаротушения да Выключить питание Ремонт оборудования Проверка электрооборудования Завершение проверки Рис. 137. Алгоритм «Проверка самолета»
Приготовление сиропа и маринада Подготовка сахарного песка Подача сахара мешкоопроки- дывателем на вибросито Просеивание сахара на вибросите с магнитной ловушкой металлических примесей Сбор сахара в бункере-накопителе Дозирование сахара по весу дозатором Подготовка сахарного сиропа Подготовка сахарного сиропа Загрузка сахара в варочный котел Добавление в котел расчетного количества воды Растворение сахара Кипячение сиропа 2-3 минуты Перекачивание горячего сиропа насосом на фильтр Фильтрование сиропа через полотняный фильтр (очистка) Заливка продукта в тару Заливка продукта в тар Какая заливка? Сироп используется сразу? Добавление к сиропу пряностей и уксусной кислоты Загрузить сироп в дозировочный автомат для разлива в банки с плодами Загрузить маринад в дозировочный автомат для разлива в банки с плодами Загрузить сироп в накопительный резервуар для хранения С Конец Рис. 138. Заводская технология изготовления сиропа и маринада
Глава 12. АЛГОРИТМЫ В ПРОМЫШЛЕННОСТИ 239 ДРАКОН И ТЕХНОЛОГИЧЕСКИЕ ПРОЦЕССЫ Дракон-схемы технологических процессов могут найти применение в следующих случаях: • создание наглядных плакатов, дающих целостное представление о процессе во всей его многосложности и используемых в качестве демонстрационных материалов. При этом в иконе «комментарий» могут помещаться чертежи, фотографии, схемы установок, станков, сетей трубопроводов и другого оборудования; • выпуск технологической документации; • проектирование и моделирование технологических процессов; • создание визуальной базы данных о техпроцессах; • создание экспертных систем для проектирования технологических процессов, а также тренажеров для эксплуатационников; • изготовление альбомов и каталогов технологических процессов для обучения или рекламы. Можно рекомендовать формат бумажной страницы альбома A3, имея в виду, чторригинал-макеты альбомов готовятся на лазерном принтере формата A3. ВЫВОДЫ 1. Чтобы вскрыть основополагающую структуру человеческих знаний, нужно расчленить их на процедурные (технологические) и декларативные. Подобное расчленение мы склонны рассматривать как генеральное деление знаний. 2. Ценность процедурных знаний состоит в том, что они теснейшим образом связаны с одним из наиболее фундаментальных понятий социально-гуманитарных наук — деятельностью. 3. Процедурные (технологические) знания выявляют, закрепляют в сознании и объективируют структуру деятельности. 4. Важным свойством деятельности является существование глубинных логических инвариантов (структурных конструкций), выражаемых с помощью логических конструкций языка ДРАКОН. 5. В настоящее время отсутствуют эффективные способы описания человеческой деятельности (работы). Язык ДРАКОН позволяет устранить этот пробел. 6. Процедурные знания удобно делить на две группы: классические и неклассические алгоритмы. 7. Язык ДРАКОН позволяет описывать оба типа алгоритмов, используемых в промышленности (классические и неклассические). 8. При проектировании сложных промышленных объектов желательно и даже обязательно иметь ЦЕЛОСТНЫЙ взгляд на проблему, показывающий все ее аспекты. На этом пути возникает трудность.
240 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ Как делают фруктовые консервы J На этом рисунке показана технология изготовления фруктовых консервов (компотов, маринадов, джемов, варенья) из косточковых плодов (сливы, абрикосы, вишни, черешни) г: шяхшяяшяпжя. яапвтяйштжттк яяиватив 1 Разгрузка ящиков с плодами из автомашин Подача плодов ящи- коопрокидывателем на транспортер Подача плодов к калибровочной машине / Какие плоды 7 1 Сливы и абрикосы Вишни и черешни Калибровка плодов на 2-3 размера по диаметру и Вишни и I черешни не 1 калибруют 1 Мойка плодов Сортировка и чистка плодов Сортировка плодов на сортировочной машине с ручной инспекцией Плоды сортируют по качеству, удаляя загнившие, заплесневевшие, зеленые и перезревшие. Доброкачественные плоды сортируют по цвету и степени зрелости на два сорта. Удаление плодоножек, чашелистиков и веточек на специальной машине Какие консервы 1 Компоты и маринады Джемы и варенья Сортировка и чистка плодов I Производство компотов и маринадов I Производство джемов и варенья I
Глава 12. АЛГОРИТМЫ В ПРОМЫШЛЕННОСТИ 241 Рис. 139. Технология изготовления фруктовых консервов Производство компотов и маринадов Отправка консервов на склад Производство джемов и варенья Зтот алгоритм раскрыт на рис. 138 Установка крышек на банки Удаление из плодов косточек на специальной машине Приготовление сиропа и маринада Герметизация банок на закаточном автомате Расфасовка плодов на автоматических весах Абрикосы, вишни, черешни Стерилизация фруктовых консервов в автоклаве Загрузка плодов в варочные аппараты с помощью тельфера Тепловая обработка Заливка сиропа в варочные аппараты Наклейка на банки этикеток Варка варенья (джема) в вакуум-выпарной установке Отправка готовой продукции на склад Укладка плодов в банки Какие консервы Какие консервы Компоты Маринады Подогреть сироп до 80°С Подогреть маринад до 80°С Залить плоды сиропом i Залить плоды маринадом i Укладка плодов в банки Добавление сиропа Фасовка джема в банки дозировочным автоматом 1 Отправка консервов на склад 1 Отправка консервов на склад I
242 Часть ni. примеры алгоритмов для различных отраслей знаний В силу сложившихся привычек программисты обычно делят проблему на две части: • алгоритм, который можно поместить внутрь компьютера и превратить в программу; • операции, выполняемые вручную или с помощью механизмов. Последние зачастую невозможно превратить в программу. Поэтому многие программисты считают, что эта часть дела их не касается. 9. В результате у проектировщиков сложных промышленных объектов нередко возникает не ЦЕЛОСТНЫЙ взгляд на проблему, а КУСОЧНО-РВАНЫЙ, что порождает неоптимальные или ошибочные решения. 10. Одной из причин этого недостатка является отсутствие языковых средств, помогающих разработчикам вырабатывать ЦЕЛОСТНОЕ видение проблемы. 11. Язык ДРАКОН позволяет устранить этот недостаток. Он дает разработчикам надежные средства, позволяющие изображать не кусочно-рваную, а целостную картину любых промышленных (и не только промышленных) процессов.
Глава АЛГОРИТМЫ В ТОРГОВЛЕ 13 Конструирование образа должно совершаться с полным осознанием всех ресурсов формы, которые могут быть использованы для достижения максимальной выразительности. Уильям Боумен [1] СВЕРКАЮЩЕЕ ОЖЕРЕЛЬЕ ТОРГОВЫХ АЛГОРИТМОВ В торговле используется огромное количество самых разнообразных алгоритмов. Примерами являются алгоритмы оптовой и розничной торговли для частных и бюджетных предприятий, бухгалтерские расчеты, управление складскими операциями. Сюда же можно отнести обработку платежных поручений, расчет зарплаты, управление персоналом и многое другое. Все эти операции можно изобразить на языке ДРАКОН. Причем, и это очень важно, ДРАКОН представляет любые аспекты торговой деятельности в наиболее ясной и понятной форме. В форме, понятной не только программистам, но и всем остальным участникам торгового процесса: от рядового бухгалтера до руководителя торговой фирмы. Ниже представлен материал А.Н. Шилина, который был любезно передан автору в 2000 году. ДРАКОН ПОМОГАЕТ БУХГАЛТЕРУ Александр Шилин В современные системы бухгалтерского учета закладывается все больше сложных правил анализа и обработки информации. Эти правила очень трудно объяснить бухгалтеру, потому что они представляют собой длинные цепочки анализа и принятия решения. При внедрении
244 Часть IIL примеры алгоритмов для различных отраслей знаний бухгалтерских программ очень часто возникает проблема непонимания. Если бухгалтер не понимает, как программа формирует проводки, у него возникает недоверие. Недоверие порождает неумение и нежелание использовать программу. Наша фирма «Инженеры информации» занимается внедрением программы «1С-Бухгалтерия 7.7». Программа поставляется в типовой конфигурации, которая содержит наиболее распространенные в бухгалтерском учете документы. Эти документы при заполнении формируют по заданным правилам бухгалтерские проводки. Проводки формируются в разных вариантах. Результат проводки зависит от остатков и оборотов бухгалтерских счетов в разные моменты времени. Трудность в том, что схема учета, принятая на предприятии, часто отличается от схемы учета заложенной в стандартной конфигурации. Задача нашей фирмы — объяснить бухгалтеру схему учета, принятую в типовой конфигурации программы «1С-Бухгалтерия 7.7». Бухгалтер должен увидеть отличия своей схемы учета от типовой конфигурации. И принять решение о доработке типовой конфигурации. КАК МЫ ИСПОЛЬЗОВАЛИ ЯЗЫК ДРАКОН Мы долго искали метод доступного и наглядного изображения правил, заложенных в программу бухгалтерского учета. Год назад нам встретилась книга «В.Д. Паронджанов. Как улучшить работу ума. Новые средства для образного представления знаний, развития интеллекта и взаимопонимания. М.: Радио и связь, 1998.352с». В ней описан язык визуального отображения информации ДРАКОН. Он использовался при создании вычислительной системы космического корабля «Буран» и сейчас применяется в проектировании ракетной техники. Методы и описания языка ДРАКОН напоминают блок-схемы. Но в нем есть то, что отсутствует в блок-схемах. В язык ДРАКОН заложена система правил, которые улучшают восприятие информации. Оформление блок-схем по этим правилам делает их понятным любому человеку. Раньше (до знакомства с ДРАКОНом) мы были вынуждены описывать работу документов в текстовом виде с использованием текстовых алгоритмических конструкций. Приведем пример. ПРИМЕР ТЕКСТОВОЙ ЗАПИСИ РАБОТЫ ДОКУМЕНТА «ПРИХОДНЫЙ КАССОВЫЙ ОРДЕР» Работа с документом «Приходный Кассовый Ордер» Какой счет записан в поле Корреспондирующий счет Если счет 46 (Реализация) Тогда
Глава 13. АЛГОРИТМЫ В ТОРГОВЛЕ 245 Если в документе указан Налог С Продаж Тогда Проводка ДебетD6) КредитF8,30) Конец Если Проводка ДебетE0) КредитD6) Если счет 62 (Покупатели) Тогда Обработка счета 62 Если счет 64 (Предоплата) Тогда Если в документе указан Налог С Продаж Тогда Если местные законы требуют платить с авансов Налог С Продаж Тогда Начисляем Налог С Продаж с аванса Проводка ДебетF4) КредитF8,30) Конец Если Конец Если Выделяем НДС с аванса Проводка ДебетF4) КредитF8,2) Проводка ДебетE0) КредитF4) Если другой счет (не 46, 62, 64) Тогда Проводка ДебетE0) Кредит(Корреспондирующий счет) Конец Если Конец работы с документом ДРАКОН-СХЕМА, ОПИСЫВАЮЩАЯ РАБОТУ ДОКУМЕНТА «ПРИХОДНЫЙ КАССОВЫЙ ОРДЕР» Пример дракон-схемы показан на рис. 140. Легко видеть, что содержание текста и схемы полностью совпадает. Основные предложения в тексте и надписи на рисунке не отличаются. Исчезли лишь ключевые слова: Если, Тогда, Конец Если и т.д. Вместо них появились линии, отражающие ход управления программой. Сравнивая две формы представления алгоритма, легко убедиться, что дракон-схема намного удобнее. Благодаря схеме изложение мысли приобрело наглядность и доходчивость, свойственные графике. Отметим важную особенность. В данном документе обработка счета 62 слишком объемна. Если показать ее в тексте или на схеме полностью, из-за большого объема будет потеряна ясность и наглядность. Поэтому обработка счета 62 выделена в отдельную процедуру. В тексте она указана одной фразой «Обработка счета 62». В текстовой форме процедура приведена ниже. А дракон-схема показана на рис. 141. ПРИМЕР ТЕКСТОВОЙ ЗАПИСИ ОБРАБОТКИ СЧЕТА 62 ПРИ ПОСТУПЛЕНИИ ДЕНЕГ В КАССУ Обработка счета 62 Проверить задолженность Покупателя Если Есть задолженность у Покупателя Тогда Если Покупатель платит больше чем должен нам Тогда Предупредить бухгалтера об этом
246 Часть IIL ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ Конец Если Если Метод определения выручки По Оплате тогда Если есть неоплаченная отгрузка Тогда Вычислить какая часть долга Покупателя гасится суммой Оплаты Пропорционально уменьшить сумму неоплаченной отгрузки Проводка Дебет (ПС) (ПС — забалансовый счет). Конец Если Конец Если Конец Если Если в документе указан Налог С Продаж Тогда Начисляем неоплаченный при отгрузке Налог С Продаж. Проводка ДебетGб,4) КредитF8,30) Конец Если Если Метод определения выручки По Оплате Тогда Начисляем неоплаченный при отгрузке НДС. Проводка ДебетG6,4) КредитF8,2) Если в документе указан НГСМ Тогда Начисляем неоплаченный при отгрузке НГСМ. Проводка ДебетG6,4) КредитF7,2) Конец Если Конец Если Проводка ДебетE0) КредитF2) Конец обработки счета 62 СРАВНЕНИЕ ТЕКСТА И ДРАКОН-СХЕМЫ Ясно, что схема на рис. 141 намного наглядней, чем текст. Почему? Правила языка ДРАКОН заставляют разбивать графическую информацию на отдельные обособленные блоки. Двумерное пространство графики позволяет наглядно расположить эти блоки и показать связь между ними. В тексте мы используем практически одно измерение — вертикаль. А в дракон-схеме информация эффективно разворачивается в двух измерениях — вертикальном и горизонтальном. Это очень важно, потому что система «глаз—мозг» лучше воспринимает панорамную информацию. ДРАКОН РЕШАЕТ ПРОБЛЕМЫ Когда мы только начинали использовать в своей работе дракон-схемы, то опасались непонимания бухгалтеров, настраивались на долгие объяснения. К нашему удивлению, вопросов о внутреннем устройстве дракон-схем практически не было. Многие бухгалтеры, глядя на дракон-схемы, сразу же выделяли существенные для себя проблемы. И тут же начинали объяснять, что их не устраивает. И какие изменения следует внести, чтобы учесть особенности конкретного производства. Очень быстро устанавливалась атмосфера взаимного понимания решаемой задачи.
Глава 13. АЛГОРИТМЫ В ТОРГОВЛЕ 247 Любой специалист, занимающийся автоматизацией, знает, как трудно понять: что хочет заказчик? Применение языка ДРАКОН дало нам возможность преодолеть непонимание и недоверие бухгалтеров при внедрении программ 1С. Кроме того, мы используем язык ДРАКОН для проектирования задач бухгалтерского учета. То есть, применяем дракон-схемы, записывая новую информацию при постановке задач «с нуля». Подведем итоги. После нескольких лет проблем и трудностей, которые мы испытывали при обучении и внедрении бухгалтерских программ, наконец, найдена нужная методика работы. Теперь в наших руках есть набор правил и процедур языка ДРАКОН, с помощью которых можно ясно и полно описать нашу работу. Самое главное, мы добились, что бухгалтер стал понимать суть работы программы. Язык ДРАКОН решил для нас с заказчиком важнейшую проблему взаимопонимания. Наши координаты: ООО «Инженеры информация», г. Волжский, Волгоградская область. Сайт: http://www.enginf.ru/ АЛГОРИТМ «ПОКУПКА ТОВАРА ПО БЕЗНАЛИЧНОМУ РАСЧЕТУ» Покупка товаров по безналичному расчету показана на рис. 142. Дракон- схема состоит из четырех веток: • выбор торговой операции; • покупка с предоплатой; • покупка без предоплаты; • завершение. Алгоритм с предоплатой изображен во второй ветке, без предоплаты — в третьей ветке. Обратите внимание: алгоритмы с предоплатой и без начинаются с двух разных вопросов: 1. Есть ли задолженность поставщика нашей фирме? 2. Есть ли задолженность нашей фирмы поставщику? (рис. 142). АЛГОРИТМ «ПРОДАЖА АВИАБИЛЕТОВ» Дракон-схема «Продажа авиабилетов» состоит из четырех веток (рис. 143):
248 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ С Работа с документом «Приходный кассовый ордер» 7 Какой счет записан в поле «Корреспондирующий счет»? Счет 46 (Реализация) /I В документе \ нет ^ указан Налог с Продаж Да Проводка Дебет D6) Кредит F8,30) Проводка Дебет D6) Кредит F8,30) Счет 62 (Покупатели) Обработка счета 62 (Покупатели) Счет 64 (Предоплата) / В документе \t нет \указан Налог V— с Продаж / Другой счет (не 46, 62, 64) / Местные \ / законы \ / требуют платить V- Дс авансов Налог/ ; \ с Продаж? / Начисляем Налог с Продаж с аванса I Проводка Дебет F4) Кредит F8,30) Проводка Дебет E0) Кредит (Корреспондирующий счет) нет Выделяем НДС с аванса Проводка Дебет F4) Кредит F8,2) Проводка Дебет E0) Кредит F4) " " 5 -' 4 ! ' , Л^Ц; Конец ) Рис. 140. Дракон-схема, описывающая работу с документом «Приходный кассовый ордер»
Глава 13. АЛГОРИТМЫ В ТОРГОВЛЕ 249 Обработка счета 62 Проверка | задолженности Покупателя Есть задолженность у Покупателя Покупатель ' платит больше, чем должен нам? Предупредить бухгалтера об этом Учет себестоимости отгрузки Метод определения выручки по оплате? Ч .нет Есть неоплаченная отгрузка? да Вычислить, какая часть долга Покупателя гасится Суммой оплаты Пропорционально уменьшить сумму отгруженных и неоплаченных товаров Проводка Дебет (ПС) (ПС - Забалансовый счет) В документе указан Налог с Продаж Начисляем неоплаченный при отгрузке Налог с Продаж X Проводка Дебет G6,4) Кредит F8,30) ± \ Метод определения выручки по оплате? - 1Да Начисляем неоплаченный при отгрузке НДС X Проводка Дебет G6,4) Кредит F8,2) У В документе \указан НГСМ? Начисляем неоплаченный при отгрузке НГСМ Проводка Дебет G6,4) Кредит F7,2) Учет себестоимости отгрузки Итоговая проводка счета 62^ \ нет Проводка Дебет E0) Кредит F2) ( Конец ) нет Рис. 141. Дракон-схема, описывающая обработку счета 62 при поступлении денег в кассу
250 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ ( Покупка товаров по безналичному расчету Выбор торговой операции / ВидТ7 /торговой / /операции/ 1 Покупка с предоплатой Покупка без предоплаты Покупка с предоплатой <Есть ли эадолжвн-\, ность поставщика у нашей фирме? / да Сумма задолженности поставщика больше или равна стоимости товара, который хотим купить? нет Получение счета от поставщика на полную сумму покупки да Извещаем поставщика о необходимости отгрузить товар в счет имеющейся задолженности Отгрузка товара поставщиком Выписка поставщиком товарно-транспортной накладной и счета-фактуры Доставка товара Регистрация счета-фактуры Оприходование товара | Покупка с | [Покупка без] ГТ I предоплатой предоплаты I завершение 1 Просим поставщика выписать счет на недостающую сумму (с учетом имеющейся задолженности) Оплата счета I
Глава 13. АЛГОРИТМЫ В ТОРГОВЛЕ 251 Покупка без предоплаты / Есть ли задолжен-\ С ность нашей фирмы ^поставщику? / Согласен ли поставщик отпустить товар без предоплаты (несмотря на долг)? нет .нет да Отгрузка товара поставщиком Выписка поставщиком товарно-транспортной накладной и счета-фактуры Доставка товара Регистрация счета-фактуры Оприходование товара Получение счета от поставщика Оплата счета Оплачиваем задолженность поставщику ± Рис. 142. Покупка товара по безналичному расчету
Продажа авиабилетов го ГО Оформление заказа Получить информацию от покупателя о рейсе и числе билетов Дать заявку на нужное число билетов Нужное число билетов зарезервировано? да Уточнить число зарезервированных билетов Число билетов > О? нет Сообщить клиенту о частичном выполнении заявки Клиент согласен на частичное выполнение заявки? L < i Выставление Рассчитать сумму оплаты заказа Выставить счет клиенту Клиент cor- \ ласен опла- ) тить счет? / Да Выписать билеты Получить деньги с клиента Отменить резервирование билетов /нет Ш о о -тэ о CD 1=2 -о сг X о Отмена резерн] вирования [ Завершение Рис. 143. Алгоритм «Продажа авиабилетов»
Глава 13. АЛГОРИТМЫ В ТОРГОВЛЕ 253 • оформление заказа; • выставление счета; • отмена резервирования; • завершение. Мы показали наиболее простые примеры. В реальной торговой практике встречаются очень сложные и чрезвычайно разнообразные алгоритмы. ВЫВОДЫ 1. Торговля, как человеческая деятельность, требует высокого уровня взаимопонимания между заказчиками и разработчиками программных комплексов. 2. Между тем должное взаимопонимание сегодня является труднодостижимой целью. Работа по достижению взаимопонимания имеет крайне низкую производительность, которая резко отстает от растущих требований. 3. Недостаточное взаимопонимание значительно снижает производительность труда и нередко влечет за собой упущенную выгоду. 4. Одна из причин этого недостатка состоит в том, что сегодня отсутствуют наглядные языковые средства: • пригодные для эффективного описания алгоритмов, используемых в торговой деятельности, • способные обеспечить быстрое взаимопонимание между заказчиками и разработчиками программных комплексов торгового назначения. 5. Язык ДРАКОН позволяет устранить этот пробел и добиться заметного повышения производительности труда в этой области.
Глава 14 АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ Блок-схемы популярны, так как они графически отображают логику программы набором стандартных геометрических фигур и соединительных линий. Блок-схемы... представляют собой интуитивно-понятный метод представления управляющей последовательности алгоритма. Лесли Энн Робертсон [1] НЕДОСТАТОК НАШЕЙ ЦИВИЛИЗАЦИИ За последние сто лет сложность труда скачкообразно изменилась и превысила все разумные пределы. Труд стал во много раз сложнее, разнообразнее, многограннее. К чему это привело? Чтобы заниматься сверхсложным трудом, нужна серьезная, основательная подготовка. Необходимо приобрести глубокие знания, изучить хитроумные трудовые операции, приобрести сложнейшие навыки. Здесь-то и возникает проблема. Чтобы освоить сложную и сверхсложную работу, необходимо изменить систему подготовки к труду. Это не было сделано должным образом. Последствия оказались плачевными. Чтобы подготовка к труду была эффективной, во многих (хотя и не во всех) случаях необходимо иметь описание предстоящей работы. Такое описание должно быть очень хорошим. Это значит — доступным, удобным, легким для понимания. Существуют ли такие описания? Нет, не существуют! Это настоящая интеллектуальная трагедия. Сделаем оговорку. Описания, конечно, есть, и их довольно много. Но они, как правило, имеют низкое качество. Имеющиеся описания изложены
Глава 14. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 255 путаным, корявым языком. Они непригодны для эффективного обучения, так как требуют слишком большого времени для понимания. Это значит, что производительность понимания ничтожно мала. По нашему мнению, подобные описания приносят не только пользу, но и большой вред — они тормозят работу ума и существенно замедляют развитие цивилизации. До последнего времени эта проблема (проблема хороших описаний) находилась в тени. На нее почти никто не обращал внимания. На наш взгляд, следствием подобного пренебрежения являются значительные экономические и интеллектуальные потери. Принято считать, что качество описаний не играет большой роли. Мы решительно протестуем против этого. Наша позиция такова. • Чтобы обеспечить эффективное выполнение сложной наукоемкой работы, необходимо иметь ее описание. • Существующие способы описания сложных трудовых процессов отстали от жизни и не удовлетворяют современным требованиям. • Отсутствие хороших описаний — серьезный недостаток нашей цивилизации. • Сложные трудовые процессы можно рассматривать как своеобразные алгоритмы. • Чтобы организовать массовое производство хороших описаний для сложных трудовых процессов, нужно иметь специальный алгоритмический язык. Язык, доступный для широкого круга специалистов, не имеющих никакого понятия об алгоритмах и программах. • В качестве такого языка целесообразно использовать язык ДРАКОН. • Согласно нашей гипотезе широкое применение языка ДРАКОН для описания структуры сложной деятельности и наукоемких трудовых процессов позволит значительно улучшить работу ума и повысить эффективность развития общества. Ниже мы попытаемся разъяснить эти положения. НЕОБЫКНОВЕННО СЛОЖНЫЕ АЛГОРИТМЫ, ОТ КОТОРЫХ КРУЖИТСЯ ГОЛОВА Иногда высказывают мнение, что язык ДРАКОН хорошо описывает простые задачи и непригоден для изображения сложных проблем. Это неверно. ДРАКОН специально сконструирован, чтобы облегчить описание и решение широкого спектра процедурных задач, включая самые сложные. Более того, чем сложнее проблема, тем больше выигрыш от использования языка ДРАКОН. А теперь перейдем к самому интересному. Давайте устроим Д РАКОНу труднейший экзамен. Для этого выберем самую сложную задачу, какая только возможна в этом мире. И посмотрим, сумеет ли ДРАКОН справиться с задачей и выдержать испытание.
256 Часть IIL ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ Одной из подобных задач, несомненно, является проектирование атомного реактора. Ясно, что это грандиозная, «запредельная» по сложности проблема. Как говорится, сложнее не бывает. А если и бывает, то очень редко. Впрочем, как вероятно уже догадался читатель, для ДРАКОНа не существует сложных задач. ДРАКОН для того и создан, чтобы превращать сложные вещи в простые. Если изобразить сложную проблему на языке ДРАКОН, наблюдается следующий неожиданный эффект. Хорошо знакомая задача на глазах преображается и предстает перед нашим изумленным взором в совершенно новом свете. Она резко упрощается и становится ясной, четкой и обозримой. Конечно, все это не надо понимать слишком буквально. Сложность есть сложность, и полностью избавиться от нее невозможно. Тем не менее, одна из основных идей когнитивной эргономики в том и заключается, чтобы — в пределах возможного — устранить неоправданную сложность. И представить громоздкую и трудную задачу в максимально удобной и наглядной форме по принципу: «Взглянул — и сразу стало ясно!». БИТВА ДРАКОНА С ЧУДОВИЩНОЙ СЛОЖНОСТЬЮ А теперь вернемся к нашему экзамену и посмотрим, в какой мере ДРАКОН способен упростить и сделать наглядной сложнейшую задачу проектирования атомного реактора. Прежде всего, необходимо получить целостный взгляд на проблему. Для этого служит особая фигура — шапка (рис. 144). Шапка — смысловой костяк алгоритма (рис. 145). Мы заранее знаем, что шапка находится вверху, «на голове» у алгоритма. Поэтому, не тратя время попусту, автоматически вскидываем глаза и читаем шапку. В итоге узнаем, что проблема проектирования реактора состоит всего из шести частей, которые называются так (рис. 145): • выбор схемно-конструктивных решений; • расчетный анализ стационарных режимов; • расчетный анализ систем безопасности; • расчетный анализ аварий; • расчетный анализ элементов реактора; • расчет радиационной защиты. Сколько времени нужно, чтобы впитать эту информацию? Минуту? Две? Три? Пять? Шапка дает общее представление, без деталей. Благодаря шапке читатель получает ориентировку о проблеме практически мгновенно. Причем, что очень важно, время ориентировки не зависит от сложности задачи и составляет считанные минуты. Из шапки мы узнали заголовки веток. После этого, как всегда, приступаем к двум стандартным операциям:
Глава 14. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 257 • изучению содержания веток, • анализу их взаимодействия. Чтобы выполнить эти операции и тщательно изучить алгоритм на рис. 145, читателю вряд ли потребуется больше, чем пятнадцать-двадцать минут. (Речь, разумеется, идет о специалистах или студентах, а не о человеке с улицы). ВАЖНАЯ РОЛЬ ВСТАВОК Алгоритм на рис. 145 содержит большое число вставок (процедур). Например, во второй ветке есть вставка «Расчет стационарных параметров 1-го контура атомного реактора». А в четвертой — вставка «Расчет ре- активностных аварий атомного реактора». Эти вставки раскрыты на рис. 146 и 147. Рис. 145—147 убедительно демонстрируют, что любой, сколь угодно сложный алгоритм (назовем его супералгоритм) можно изобразить с помощью простого и единообразного приема — наглядной декомпозиции. Декомпозиция алгоритма — разбиение алгоритма на несколько уровней иерархии (которые похожи на этажи в многоэтажной пирамиде). Верхний уровень иерархии (верхний этаж) показан на рис. 145. Его можно рассматривать как вершину гигантской пирамиды, откуда открывается взгляд на проблему с высоты птичьего полета. Там же перечисляются все алгоритмы второго уровня, которые в нашей воображаемой пирамиде расположены на один шаг ближе к земле. Рассматривая алгоритмы второго уровня (примеры которых показаны на рис. 146 и 147), легко заметить, что в них указываются алгоритмы Проектирование у :: атомного реактора Выбор схемно- конструк- тивных решений ШАПКА Расчетный анализ стационарных режимов Расчетный анализ систем безопасности Расчетный анализ аварий Расчетный анализ элементов реактора Расчет радиационной защиты Рис. 144. Шапка—важнейший элемент силуэта. Она делает дракон-схему структурно ясной и полностью исключает кривотолки
258 Часть IIL примеры алгоритмов для различных отраслей знаний третьего уровня, которые находятся еще ближе «к земле». То есть дают более детальное знакомство с проблемой. Постепенно спускаясь с вершины пирамиды к ее основанию, мы наблюдаем последовательное разбиение (декомпозицию) сложной проблемы на все более мелкие и подробные детали. В конечном итоге (когда мы спустимся «на уровень земли») эти детали дадут исчерпывающее и полное описание нашего супералгоритма. При необходимости его можно дополнить справочником, содержащим определения всех использованных понятий. Важным достоинством является тот факт, что язык ДРАКОН не зависит от уровня иерархии. Он один и тот же и на самом верху, и у основания пирамиды. Благодаря этому достигается резкое упрощение алгоритмов любой сложности. В итоге «уму непостижимая» проблема превращается в относительно простую, ясную и наглядную. Насколько известно автору, до сих пор практически отсутствовали эффективные эргономичные изобразительные средства, позволяющие одновременно решать две задачи: формализацию и визуализацию супералгоритмов. По этой причине целостный взгляд на супералгоритм, как на детерминированный многоступенчатый процесс, имеющий начало и конец, по сути дела был недоступен широкому кругу специалистов и учащихся. Он оставался достоянием узкой группы элитных специалистов, которые «все держат в голове». Из-за этого остальным участникам сложного проекта вынужденно отводилась незавидная роль винтиков творческого организма, которые должны знать свой «шесток», но которым «не положено» иметь целостное панорамное видение процесса во всей его многосложности. Язык ДРАКОН позволяет сделать важный шаг к устранению этого недостатка. Он дает возможность более эффективно организовать совместную работу участников сложного проекта. И более разумно использовать интеллектуальные ресурсы их коллективного мозга. ДАВАЙТЕ ЗАМЕНИМ АТОМНЫЙ РЕАКТОР НА КРАСАВИЦУ-КОЛДУНЬЮ Взглянем еще раз на рис. 145. На нем изображен сверхсложный алгоритм «Проектирование атомного реактора». Попробуем понять: а где, собственно, прячется царица по имени «Сложность»? Где ее тайное логово? Чтобы прояснить загадку, применим любопытный прием. Давайте возьмем в руки ластик и уберем из дракон-схемы текст. Весь текст до последней буквы. У нас получится схема-слепыш. На ней сохранятся все иконы и все соединительные линии. Но слова полностью исчезнут. А теперь сделаем самое интересное. Заполним слепыш новым содержанием. Вольем новое вино в старые мехи!
Глава 14. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 259 Как это сделать? Очень просто. В каждую икону впишем новые слова. Разумеется, их надо писать не как попало, а со смыслом. Чтобы получился связный алгоритмический рассказ. Можно ли это сделать? Да, можно! Чтобы убедиться в этом, посмотрим на рис. 148. На нем изображен алгоритм «История с колдуньей». Эта история вовсе не кажется сложной. Наоборот! Она напоминает юмористическую сказку (правда, несколько глуповатую), которая читается без всякого труда и даже с интересом. Если вам не нравится «История с колдуньей», можно заменить ее на любую другую. Сделать это легко. Надо стереть весь текст и получить слепыш. А после этого заполнить его словами по своему усмотрению. Подведем итоги и попробуем понять: что же у нас получилось. Сравним рис. 145 и 148. Мы видим, что на этих рисунках показан один и тот же графический узор. Использованы в точности одинаковые иконы. Число их тоже совпадает. Причем в обоих случаях иконы соединены между собой совершенно одинаково. Поэтому мы вправе сказать: в основе рисунков 145 и 148 лежит одна и та же схема-слепыш. В чем же разница между рисунками? Она только в словах. В первом случае речь идет о проектировании атомного реактора. Во втором — о красавице-колдунье. В первом случае алгоритм кажется безумно сложным. Во втором — очень легким. Отсюда вывод: царица по имени «Сложность» прячется не в графике. Она — в содержании, то есть в словах. А что же делает графический рисунок? Он выполняет важную и благородную работу — делает сложное более простым. Но каким образом? Хорошая (эргономичная) графика упорядочивает сложный текст и структурирует его. Она разбивает огромную словесную глыбу на маленькие порции, которые можно проглотить легко и с удовольствием. В результате читатель получает долгожданную помощь, так как алгоритм становится более легким для понимания. СИНТАКСИС ЯЗЫКА ДРАКОН Возможности языка ДРАКОН, позволяющие оптимизировать и улучшить работу ума, объясняются тем, что он опирается на тщательно продуманные "математические и эргономические правила. Эти правила не висят в воздухе и не витают в космическом пространстве. Они воплощены в синтаксисе языка. ДРАКОН — графический язык, в котором используются два типа элементов: графические фигуры и текстовые надписи. Следовательно, синтаксис ДРАКОНа делится на две части: • визуальный синтаксис; • текстовый синтаксис. Визуальный синтаксис состоит из графического алфавита и графических правил. «Буквами» графического алфавита являются иконы (рис. 1).
260 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ С Проектирование атомного реактора Выбор схемно- конструктивных решений Расчетный анализ стационарных режимов Расчетный анализ систем безопасности Выбор конструкции реактора Анализ проливки реактора Расчет стационарных параметров 1-го контура атомного реактора Втщ алгоритм раскрыт на рис* Х46 Расчет системы норм теплоотвода реактора Расчет системы аварийного охлаждения зоны Расчет системы ввода бора Схемно- \ конструктивные \ нет решения V—— соответствуют / требованиям? / / да Расчет водно-газового химического режима < Схемно- \ конструктивные \ нет решения \—- соответствуют / требованиям? / Расчетный анализ стационарных режимов Расчетный анализ систем безопасности да „ Выбор схемно- конструктивных решений i Расчетный анализ аварий Выбор схемно- конструктивных решений
Глава 14. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 261 Рис. 145. Очень сложный алгоритм «Проектирование атомного реактора» Расчетный анализ элементов реактора Этот алгоритм раскрыт на рис. 147 Расчетный анализ аварий Расчет радиационной защиты Анализ /{ реактивностных аварий атомного реактора Обеспечивается \ теплотехническая \ нет надежность зоны I и реактора? / Расчетный анализ температурного состояния корпусных конструкций реактора Анализ аварий теплоотвода 1 Обеспечивается \ теплотехническая \ надежность зоны I и реактора? / _/ да Анализ аварий разгерметизации Обеспечивается теплотехническая надежность зоны и реактора? нет Анализ радиационных последствий аварий Расчет радиационной защиты Выпуск технической документации Расчет рабочих органов системы аварийной защиты Конец Расчет конструкционных элементов 1-го контура Требования по надежности реактора и его элементов удовле творяются? "Л Расчетный анализ элементов реактора Расчетный анализ стационарных режимов да Расчет радиационной защиты Расчетный анализ стационарных режимов
262 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ Расчет стационарных параметров 1-го контура атомного реактора Анализ нейтронной физики активной зоны Анализ теплогид- равлики активной зоны Расчет нейтронно- физических характристик активной зоны Расчет теплогидравлики активной зоны Обеспечивается теплотехническая надежность? нет Обеспечиваются эффективные нейтронно- физические характристики активной зоны? нет да Анализ теплогидравлики активной зоны Завершение расчета да Анализ теплогидравлики парогенератора Можно обеспечить надежность за счет профилирования активной зоны? да Анализ нейтронной физики активной зоны нет Завершение расчета
Глава 14. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 263 Рис. 146. Алгоритм «Расчет стационарных параметров 1-го контура атомного реактора» Анализ теплогид- равлики парогенератора Анализ теплогид- равлики 1-го контура и выбор насоса Расчет теплогид- равлики парогенератора Расчет теплогид- равлики 1-го контура / Выполняются / требования / технического \ задания по \ параметрам \ ПТУ? нет да Завершение расчета Q Конец Расчет циркуляционного насоса / Можно / обеспечить / выполнение / требований \ за счет \ теплотех- \ нических \ запасов? i да Анализ теплогид- равлики 1-го контура и выбор насоса Анализ теплогид- равлики активной зоны Завершение расчета Завершение расчета
264 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ С Анализ реактивностных аварий атомного реактора Составление перечня проектных аварий Адаптация исходных событий нормативных документов Составление перечня запроектных аварий Выбор исходных событий дополнение перечня исходных событий J I Расчетный анализ аварий у Выбор очередной аварии Выбор совокупности дополнительных отказов Разработка перечня дополнительных отказов Анализ возможности расчета по существующим программам / Положительный\ нет < результат V-i Качественный аварий Написание сценариев развития аварий Выбор наиболее тяжелых аварий на основании качественного анализа Составление перечня запроектных аварий Расчс \ анализа г / да —^ этный анализ аварий i Доработка методик и программ 1 Расчет мощности и распределения параметров рабочих сред Расчет теплового состояния элементов оборудования реактора Анализ качества прохождения аварий
Глава 14. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 265 Рис. 147. Алгоритм «Анализ реактивностных аварий атомного реактора» Анализ качества прохождения аварий Завершение расчетов Анализ на соответствие нормативным документам Оформление материалов Конец J Результат анализа положительный? нет Анализ на соответствие требованиям технического задания Результат анализа положительный? нет да Доработка схемно- конструктивных решений / Проанали- / зирован весь \ перечень \ аварий? да нет Доработка сценариев развития аварий Расчетный анализ аварий Завершение расчетов Расчетный анализ аварий
266 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ С История с колдуньей Овладение мудростью Похищение сокровищ Встреча с красавицей колдуньей Получи бесценные советы тибетских мудрецов Изучи приемы черной и белой магии Возьми богатырский меч Победи всех соперников Начерти волшебную карту и найди несметные сокровища Докажи, что ты — настоящий герой Соблазни красавицу колдунью Злые разбойники напали на тебя и похитили сокровища? нет Похищение сокровищ Закопай сокровища в дремучем лесу Встреча с красавицей колдуньей / Коварная / колдунья обма- ( ном выманила \ у тебя все \ сокровища? да I нет Овладение мудростью Семейная жизнь Овладение мудростью
Глава 14. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 267 Рис. 148. Алгоритм «История с колдуньей». Сравни с рис. 145 Семейная жизнь Необычное путешествие Возвращение блудного сына Женись на красавице колдунье Колдунья разорила тебя до последней копейки? нет да Подари колдунье звезды с неба Колдунья разорила тебя до последней копейки? I нет да Подари колдунье роскошную виллу Колдунья разорила тебя до последней копейки? I нет да Подари колдунье власть над миром Необычное путешествие Похищение сокровищ Пригласи свою колдунью в кругосветное путешествие на белоснежной яхте Покажи ей настоящее африканское сафари с русской удалью Поезжай с колдуньей в Лас-Вегас, чтобы слегка развлечься В Лас-Вегасе ты проигрался в пух и прах, оставшись без штанов? нет Возвращение блудного сына Вернись домой и возьмись за ум Купи колдунье домик на Волге и живи с ней тихой семейной жизнью Конец Похищение сокровищ
268 Часть IIL ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ Графические правила (правила рисования) определяют правила размещения икон в поле чертежа и правила связи икон с помощью соединительных линий. Именно графические правила задают порядок «пошагового строительства» чертежа, венцом которого является красивый зрительный образ целостной дракон-схемы. Текстовый синтаксис задает правила построения текстовых надписей, размещаемых внутри икон. Он определяет алфавит разрешенных символов, правила их комбинирования и привязку надписей к иконам. (Привязка необходима потому, что внутри разных икон используются разные типы выражений). Одновременное использование графики и текста говорит о том, что ДРАКОН адресуется не только к словесно-логическому мышлению автора и читателя алгоритма. Сверх того, он активизирует интуитивное, образное, правополушарное мышление, стимулируя его не написанным, а именно нарисованным алгоритмом, то есть алгоритмом-картинкой. Синтаксис — фундамент любого искусственного языка. Чем лучше синтаксис, тем лучше язык. Чтобы создать хороший язык, необходимо придумать хороший синтаксис. Эргономичность языка во многом зависит от визуального синтаксиса. Чтобы увидеть визуальный синтаксис языка ДРАКОН, так сказать, в чистом виде, нужно взглянуть на слепыш (из которого, как мы знаем, полностью удален текст). выводы 1. Чтобы обеспечить эффективное выполнение сложной наукоемкой работы, необходимо иметь ее описание. 2. Существующие способы описания сложных трудовых процессов отстали от жизни и не удовлетворяют современным требованиям. 3. Отсутствие хороших описаний — важный недостаток нашей цивилизации. 4. Сложные трудовые процессы (в том числе, бизнес-процессы) можно рассматривать как своеобразные алгоритмы. 5. Чтобы организовать массовое производство хороших описаний для сложных трудовых процессов, нужно иметь специальный алгоритмический язык. Язык, доступный для широкого круга специалистов, не имеющих никакого понятия об алгоритмах и программах. 6. В качестве такого языка целесообразно использовать язык ДРАКОН. 7. Согласно нашей гипотезе широкое применение языка ДРАКОН для описания структуры сложной деятельности и наукоемких трудовых процессов позволит значительно улучшить работу ума и повысить эффективность развития общества.
Глава АЛГОРИТМЫ В БИОЛОГИИ 15 Визуализация дает возможность увидеть невидимое. Она интенсифицирует процесс научного открытия. И способствует рождению глубоких и неожиданных озарений. Во многих областях фундаментальной науки визуализация уже революционизировала те способы, с помощью которых ученые делают науку. Б. Шульц [1] РУКОТВОРНЫЕ И НЕРУКОТВОРНЫЕ АЛГОРИТМЫ До сих пор мы рассуждали об алгоритмах, которые придуманы человеком. Но существуют и иные процессы, к созданию которых человек не имеет отношения. Мы имеем в виду «естественные алгоритмы», созданные Господом Богом (точнее, порожденные эволюцией природных процессов и реализованные в живых существах). Планета Земля — царство жизни. В каждом живом организме происходят процессы невообразимой сложности, необходимые для поддержания жизни. Рассматривая жизнь с точки зрения молекулярной биологии, генетики и других биологических наук, мы сталкиваемся со сложнейшими процессами, которые можно и нужно назвать алгоритмами. Какова роль человека в этих процессах? Она очевидна. Человек не проектирует и не создает эти алгоритмы. Он всего лишь ИЗУЧАЕТ их. Человечество заинтересовано в том, чтобы биологические науки продвигались вперед быстрыми темпами. От чего зависит скорость познания естественных алгоритмов? Во многом, от формы представления алгоритмических процессов. К сожалению, представители биологических наук не владеют эффективными способами записи естественных алгоритмов. Нынешний биологический язык отстал от жизни и превратился в тормоз развития науки. По нашему мнению, язык ДРАКОН позволит в значительной мере преодолеть отставание.
270 Часть ш- примеры алгоритмов для различных отраслей знаний ВИЗУАЛИЗАЦИЯ БИОЛОГИЧЕСКИХ АЛГОРИТМОВ Чем глубже человеческий разум проникает в тайны живой материи, тем яснее становится, что живые существа во многих случаях ведут себя, как информационные биомашины, перерабатывающие информацию с помощью биоалгоритмов. Опыт показывает, что биологические алгоритмы очень похожи на самые обычные алгоритмы, с которыми мы постоянно сталкиваемся в технике. А раз так, язык ДРАКОН может стать удобным средством для выражения и накопления знаний об информационных процессах, протекающих в живых организмах. Для иллюстрации приведем цитату из известной биологической книги, описывающую один из таких алгоритмов. «Рассмотрим изменения, происходящие в организме жабы в сезон размножения. Глаза жабы воспринимают свет и передают эту информацию в мозг, который определяет, что продолжительность светового дня увеличивается. Гипоталамус направляет в гипофиз соответствующие рилизинг- факторы. Гипофиз начинает выделять в кровь различные гормоны, включая фолликулостимулирующий и лютеинизирующий. Когда семенники и яичники «обнаруживают» их присутствие в крови, они начинают увеличиваться в размерах, продуцировать гаметы, а также выделять собственные гормоны и среди них — половые: тестостерон и эстроген. Реагируя на половые гормоны, мозг посылает нервные импульсы к мышцам — животное начинает поиск места для размножения и брачного партнера. Так, благодаря сложному взаимодействию органов чувств, нервов, мозга, мышц и эндокринных желез животное адекватно реагирует на смену сезона — наступление весны» [2]. Описание этого алгоритма на языке ДРАКОН показано на рис. 149. Чтобы не утомлять читателя громоздкими биологическими терминами, автор несколько упростил текст и снабдил его некоторой долей юмора. Следует подчеркнуть, что реальные биологические алгоритмы исключительно сложны. Традиционная для биологической литературы текстовая форма представления алгоритмических знаний вносит неоправданные трудности для читателей и является устаревшей. По мнению автора, ДРАКОН может оказать существенную помощь биологам. Создание бумажных альбомов и компьютерных библиотек биологических дракон-схем даст возможность улучшить форму представления биологических знаний. Сделать ее более строгой и наглядной. Выявить и устранить алгоритмические пробелы в знаниях. Укрепить позиции информационной биологии. Облегчить дальнейшее исследование таинственного механизма функционирования живых организмов.
Глава 15. АЛГОРИТМЫ В БИОЛОГИИ 271 КИШЕЧНАЯ ПАЛОЧКА И ФАГ ЛЯМБДА Рассмотрим более сложный пример биологического алгоритма. Бактериофаг (сокращенно фаг) — это вирус, который пожирает бактерии. Таких вирусов очень много. Один из них, фаг Х> при некоторых условиях уничтожает бактерии, которые живут в кишечнике. Эти бактерии называются «эшерихия коли», что значит «кишечная палочка». Фаг и бактерия похожи на карлика и великана. Фаг крохотный, а бактерия громадная. И тем не менее, победа всегда достается фагу. Фаг похож на клизму с острым концом. Этим кинжалом он легко протыкает стенку кишечной бактерии. В шаре «клизмы» находится главное оружие фага — его генетический код. Через роковой прокол этот код, подобно диверсанту со взрывчаткой, проникает внутрь бактерии и «взрывает» ее. Рассмотрим вопрос подробнее. ДВА НАПРАВЛЕНИЯ ВЗАИМОДЕЙСТВИЯ ФАГА И БАКТЕРИИ В самом начале фаг прокалывает оболочку бактерии (рис. 150). Затем генетический код фага через образовавшееся отверстие проскальзывает внутрь бактерии (рис. 150а). Дальнейшие события в бактериальной клетке могут развиваться двумя путями. РАЗМНОЖЕНИЕ ФАГОВ И ГИБЕЛЬ БАКТЕРИИ В первом случае внутри клетки происходит интенсивное размножение фагов. Этот процесс идет очень быстро. Примерно через 45 минут происходит гибель бактерии. Внутри бактерии скапливается огромное число фаговых частиц. Эти частицы в буквальном смысле разрывают бактериальную клетку. Из лопнувшей бактерии высвобождаются около 100 фагов (рис. 1505). Алгоритм пожирания бактерии фагами показан на рис. 151 [3]. ЗАТИШЬЕ ПЕРЕД БУРЕЙ И ГИБЕЛЬНОЕ ДЕЙСТВИЕ УЛЬТРАФИОЛЕТА Во втором случае в дело вступают тормозящие вещества. Они запрещают размножение фагов. Вместо этого генетический код фага замирает и «прячется» внутри генетического кода бактерии. На рис. 150в показана ситуация, когда фаг становится пассивным. Он не размножается и не причиняет бактерии никакого вреда. В этот период бактерия спокойно размножается. И спрятанный в ней фаг пассивно размножается вместе с нею. Если же в этот момент на бактерию и на фаг попадет ультрафиолето-
272 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ С Как и почему размножаются жабы? J Как жаба узнает, что пришла весна Глаза жабы воспринимают свет и передают в мозг сигнал: Вижу свет! Мозг жабы вычисляет продолжительность светового дня (Световой день увеличился? V— . / не нет да — Ага! — радостно восклицает жаба. — Это значит, что пришла весна — время любви. Пора размножаться! Однако половые органы жабы еще не готовы к размножению. В семенниках жабы-джентльмена нет сперматозоидов. В яичниках жабы-леди отсутствуют яйцеклетки. К тому же половые железы жабы ничего не знают о том, что пришла весна. Они ждут, что мозг сообщит им об этом. Как мозг жабы передает приказ в половые железы Как мозг жабы передает приказ в половые железы Мозг отдает команду и специальный орган (гипофиз) выбрасывает в кровь гормон-приказ: Подготовиться к размножению! Гормоны - информационные молекулы, которые служат для передачи сообщений. Гормон-приказ - «телеграмма», которую мозг посылает в половые органы. I Кровь переносит гормон-приказ к семенникам и яичникам I да Семенники увеличиваются в размерах и вырабатывают мужские половые клетки (сперматозоиды) Яичники увеличиваются в размерах и вырабатывают женские половые клетки (яйцеклетки) Семенники и яичники обнаружили в крови гормон-приказ: Подготовиться к размножению! / нет Это означает, что половые железы жабы готовы к размножению. Однако мозг ничего об этом не знает. Он ждет от желез ответного сигнала. Как половые железы жабы передают в мозг ответ
Глава 15. АЛГОРИТМЫ В БИОЛОГИИ 273 Рис. 149. Как размножаются жабы? Использование языка ДРАКОН для описания биологических процессов Как половые железы жабы передают в мозг ответ 1 Как мозг управляет поведением жабы при поиске жениха и невесты Семенники и яичники выбрасывают в кровь гормон-ответ: ПолЬвыежелезы ;.. ^ готовы'к размножению Кровь переносит гормон- ответ от половых желез к мозгу Мозг обнаружил в крови гормон-ответ? '..¦•"¦ : s Половые железы готовы к размножению да Обратите внимание! Передача команд и сообщений в организме жабы осуществляется двумя способами: • через кровеносные сосуды с помощью информационных молекул (гормонов); • по нервным волокнам (нервам) с помощью электрических сигналов. нет Как мозг управляет поведением жабы при поиске жениха и невесты i Мозг жабы передает по нервам, идущим в мышцы, серию приказов: Найти брачного партнера! I Подчиняясь приказам, мышцы приходят в движение. Это значит, что жаба-леди начинает поиск жениха, а джентельмен — невесты Невеста и жених встречаются в укромном месте и вступают в брачные отношения Мужские и женские половые клетки называются гаметами I Женская гамета (яйцеклетка) и мужская гамета (сперматозоид) соединяются и образуют оплодотворенную яйцеклетку, которая называется «зигота» Я — гамета, ты — гамета, Я люблю тебя за это. Так давай соединимся И в зиготу превратимся! Образование зиготы означает, что на белом свете свершилось великое чудо зачатия и возникло новое живое существо Зигота начинает стремительно расти и вскоре превращается в прекрасную взрослую жабу, очень похожую на свою маму- леди и папу-джентельмена ( Конец
274 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ Фаг X похож на клизму с острым концом Это генетический код фага X Острый конец «клизмы» прокалывает оболочку бактерии ^C Бактерия / Это генетический код бактерии Рис. 150. Острый конец фага X прокалывает оболочку бактерии Пустая оболочка фага X остается снаружи бактерии Генетический код фага X проникает сквозь прокол внутрь бактерии Это генетический код бактерии Рис. 150а. Генетический код фага X проникает сквозь прокол внутрь бактерии
Глава 15. АЛГОРИТМЫ В БИОЛОГИИ 275 РАЗМНОЖЕНИЕ ФАГА И ГИБЕЛЬ БАКТЕРИИ Внутри бактерии образуется множество новых фагов. Фаги разрывают стенку бактерии. Бактерия гибнет. Генетический код фага X проникает внутрь бактерии и начинает стремительно размножаться Каждый фаг обозначен кружком Это генетический код бактерии Рис. 1506. Размножение фага X внутри бактерии и гибель бактерии ФАГИ НЕ РАЗМНОЖАЮТСЯ. ГЕНЕТИЧЕСКИЙ КОД ФАГА ВСТРОЕН В КОД БАКТЕРИИ Это генетический код фага (темная полоса) Генетический код фага (темная полоса) стал частью генетического кода бактерии (белая полоса) Это генетический код бактерии (белая полоса)! Рис. 150в. Размножение фагов не происходит. Генетический код фага (темная полоса) пассивно покоится внутри кода бактерии (белая полоса).
276 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ С Как фаг убивает бактерии Проникновение фага в бактерию Фаг присоединяется хвостовым отростком к поверхности бактерии Фаг прокалывает острым концом стенку бактерии Фаг вводит свой генетический код внутрь бактерии Генетический код внутри бактерии превращается в нового фага Размножение фага и гибель бактерии Размножение фага и гибель бактерии Фаг быстро размножается внутри бактерии \ Прошло / 45 минут/ Бактерия разрывается и погибает 100 новых фагов вырываются наружу через стенки лопнувшей бактерии Каждый из 100 новых фагов атакует новые бактерии и убивает их В ближайшей окрестности остались живые бактерии? нет * ^ , . « ¦ , ;,' Проникновение фага в бактерию Рис. 151. Как фаг уничтожает бактерии
Глава 15. АЛГОРИТМЫ В БИОЛОГИИ 277 С Как фаг меняет свое поведение под действием ультрафиолетового света Проникновение фага в бактерию Фаг присоединяется хвостовым отростком к поверхности бактерии Фаг прокалывает острым концом стенку бактерии Фаг вводит свой генетический код внутрь генетического кода бактерии Фаг становится пассивным. Он не размножается и не причиняет бактерии никакого вреда Бактерия размножается. И спрятанный в ней фаг пассивно размножается вместе с нею Ультрафиолетовый свет вызывает размножение фага Ультрафиолетовый свет активирует фаг Фаг начинает быстро размножаться внутри бактерии \ Прошло / 45 минут / Бактерия разрывается и погибает 100 новых фагов вырываются наружу через стенки лопнувшей бактерии Каждый из 100 новых фагов атакует новые бактерии и убивает их В ближайшей окрестности остались живые бактерии? нет Г^пь ] свет в I : Да Ультрафиолетовы I свет вызывает размно жение фага Рис. 151а. Как фаг меняет свое поведение под действием ультрафиолетового света
278 Часть IIL примеры алгоритмов для различных отраслей знаний вый свет, произойдет катастрофа. Ультрафиолет резко меняет свойства фага. Мирное сосуществование кончается. Фаг «просыпается» и начинает быстро размножаться внутри бактерии. Через 45 минут бактерия разрывается и погибает. И 100 новых фагов вырываются наружу через стенки лопнувшей бактерии. Таким образом, мы рассмотрели два алгоритма: • фаг уничтожает бактерии (рис. 151); • имеет место «мирное существование» фага и бактерии, которое заканчивается при попадании ультрафиолета (рис. 151а). НУЖНЫ НОВЫЕ СРЕДСТВА ДЛЯ ОПИСАНИЯ БИОЛОГИЧЕСКИХ АЛГОРИТМОВ Чтобы биология как наука интенсивно развивалась, она должна овладеть новым языком для описания биологических знаний. Этот язык должен быть очень хорошим. Он должен позволять создавать высококачественные биологические алгоритмы — доступные, удобные, легкие для понимания. Существуют ли такие алгоритмы? Нет, не существуют! Это вносит значительные трудности в работу биологов. Имеющиеся биоалгоритмы, как правило, имеют низкое качество. Они изложены трудным, запутанным, языком. Они непригодны для эффективного обучения, так как требуют слишком большого времени для понимания. Чтобы устранить недостаток, нужен новый язык, который способен внести в алгоритмы ясность. ВЫВОДЫ 1. Алгоритмы удобно разделить на две группы: • рукотворные (создаваемые человеком и выполняемые компьютером или вручную); • нерукотворные (биологические) алгоритмы. 2. В настоящее время отсутствуют эффективные способы описания биологических алгоритмов. Язык ДРАКОН позволяет устранить этот пробел. 3. До сих пор различные типы алгоритмов (рукотворные и нерукотворные) было принято описывать по-разному, с помощью различных и неудобных средств. 4. Язык ДРАКОН устраняет этот разнобой. Он позволяет описывать все алгоритмы ЕДИНООБРАЗНО, стандартным способом, с помощью одной и той же системы чертежей (одной и той же графической нотации).
Глава 16 АЛГОРИТМЫ В СЕЛЬСКОМ ХОЗЯЙСТВЕ ...очевидно, что графический образ- картинка обращается, прежде всего, к нашему образному мышлению, к нашей интуиции... Можно сказать, что графический образ является инструментом прямого воздействия на интуицию человека. Александр Зенкин [1] ПОМИДОРЫ НА САДОВОМ УЧАСТКЕ Выращивание помидоров многим кажется очень простым, а то и вовсе пустяковым делом. Так ли это? С позиций агрономической науки это, конечно, не так. Чтобы получить высокий урожай аппетитных плодов, необходимо тщательно соблюдать технологию посева и ухода за помидорами. А она отнюдь не проста. Чтобы убедиться в этом, рассмотрим пример. На рис. 152 показана технология (алгоритм) выращивания помидоров на садовом участке. Алгоритм содержит девять процедур. Три из них раскрыты на рис. 153-155. На рис. 153 изображен алгоритм «Подготовка семян для проращивания». На рис. 154 — алгоритм «Посев семян в ящики с грунтом». На рис. 155 — алгоритм «Уход за сеянцами в ящике». Алгоритмы, показанные на рис. 152—155, заимствованы из книги [2], написанной биологом Валентиной Марценюк. В этой книге технология выращивания помидоров изложена очень подробно. Все технологические операции показаны в виде развернутых дракон-схем. Представленные в книге [2] материалы убедительно показывают, что агрономические процедурные знания могут быть эффективно описаны с помощью языка ДРАКОН.
280 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ С Технология выращивания помидоров на садовом участке Подготовка и посев семян Уход за сеянцами и рассадой Подготовка семян для проращивания Этот алгоритм раскрыт на рис. 153 Посев семян в ящики с грунтом для проращивания Этот алгоритм раскрыт на рис. 154 Уход за сеянцами алгоритм раскрыт на рис. 155 Пикировка сеянцев Уход на рассадой Уход за сеянцами и рассадой Высадка рассады на грядки в теплице Уход за растениями в теплице Сбор урожая и получение семян Заключительые осенние работы Конец Рис. 152. Технология выращивания помидоров на садовом участке ДРАКОН-СХЕМЫ ПОЛЕЗНО ДОПОЛНИТЬ РИСУНКАМИ И КАРТИНКАМИ На обложке книги [2] сказано: «Точное, последовательное и наглядное описание каждого шага, ведущего к обильному урожаю». Каким образом достигается эта цель? Секрет прост. Валентина Марценюк широко использует иллюстрации. Каждая дракон-схема буквально окружена хороводом рисунков и картинок. Причем каждая иллюстрация расположена очень умно — она буквально прижата к той дракон- иконе, содержание которой нужно объяснить. Что это дает? Предположим, в иконе говорится о марлевом мешочке с семенами, к которому приделан ярлычок (рис. 153). Как только читатель пробежал эти слова, он тут же по соседству ВИДИТ этот мешочек, из под
Глава 16. АЛГОРИТМЫ В СЕЛЬСКОМ ХОЗЯЙСТВЕ 281 Подготовка семян для проращивания Выбрать сорт томатов для выращивания л , Вырезать из бинта или марли квадрат размером 10 х 10 см В центр квадрата из марли положить семена отобранного сорта I Подготовить ярлычок (бумажную полоску шириной 1 см) На ярлычке карандашом написать название сорта 1 Соединить противоположные углы марлевого квадрата Завязать семена с помощью нитки или резинки наподобие мешочка Под резинку просунуть ярлычок с надписью Записать в рабочем журнале, какой сорт вы отобрали для посадки нет ^Отбор сортов закончен^— да Обработка семян J \ Выдержка 2 часа \ Выдержка 20 минут \Выдержка / 2 суток jr*^ Выдержка sJ-З суток. Выдержка 5 часов Обработка семян Сложить марлевые мешочки с семенами в чашку Залить мешочки горячей водой при темературе 60° Выдержать 2 часа, периодически подливая воду для поддержания температуры Залить мешочки 1%-м раствором марганца для обеззараживания на 20 минут Aг марганца на 100 г воды) Промыть под несильной струей теплой воды Положить семена в зольный раствор A столовая ложка золы на 1 литр воды) Поставить семена на 2 суток в теплое место для набухания Положить семена на 1-3 суток в поддон холодильника (под морозилку) для яровизации и закаливания Поставить чашку с мешочками на 5 часов у батареи отопления Q Конец Рис. 153. Подготовка семян для проращивания
282 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ С Посев семян в ящики с грунтом для проращивания Смешать: • 1 часть перегноя • 1 часть плодородной огородной почвы или чернозема Добавить минеральные удобрения из расчета на 10 кг смеси: • 15г сульфата аммония • Юг аммиачной селитры • 40г суперфосфата • Юг хлористого калия Укладка грунта в ящик Укладка грунта в ящик X Высадка семян iгрунт Засыпать грунт в небольшой деревянный или пластмассовый ящик глубиной 6...8 см Достать семена из марлевого мешочка Высадить семена в бороздку Хорошо увлажнить почву в ящике • Посадку каждого сорта начинать с новой бороздки • Расстояние между семенами в бороздке 1...1.5 см Почва слишком рыхлая? Глубина заделки семян 1 см Слегка примять ее ровной плоской дощечкой Проделать (с помощью линейки) на поверхности почвы параллельные бороздки на расстоянии 3...4 см друг от друга и глубиной 1 см Присыпать семена землей слоем 0,5...0,7 см Остались мешочки с семенами? да. Пронумеровать бороздки (на стенке ящика), чтобы знать, куда вы будете высаживать семена Слегка спрыснуть посадку из пульверизатора слабо-розовым раствором марганца Если нужно, подготовьте для посадки несколько ящиков с грунтом т " ':•'- Т" • Прикрыть ящик куском пленки для сохранения влажности почвы Высадка семян в грунт Поставить ящик в затемненное теплое место (температура 22...27°С) I Конец J Рис. 154. Посев семян в ящики с грунтом для проращивания
Глава 16. АЛГОРИТМЫ В СЕЛЬСКОМ ХОЗЯЙСТВЕ 283 Уход за сеянцами в ящике Стадии развития сеянцев от посева до пикировки • Посев 5... 15 марта • Через 3...7 дней после посева появляются всходы. Всходы имеют вид «петелек» • Через 8...17 дней после посева появляются семядольные листья • Через 30...35 дней после посева появляются настоящие листья B...3 листочка). Это говорит о готовности сеянцев для пикировки Начальный уход за сеянцами Начальный уход за сеянцами Полив и удобрение сеянцев Всходы в ящике появились? Удалить с ящика покровную пленку Спрыснуть сеянцы теплой водой из пульверизатора Поставить ящик с сеянцами в хорошо освещенное место (на подоконник) Избегать попадания на сеянцы прямых солнечных лучей, чтобы защитить их от увядания Отслеживать температурный режим: • Дневная температура +20...25°С • Ночная температура 1013°С Такой температурный режим способствует закалке растений и соответствует природным условиям их жизни Полив и удобрение сеянцев • Поливать сеянцы следует умеренно примерно один раз в неделю • Избегать размывания почвы В одну неделю - полить раствором золы =L Подготовка раствора золы: • Столовую ложку золы растворить в 1-м литре воды • Дать постоять 1 сутки В следующую неделю - полить розовым раствором марганца На третью неделю - полить раствором микроэлементов и минеральных веществ или раствором суперфосфата (из расчета 1 чайная ложка на 1л воды) Появились 2...3 настоящих листочка? П5 нет Конец тттжтттттт Рис. 155. Уход за сеянцами в ящике
284 Часть IIL примеры алгоритмов для различных отраслей знаний резинки которого лихо торчит вверх бумажный ярлычок. Еще пример. На рис. 154 в первой ветке говорится о том, что «всходы имеют вид петелек». Рядом нарисованы эти самые петельки. Дальше речь идет о семядольных и настоящих листьях. Что это за листья такие? У читателей Валентины Марценюк такой вопрос не возникает. В ее книжке прекрасно видны все эти листья. Так что отличие между семядольными и настоящими листьями сразу бросается в глаза. Читатель не затрачивает никаких усилий, чтобы уяснить эти понятия. ГРАФИЧЕСКИЙ КОММЕНТАРИЙ Дракон-схема — это графический образ. Естественно возникает вопрос: если уж речь зашла о графике, то надо использовать ее не частично, а в полной мере. Такую задачу можно решить с помощью иконы «комментарий». В ДРАКОНе возможен не только традиционный (текстовый), но и более наглядный (графический) комментарий. Пример приведен на рис. 156. Там же приведен и комментарий в виде математических формул (формульный комментарий). ВЫВОДЫ 1. Язык ДРАКОН способен изображать биологические алгоритмы. Это позволяет использовать его в сельском хозяйстве — для описания алгоритмов, которые используются в агрохимических и агрофизических науках. 2. Другим важным приложением ДРАКОНа является применение его для наглядного описания сельскохозяйственных технологий.
Глава АЛГОРИТМЫ В СРЕДНЕЙ ШКОЛЕ 17 Схематизация [diagramming] — это язык, который имеет большое значение как для четкого мышления, так и для улучшения коммуникации между людьми. Джеймс Мартин, Карма Мак-Клюр [1] ДРАКОН ПОМОГАЕТ ИЗУЧАТЬ МАТЕМАТИКУ Присутствуя на уроке в одной из московских школ, автор наблюдал за мучениями мальчика, решавшего задачу, показанную в иконе-комментарий на рис. 156. Чувствовалось, что он знает все формулы и догадывается об общем ходе решения. Тем не менее, у него никак не складывалась общая картина. Он не мог четко разбить задачу на отдельные этапы и выстроить из них упорядоченную последовательность, ведущую к победе. Почему? Что ему мешало? Заглянув через плечо, автор увидел в тетради живописную мазню. Правильные формулы прыгали по странице, играя в чехарду. Все было перечеркнуто и перевернуто вверх дном. Короче, это была плохая, неэргономичная, неупорядоченная зрительная сцена. Немудрено, что парень вконец запутался. Обдумывая ситуацию, автор пришел к следующим предположениям. • Во-первых, нужно эргономизировать зрительную сцену, придав ей форму дракон-схемы. • Во-вторых, школьника нужно специально обучить, чтобы он запомнил визуальный образ дракон-схемы. • В-третьих, решение задачи должно сводиться к заполнению пустых клеточек дракон-схемы. Тогда запись решения волей-неволей окажется упорядоченной. А чехарда станет попросту невозможной. • В-четвертых, нужно учить школьников не только разбивать ход ре-
286 Часть IIL ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ шения на отдельные этапы (действия), но и придумывать для них краткие и точные заголовки. • В-пятых, следует объяснить, что эти заголовки следует записывать в иконах «имя ветки» и «комментарий». На основании этих предположений автор по согласованию с учительницей изобразил решение, как показано на рис. 156. Чем же отличается решение на рис. 156 от традиционной записи? Выделим три наиболее важных отличия. • Зрительная сцена имеет предельно четкую структуру. Она упорядочена и по вертикали, и по горизонтали. • Все без исключения этапы решения и формулы имеют разъясняющие словесные заголовки. Последние записываются не где угодно, а в специальных рамочках, каждая из которых «знает свое место». • Обеспечена симультанность восприятия: в одном визуальном поле находятся: 1) условие задачи; 2) решение; 3) ответ. ДРУГИЕ МАТЕМАТИЧЕСКИЕ ПРИМЕРЫ На рис. 157 представлена дракон-схема, описывающая: решение квадратного уравнения. Она позволяет не только найти корни уравнения, но и проверить их с помощью формул Виета (см. ветку «Проверка корней»). Рис. 158 показывает, что с помощью языка ДРАКОН можно упростить алгебраическое выражение. Секрет задачи в том, что она имеет много ответов. ДРАКОН позволяет упорядочить поиск ответов и не упустить ни одного из них. ДРАКОН ПОМОГАЕТ ИЗУЧАТЬ ХИМИЮ На рис. 159 показана схема простейшего химического опыта — определение кислотности раствора. Если лакмусовая бумажка, погруженная в раствор, краснеет, значит, раствор кислый. Если синеет — щелочной. Если цвет бумажки не изменился — раствор нейтральный. Рассмотрим более сложный химический опыт (рис. 160). Учитель берет одно из шести химических удобрений и помещает его в колбу. Что в колбе — неизвестно. Это может быть аммиачная селитра, натриевая соль, сульфат аммония, суперфосфат, сильвинит или калийная соль. Нужно выполнить эксперимент, позволяющий узнать, какое именно вещество находится в колбе. Опыт делают в два этапа. Сначала идут подготовительные действия: 1. Положить удобрение в три сосуда. 2. В первый сосуд добавить серную кислоту H2SO4. 3. Во второй сосуд добавить раствор хлорида бария BaCl 4. В третий сосуд добавить щелочь.
Глава 17. АЛГОРИТМЫ В СРЕДНЕЙ ШКОЛЕ 287 Вычисление площади круга с вырезом Вычисление площади круга и треугольника Вычисление искомой площади S Задан круг радиуса R, из которого вырезан прямоугольный треугольник с катетами а и Ь. Надо Найти площадь S заштрихованной фигуры Вычисление площади круга S, Si = tcR Вычисление площади прямоугольного треугольника S2 I Ответ Площадь заштрихованной фигуры равна 52 = Т Вычисление площади круга и треугольника Вычисление искомой площади S Рис. 156. Вычисление площади круга с вырезом
с Решение квадратного уравнения ах2 + вх + с = О ] Вычисление 1 корней /Дискриминант / D = b2 -4ас / D>0 D<0 -b + Vb2 — 4ac 2a = x2 = - 2a -b-v/b2— 4ac 2a x- = -b + iV4ac-b2 2a - ь - i v4ac - b2 2a Проверка корней Проверка корней i^—г/ нет да <с Х'Х2= ~1Г нет Уравнение решено правильно ( Конец ) Уравнение решено неправильно нет Завершение ГВы^жсление! |Завер-{ | корней I ] шение [ Рис. 157. Решение квадратного уравнения с проверкой по формулам Виета
(Упрос Упростить выражение ) Введем обозначение Z= ш Знаете ли вы, что ... с помощью этой простенькой задачки два коварных экзаменатора «зарезали» сорок тысяч абитуриентов нет да Z = -a - b -' Z = -a + b -" < a-b^O > да Если F Ответ \ I нет | Z = 2a-2b | Г Если I Ответ ' 2a-2b 1 < a-b^O > |да | Z = 2b I Г Если I a J^O jb < D : Ответ j ».' ' I ^ нет < [ а-b^O > f Ответа нет ибо условия противоречат I ДРУГ другу да Ответа нет \ ибо условия " противоречат .: ' друг другу 5 нет Z = -2Ь | \ Если | а<0 ' Ответ ~2& 1 I6T |да | Z = -2а + 2Ь | | Z = 0 | Если Ответ \ -2а ¦ 2bv Если [ - а<0 1 Ответ i 5 ( Конец ) Рис. 158. Как упростить алгебраическое выражение
290 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ После этого анализируются результаты и определяется неизвестное вещество на основании таблицы 2. Таблица 2 Название вещества Аммиачная селитра Натриевая селитра Сульфат аммония Суперфосфат Сильвинит Калийная соль ^ :¦>.< Внешний ¦/< /"ВИД •.; вещества Белые кристаллы Бесцветные кристаллы Светло-серые кристаллы Светло-серый порошок Розовые кристаллы Бесцветные кристаллы Что мы видим или ощущаем, если в данное вещество > с * > * ' * « добавит^:,; > > > * v;>\ J h2so4 Бурый газ Бурый газ — — — — BaCl;; — Помутнение Белый осадок Белый осадок — — Щелочь Запах аммиака — Запах аммиака — — — Дракон-схема на рис. 160 представляет собой простейшую экспертную систему. Она работает так. Рабочая точка процесса движется от иконы «заголовок» к иконе «конец». По мере движения иконы и соединительные линии вспыхивают и горят на экране более ярким светом, выделяя пройденную часть пути. Когда процесс дошел до иконы-вопрос «При взаимодействии с H2S0^ выделяется бурый газ?», данная икона начинает мерцать, привлекая к себе внимание и требуя ответа. Реагируя на это событие, ученик подводит курсор к нужному ответу (да или нет) и щелкает клавишей мыши. Икона перестает мерцать и (при ответе «да») загорается путь, ведущий к иконе «При взаимодействии со щелочью ощущается запах аммиака?», которая начинает мерцать. Далее события повторяются, пока на экране не загорится искомое название удобрения. С точки зрения процесса познания, проблема распознавания удобрения состоит из трех частей: • постановка задачи; • описание действий с исследуемым веществом и реактивами; • логический анализ результатов опыта. В первой ветке даны постановка задачи (икона «комментарий») и описание последовательности ручных манипуляций (четыре иконы «дейс-
Глава 17. АЛГОРИТМЫ В СРЕДНЕЙ ШКОЛЕ 291 Определение кислотности раствора отлей в пробирку 1 миллилитр раствора U Опусти в пробирку лакмусовую бумажку Не изменился Г >' ¦"::- Раствор НЕЙТРАЛЬНЫЙ Рис. 159. Как определить кислотность раствора твие»). Во второй ветке демонстрируется логический анализ и получение ответа. Исключительно важно, что все три части проблемы предъявляются зрителю в одном визуальном поле. Благодаря этому обеспечивается си- мультанизация восприятия и улучшение работы ума. Известно, что пользователю далеко не безразлично, каким образом экспертная система приходит к своему решению. Идя навстречу таким пожеланиям, современные экспертные системы помогают пользователю не только принимать решения, но и позволяют выявить мотивы их принятия через систему объяснения. Более того, специалисты считают, что от наличия или отсутствия в системе объяснительной функции зависит право этой системы называться экспертной. Исходя из этого, многие системы разрешают пользователю задавать вопрос «Почему?». После чего «раскрывают карты» и в словесной форме показывают пользователю ход своих рассуждений. Это хорошо, но мало. В ряде приложений идеальным решением можно назвать такое, при котором система предъявляет пользователю всю
с Распознавание неизвестного химического удобрения Язык ДРАКОН позволяет описывать: 1) физические действия A-я ветка), 2) информационные действия B-я ветка) Проведение химических реакций Дано Неизвестное химическое удобрение и три реактива: H2SO4, BaCI и щелочь. Надо Узнать название удобрения Определение названия удобрения При взаимодействии выделяется бурый Положить удобрение в три сосуда с H2SO4 \ газ? / нет ;да При взаимодействии с BaCI выпадает белый осадок ? \ 1®т да /Цветкристаллов / удобрения / ГЖц В первый сосуд добавить H2SO4 При взаимодействии \нет 1 Розовые й Бесцветные"] При взаимодействии р д со щелочью ощущается у~ со щелочью ощущается г запах аммиака ? Во второй сосуд добавить BaCI В третий сосуд добавить щелочь Определение названия удобрения Рис. 160. Распознавание неизвестного химического удобрения
Глава 17. АЛГОРИТМЫ В СРЕДНЕЙ ШКОЛЕ 293 Ч ' С Правописание отрицательных местоимений Примеры отрицательных местоимений некого, никто, никакой, нечего, ничто, ничей ;•;¦< нет Первый слог местоимения ударный? Под ударением пиши «не» Без ударения пиши «ни» Примеры Н0КТО Нечего Примеры Ничто Ничей Местоимение имеет предлог? нет Пиши местоимение раздельно в три слова Пиши местоимение слитно с «не» и «ни» ;^.к8Яй..ь;йпД^ Примеры Некого Никаким Конец J) Рис. 161. Правила написания отрицательных местоимений
(Как узнать Л стихотворный размер J Существует пять стихотворных размеров: хорей, ямб, дактиль, амфибрахий, анапест J т Язык ДРАКОН позволяет описывать некоторые правила анализа произведений искусства, например стихотворений го /Сколько слогов У в стихотворной стопе / Два Три л ш Какой слог является ударным 7 Какой слог является ударным Ответ ХОРЕЙ это двухсложный стихотворный размер с ударением на первом слоге Ответ ЯМБ это двухсложный стихотворный размер с ударением на втором слоге Ответ ДАКТИЛЬ' это трехсложный стихотворный размер с ударением на первом слоге АМФИБРАХИЙ это трехсложный стихотворный размер с ударением на втором слоге Третий Ответ АНАПЕСТ это трехсложный стихотворный размер с ударением на третьем слоге О -о о CD -а Пример Эники-бе'ники Ели вареники. Энмки-беники Клец! Вверху одна Горит звезда. Мой ум она Манит всегда Румяной зарею Покрылся восток. В селе за рекою Потух огонек. Ах, ты зверь, ты зверина Ты скажи свое имя. Ты не смерть ли моя ? Ты не съешь ли меня ? Ветер, ветер! Ты могуч, Ты гоняешь стаи туч. m OJ DC > Рис. 162. Изучаем правила поэзии. Как определить стихотворный размер?
Глава 17. АЛГОРИТМЫ В СРЕДНЕЙ ШКОЛЕ 295 панораму возможных логических выводов. На этой панораме выделяется (яркостью или цветом) маршрут, т.е. цепочка конкретных умозаключений, ведущих к выбранному ответу. ДРАКОН-система реализует именно этот подход (рис. 160). ДРАКОН ПОМОГАЕТ ИЗУЧАТЬ ГУМАНИТАРНЫЕ ПРЕДМЕТЫ Приведем еще пару примеров, подтверждающих универсальность и «всеядность» ДРАКОНа. Рисунок 161 иллюстрирует использование языка для изображения грамматических правил. На рис. 162 показан пример формализации простейших правил анализа стихотворений. ВЫВОДЫ 1. Учась в школе, ученик получает знания из различных областей, или, как говорят, он изучает несколько предметов. Между этими предметами существуют связи, но ученик, как правило, их не замечает. 2. Чтобы устранить недостаток, надо специально объяснить школьникам, в чем именно заключаются межпредметные связи. 3. В настоящее время отсутствуют эффективные способы объяснения межпредметных связей. 4. Язык ДРАКОН позволяет частично устранить этот пробел. Он показывает, что во многих предметах для решения задач используются алгоритмы. Представление алгоритмов в виде наглядных дракон-схем облегчает для школьника выявление и уяснение сути межпредметных связей.
Глава АЛГОРИТМЫ И ЗАДАЧИ ГОСУДАРСТВЕННОГО, МУНИЦИПАЛЬНОГО И КОРПОРАТИВНОГО УПРАВЛЕНИЯ 18 Графический язык ... организует естественный язык вполне определенным и однозначным образом, за счет чего ... позволяет описывать системы, которые до недавнего времени не поддавались адекватному представлению. Дэвид Марка, Клемент МакГоуэн [1] ПОСТАНОВКА ПРОБЛЕМЫ Современные системы государственного, муниципального и корпоративного управления чрезвычайно сложны и трудны для понимания. Беда в том, что проблема понимания обычно недооценивается. Это порождает неприятные последствия. Непонимание приводит к принятию неоптимальных, неэффективных или ошибочных управленческих и иных решений. Неудачные решения влекут за собой экономические, политические, социальные, экологические и иные потери. В результате управленческих ошибок, вызванных недопониманием, эффективность функционирования общества ощутимо снижается. Подобная картина наблюдается во всем мире. Отсюда следует предположительный Вывод. Улучшение понимания решаемых задач может привести к заметному повышению эффективности общества. Каким образом можно улучшить понимание? Исчерпывающий ответ пока не найден. Это связано с тем, что проблема понимания сложна и зависит от многих факторов.
Глава 18. АЛГОРИТМЫ И ЗАДАЧИ УПРАВЛЕНИЯ 297 В частности, понимание решаемой задачи зависит от качества ее письменного описания. Можно предложить следующий Постулат. Чем выше когнитивно-эргономическое качество письменного текста (описывающего сложные управленческие и иные задачи), тем выше скорость зрительного восприятия и понимания сущности решаемых вопросов. Тем выше продуктивность человеческого мозга. Тем выше качество принимаемых решений. Если это так, то между качеством исходных текстов и качеством решений есть прямая связь. «Плохие» тексты могут порождать «плохие» решения. И наоборот, хорошие тексты ведут к хорошим решениям. Поясним. Используемые во всем мире тексты, фиксирующие управленческие, организационные и иные знания, несовершенны. Они (тексты) слишком трудны для восприятия. Они могут порождать путаницу и неразбериху. И, как следствие — неудачные и ошибочные решения. Следовательно, указанные тексты нужно улучшить, то есть сделать более понятными, более комфортными для восприятия, более удобными для чтения. Кроме того, их следует избавить от пробелов и двусмысленностей. Такие тексты дадут управленцу ясную, точную и полную картину решаемой задачи. Поэтому качество управленческих решений, скорее всего, будет высоким. Сказанное означает, что мы ставим вопрос о значительном преобразовании профессионального языка управленцев. Речь идет об управленцах всех уровней — от высших органов государственной власти и топ-менеджеров корпораций до самых нижних и мелких звеньев управления любого профиля. Мы предполагаем, что научно-обоснованное изменение технологии принятия управленческих решений может привести к значительному повышению эффективности функционирования общества. ЗАЧЕМ НУЖНА НОВАЯ ТЕХНОЛОГИЯ ВЫРАБОТКИ УПРАВЛЕНЧЕСКИХ РЕШЕНИЙ? Журден, герой Мольера, очень удивился, когда узнал, что всю жизнь говорил прозой. Многие управленцы высшего, среднего и низшего звена чем-то похожи на Журдена. Они принимают решения по более или менее стандартной технологии, но, как правило, не обращают на это внимания. Говоря подробнее, можно отметить три недостатка. • Управленцы далеко не всегда осознают, что «говорят прозой», то есть используют конкретную технологию управления, точнее говоря, алгоритмы управления. • Во многих случаях они не умеют выделять в этой технологии стандартные и нестандартные участки. • Они не рассматривают процессы выработки управленческих реше-
298 Часть IIL примеры алгоритмов для различных отраслей знаний ний как алгоритмические процессы. И не умеют описывать эти процессы в алгоритмической форме. Почему? Потому что существующие методы алгоритмизации слишком сложны. Они рассчитаны на интеллектуалов-программистов и недоступны для «народа». При нынешнем положении дел управленцы практически лишены возможности грамотно использовать алгоритмы в своей практической работе. Чтобы повысить эффективность общества, перечисленные недостатки следует устранить. Однако сделать это непросто, так как указанные недочеты опираются на господствующие, повсеместно распространенные, но устаревшие стереотипы мышления. Чтобы докопаться до сути, укажем четыре негативных момента. 1. Социально-гуманитарные знания (в том числе знания по государственному, муниципальному и корпоративному управлению) принято записывать в виде линейного текста, который, как мы показали [2], чрезвычайно труден для понимания. Если время изучения текста ограничено (что бывает почти всегда, так как у делового человека каждая минута на счету), линейный текст провоцирует непонимание. 2. Мировой опыт разработки языков программирования показывает, что линейный текст (включая ступенчатый) не пригоден для записи понятных алгоритмов. 3. Традиционный способ записи алгоритмов неоправданно сложен и непригоден для массового использования в управленческих структурах. Попытки его внедрения бессмысленны, ибо требуют огромных трудозатрат, превышающих все разумные пределы. 4. Главная неприятность состоит в том, что учебная и деловая литература по вопросам управления практически не содержит развернутого описания алгоритмов управления. (А если и содержит, то понять эти алгоритмы почти невозможно). В связи с отсутствием качественных письменных источников практическое знакомство с алгоритмами управления осуществляется непосредственно на рабочем месте управленца и продолжается много лет. Ниже описан метод, позволяющий в какой-то мере обойти названные трудности. ТЕХНОЛОГИЯ СТРУКТУРИРОВАНИЯ АЛГОРИТМОВ ВЫРАБОТКИ УПРАВЛЕНЧЕСКИХ РЕШЕНИЙ (САВУР-ТЕХНОЛОГИЯ) Укажем особенности предлагаемого подхода. • Исключая из рассмотрения декларативные знания, мы ограничим-
Глава 18. АЛГОРИТМЫ И ЗАДАЧИ УПРАВЛЕНИЯ 299 ся только процедурными знаниями. Для простоты будем считать, что процедурные знания и алгоритмы — одно и то же. Уже отмечалось, что современные методы структурирования алгоритмов слишком сложны и непригодны для целей государственного, муниципального и корпоративного управления. Исходя из этого, предлагается новый, значительно более легкий способ структурирования алгоритмов. Если говорить точнее, предлагается «Технология структурирования алгоритмов выработки управленческих решений (САВУР-тех- нология), содержащая четко определенные шаги, ведущие к цели. Любой алгоритм изображается не в виде линейного или ступенчатого текста, а в виде графического чертежа. Предлагаемый чертеж похож на блок-схему алгоритма (ГОСТ 19.701—90), но выгодно отличается от нее более эффективной структуризацией, математической строгостью и повышенным комфортом для пользователей [3, 4, 5]. ЯЗЫК ДРАКОН В УПРАВЛЕНИИ В основе САВУ Р-технологии лежит алгоритмический язык ДРАКОН. Он значительно превосходит другие языки по критерию «понятность» (эрго- номичность) алгоритмов. Рассмотрим иллюстрацию, позволяющую дать зрительный образ алгоритма управления, представленного на языке ДРАКОН. На рис. 163 показан алгоритм «Создание концепции социально-экономического развития Новосибирска». В данном случае чертеж алгоритма является математически строгим, а надписи в блоках даны на естественном языке. Это очень удобно при решении значительной части задач управления. Большое число дракон-схем из области стратегического планирования представлены в работе [6]. ЭПОХА ПОНЯТНЫХ АЛГОРИТМОВ В настоящее время разработано и широко эксплуатируется программное обеспечение языка ДРАКОН для бортовых компьютеров космических ракет. К сожалению, «на земле» дело обстоит иначе. Законченный коммерческий продукт для персональных компьютеров пока отсутствует. Тем не менее, практика проектирования и эксплуатации языка ДРАКОН позволяет предположить, что интересующая нас стратегическая цель — построение алгоритмов, пригодных для решения проблемы понимания и взаимопонимания — вполне достижима. Если это верно, то мы находимся на пороге новой эпохи — эпохи попятных алгоритмов. Впервые в истории во всем мире сложные алгоритмы станут легкими для понимания! Это значит, что будет реализована заветная мечта наибо-
300 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ f Создание концепции социально- Л ^экономического развития Новосибирска^/ Прогноз ожидаемых изменений во внешнем окружении Учет тенденций развития мировой и российской экономики в будущем Учет влияния Азиатско- Тихоокеанского региона и Сибири на судьбу России в XXI веке Системно-географический анализ геополитического положения города Системно-географический анализ межрегиональных и международных связей города Прогноз позитивных и негативных изменений при реализации различных сценариев развития надсистемы Прогноз социально- экономического развития Новосибирска ' L/ . Z Прогноз социально- экономического развития Новосибирска Прогноз демографической ситуации Выявление факторов, влияющих на качество жизни Прогноз специалистов Экономико-географический анализ территории города Выявление закономерностей формирования производственной и социальной инфраструктуры города Прогноз имущественных отношений и финансово-экономических процессов в городе Создание системы регулирования социально-экономического развития города Постановка стратегических целей и приоритетов развития Постановка стратегических целей и приоритетов развития Формулировка целей и их иерархии Построение желаемого видения города Оценка относительной важности целей Создание сценариев развития Создание контрастных сценариев Создание комплексного сценария Определение основных приоритетов для власти Обсуждение плана с жителями Разработка направлений деятельности Создание сводной программы работы админстрации города Новосибирск С Конец У Рис. 163. Создание концепции социально-экономического развития Новосибирска
Глава 18. АЛГОРИТМЫ И ЗАДАЧИ УПРАВЛЕНИЯ 301 лее дальновидных математиков и программистов. Вместо нынешних «уму непостижимых» алгоритмических джунглей повсюду засияют волшебным светом «удивительно наглядные описания алгоритмов и процессов». Перед нашими восхищенными очами откроется новый мир — мир дружелюбных алгоритмов, в котором будет царить необыкновенная легкость и глубина понимания. Можно надеяться, что дальнейшее развитие теории и практики эрго- номизации алгоритмов будет иметь важные последствия. Есть основания полагать, что массовое использование языка ДРАКОН проложит путь ко всеобщей алгоритмической грамотности (в тех пределах, в которых подобная задача в принципе может быть решена). Одним из наиболее важных приложений этого принципа может стать, как мы надеемся, всеобщая алгоритмическая грамотность работников государственного, муниципального и корпоративного управления. ВЫВОДЫ 1. Современные системы государственного, муниципального и корпоративного управления чрезвычайно сложны и трудны для понимания. 2. Непонимание приводит к принятию неоптимальных, неэффективных или ошибочных управленческих решений. 3. Неудачные решения влекут за собой экономические, политические, социальные, экологические и иные потери. 4. В результате управленческих ошибок, вызванных недопониманием, эффективность функционирования общества ощутимо снижается. 5. Понимание решаемой задачи зависит от качества ее письменного описания. 6. Чем выше когнитивно-эргономическое качество письменного текста (описывающего сложные управленческие задачи), тем выше скорость зрительного восприятия и понимания сущности решаемых вопросов. Тем выше продуктивность человеческого мозга. Тем выше качество принимаемых решений. 7. Управленцы далеко не всегда осознают, что используют конкретную технологию управления, точнее говоря, алгоритмы управления. 8. Во многих случаях они не умеют выделять в этой технологии стандартные и нестандартные участки. 9. Они не рассматривают процессы выработки управленческих решений как алгоритмические процессы. И не умеют описывать эти процессы в алгоритмической форме. 10. Причина в том, что существующие методы алгоритмизации слишком сложны. Они рассчитаны на программистов и недоступны для работников управления. При нынешнем состоянии дел управленцы практически лишены возможности грамотно использовать алгорит-
302 Часть IIL ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ мы в своей практической работе. 11. Чтобы повысить эффективность общества, перечисленные недостатки следует устранить. Однако сделать это непросто, так как указанные недочеты опираются на господствующие, повсеместно распространенные, но устаревшие стереотипы мышления. 12. Неприятность в том, что учебная и деловая литература по вопросам управления практически не содержит развернутого описания алгоритмов управления. (А если и содержит, то понять эти алгоритмы почти невозможно). 13. В связи с отсутствием качественных письменных источников практическое знакомство с реальными алгоритмами управления осуществляется не во время учебы, а непосредственно на рабочем месте работников управления и продолжается много лет. 14. Язык ДРАКОН позволяет частично устранить этот недостаток. Представление алгоритмов управления в виде наглядных дракон- схем облегчает для работников управления выявление и уяснение алгоритмической сути многих (хотя и не всех) управленческих задач.
Глава АЛГОРИТМЫ И ФОРМАЛИЗАЦИЯ ПРОФЕССИОНАЛЬНЫХ ЗНАНИЙ 19 Процесс формализации профессиональных знаний... — исторически новая форма интеллектуальной деятельности. Григорий Громов [1] ЧТО ТАКОЕ ПРОФЕССИОНАЛЬНЫЕ ЗНАНИЯ? Профессиональные знания охватывают всю совокупность сведений, которые человек использует в своей профессиональной деятельности. Далее рассматриваются лишь те профессиональные знания, которые целесообразно в той или иной степени формализовать и представить в письменном виде на бумаге или экране компьютера. Профессиональные знания должны в конечном итоге вести к желаемому (теоретическому или практическому) результату. Но этого мало. Например, древняя технология закалки кинжала (рис. 164), безусловно, позволяет получить искомый результат. Однако, с современной точки зрения, она выглядит дикой, нелепой и бесчеловечной. Причин тому две: на заре человечества моральные нормы были неразвиты, а главное — указанная технология опирается не на научные знания, а на мифологические объяснительные схемы. Древние технологи были искренне убеждены, что сила раба «переходит» в кинжал и улучшает его боевые качества [2]. ЧТО ТАКОЕ ПРОФЕССИОНАЛЬНЫЙ ЯЗЫК? Профессиональные знания записывают на профессиональных языках. Чтобы упростить дело, исключим из рассмотрения устный (звуковой) язык и сконцентрируем внимание на письменных (зрительно воспринимаемых) профессиональных языках.
304 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ Древнейшая технология закалки кинжала При раскопках храма в Балгале была найдена рукопись, созданная три тысячи лет назад. В ней описана технология закалки кинжала. Вот она. Нагреть кинжал, пока он не засветится, как восходящее в пустыне солнце. После этого охладить кинжал др цвета царского пурпура, погружая его е тело мускулистого раба, Сила раба, переходя а кинжал, и придает металлу твердость Нагревай кинжал на огне (Кинжал засветился, как восходящее в пустыне солнце? нет да Вытащи кинжал из огня Охлаждай кинжал, погружая его в тело мускулистого раба Сила раба, переходя в кинжал, и придает металлу твердость (Кинжал охладился нет Кинжал охладился до цвета царского пурпура? Л Вытащи кинжал из тела раба Закалка кинжала окончена ^ ( Конец . " /*''-¦¦ \ ч "I/'i }'<',« "i":'f.'t- Рис. 164. Чудовищный древний алгоритм с двумя циклами
Глава 19. АЛГОРИТМЫ И ФОРМАЛИЗАЦИЯ ПРОФЕССИОНАЛЬНЫХ ЗНАНИЙ 305 Профессиональный язык — богатое множество знаково-символических средств, включающее естественный человеческий язык, научные понятия и термины, математические и иные формулы, логико-математические исчисления, различные искусственные языки, а также всевозможные схемы, чертежи, графики, диаграммы, карты, современные приемы компьютерной визуализации знаний и пр. Существует множество профессиональных языков, так как специалисты в разных областях знания обычно используют разные языки [3]. ПРОФЕССИОНАЛЬНЫЕ ЯЗЫКИ ИГРАЮТ ОГРОМНУЮ РОЛЬ В ЖИЗНИ ЦИВИЛИЗАЦИИ На них написана вся научная, профессиональная и учебная литература. Но не только. Фиксация и формализация любых профессиональных знаний в электронной, печатной и черновой форме осуществляется только на этих языках. Профессиональные языки — ключ к сокровищнице человеческих знаний. Они задают правила записи профессиональной информации, позволяющие интеллектуальным работникам: • представлять свои профессиональные знания на бумаге и экране компьютера, на страницах книг и в документации; • выражать новые научные, технические, социальные и иные мысли, идеи и изобретения; • проектировать новые элементы цивилизации; • достигать взаимопонимания при выполнении совместной работы; • понимать тексты, формулы и чертежи друг друга в ходе профессионального взаимодействия; • понимать учебную, профессиональную и научную литературу; • усваивать знания в процессе обучения и переподготовки [3]. ФОРМАЛИЗАЦИЯ ЗНАНИЙ Под формализацией знаний будем понимать представление профессиональных знаний на формальном или частично формальном языке. Формализация тесно связана с чрезвычайно важной проблемой, которая называется «управление знаниями». Чтобы пояснить эту мысль, приведем отрывок из статьи специалиста по искусственному интеллекту Э. Попова. Эдуард Попов КОРПОРАТИВНЫЕ СИСТЕМЫ УПРАВЛЕНИЯ ЗНАНИЯМИ Знания - это богатство фирмы Важнейшим ресурсом современного предприятия, способным зна-
306 Часть IIL ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ чительно повлиять на повышение его конкурентоспособности и инвестиционной привлекательности, являются корпоративные знания. Сегодня с этим никто не спорит. Вопрос только в том, как воспользоваться этими корпоративными знаниями. Ведь большинство из них СКРЫТО В ГОЛОВАХ СОТРУДНИКОВ. Люи План, экс-президент корпорации Хьюлет-Паккард (HP), считает: «Если бы только корпорация HP осознавала то, что она знает, она была бы в три раза более продуктивной». Управление знаниями становится наиболее горячей темой, обсуждаемой специалистами всех уровней управления. Способность эффективно использовать и развивать знания, воплощать их в новые изделия и услуги превращается в важнейший фактор выживания в условиях информационного общества. Знания - это богатство фирмы, которое добывается, обрабатывается и распространяется. Цель управления знаниями В современном обществе, благодаря широкому использованию информационных и коммуникационных технологий, объединивших весь мир в единую сеть, знания не являются больше традиционным преимуществом передовых держав. Цель управления знаниями - объединить знания, накопленные предприятием, со знаниями заказчика и использовать их для решения задач предприятия. Знание о потребителе складывается только в ходе тесных контактов с ним. Главное, чтобы эти знания сделали потребителя «прозрачным». При этом новая продукция (услуги) должна обладать явными преимуществами при сравнении с продукцией конкурента. Быстрый доступ к необходимым знаниям играет первостепенную роль, поскольку позволяет значительно повысить качество ежедневных деловых процессов. Целенаправленное использование и усовершенствование знаний высвобождает огромные потенциалы экономии и роста, которые не могут быть реализованы с помощью традиционных концепций реорганизации и модернизации. По мнению корпорации Xerox, давно изучающей эти вопросы, сегодня на стоимость большинства изделий и услуг, в первую очередь, влияют «нематериальные ценности, основанные на знаниях». К «нематериальным ценностям» эксперты относят информацию о технологиях, проектировании изделий, маркетинге и запросах потребителя, бизнес-процессах, а также личные и инновационные способности сотрудников. Эксперты считают, что 42% ЗНАНИЙ КОМПАНИИ НАХОДИТСЯ ТОЛЬКО В ГОЛОВАХ СОТРУДНИКОВ. От них зависит, станут эти знания доступными другим, или нет.
Глава 19. АЛГОРИТМЫ И ФОРМАЛИЗАЦИЯ ПРОФЕССИОНАЛЬНЫХ ЗНАНИЙ 307 Системы управления знаниями Решить эти проблемы позволяют системы управления знаниями. По последним данным, мировые расходы на системы управления знаниями (СУЗ), составившие в 1999 г. 2 млрд. дол., к 2004 г. достигнут 15 млрд. Сюда относятся как сфера услуг (консультации, внедрение, поддержка и подготовка кадров), так и информационные технологии, причем львиная доля принадлежит консультациям. В исследовании фактического состояния внедрения систем управления знаниями, проведенном американской консультационной фирмой International Data Corporation, указывается, что большинство респондентов считает эту деятельность жизненно необходимой, обеспечивающей соответствие требованиям заказчика и инновационную способность компании. Около половины фирм с количеством сотрудников более 500 человек подтвердило намерение ввести у себя такую систему. Еще большее число желающих среди крупных компаний. У большинства опрошенных доля фактора «знание» в стоимости изделий и услуг превышает 50%. По оценке предприятий, более эффективное использование знаний могло бы повысить их производительность в среднем на одну треть. Управление знаниями помогает при решении проблем Фирмы отмечают, что управление знаниями помогает при решении проблем, связанных со следующими ситуациями: • в случае увольнения опытных специалистов или их нежелания поделиться с другими своими знаниями («внутреннее увольнение»); при болезни, отпусках, командировках сотрудников; при чрезмерной загруженности отдельных сотрудников; при наукоемком производстве; при продаже частей (подразделений) фирмы; при децентрализованной структуре фирмы; для повышения КПД рабочего времени; для регулирования процесса передачи фирмы другому владель- ЧУ- По данным опроса, проведенного фирмой Xerox в 1999 г. среди 300 руководителей высшего ранга, 88% компаний считают, что на деловые процессы более всего влияет способность управлять знаниями. Но при этом только 20% отмечают, что реализованные ими системы управления знаниями действительно привели к успеху.
308 Часть IIL ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ Недостатки в работе со знаниями Складывалась ситуация, когда, с одной стороны, признавался дефицит в использовании интеллектуальных ресурсов фирмы, а с другой, имелся недостаток эффективных методов и средств управления знаниями. По мнению специалистов, во многих фирмах знание документируется и распределяется произвольно, без строгой системы. По данным Xerox, 46% специальных знаний компаний, не использующих систем управления знаниями, заключены в документации разного рода. Из них 26% находятся на бумажных носителях, а остальные - на компьютерных. Отдельные сведения хранятся у сотрудников в папках или на жестких дисках и могут быть получены только ими. Эксперты Delphi Consulting Group отмечают, что лишь 12% организационных знаний компании имеются в банках данных. Как показывает зарубежный опыт, решение задачи управления знаниями возможно лишь в тесном контакте между специалистами самых различных сфер деятельности предприятия и специалистами по информационным технологиям. А главное, при заинтересованности высших и средних менеджеров предприятия в получении оперативного доступа к любым информационным ресурсам предприятия в удобной форме. И анализу полученной информации в реальном масштабе времени. По данным Gartner Group, около 90% предприятий в Северной Америке и Европе осознают значимость управления знаниями (УЗ) и приступили в 1999-2000 гг. к реализации систем УЗ. Показано, что управление знаниями важно не только само по себе, но и существенно влияет на разработку модели нового предприятия, осуществляемую в процессе реинжиниринга. В связи с тем, что термин «управление знаниями» является новым, пока не существует единого взгляда ни на определение этого понятия, ни на область его действия. Пользователи путают управление знаниями с хранилищами данных (data warehouse), с интеллектуальным бизнесом (business intelligence) и с другими процессами, интенсивно использующими знания. Производители программных продуктов, как всегда, вносят дополнительный сумбур, желая выдать то, что у них есть, за средства управления знаниями. Потребность в знаниях Для любой организации, желающей преуспеть в сегодняшней глобальной информационной экономике, необходима интеллектуальная, исчерпывающая и простая в использовании система для управления
Глава 19. АЛГОРИТМЫ И ФОРМАЛИЗАЦИЯ ПРОФЕССИОНАЛЬНЫХ ЗНАНИЙ 309 знаниями, а также система доступа к знаниям и система приобретения новых знаний. Фирма International Data Corporation оценивает затраты на консалтинг в области управления знаниями в 2002 г. в размере 3,4 миллиардов долларов (только в США). По мере того как появляется все больше и больше организаций, инвестирующих в службы по управлению знаниями, возникает необходимость разобраться в том, что понимается под терминами «знания» и «управление знаниями». Что такое знания Энциклопедический словарь Webster дает следующее определение. Knowledge (знания) — это: • понимание, приобретаемое фактическим опытом (например, знание плотницкого ремесла); • состояние осведомленности о чем-то или обладание информацией; • диапазон информированности или осведомленности; • акт понимания, ясное восприятие истины; • нечто понятое и держащееся в уме. С точки зрения целей общества, где доминируют информационные технологии, знания - это просто интеллект, используемый в работе. Знания, приобретаемые фактическим опытом, продуктивны только тогда, когда они используются при выполнении работы или интегрируются в процесс выполнения работы. Точное и емкое определение знания было дано задолго до информационной и электронной революций и даже задолго до индустриальной революции. Сэр Фрэнсис Бэкон A561-1626) дал знаменитое определение: «знания - сила». Сегодня мы окружены громадными объемами информации, поэтому такое определение кажется очень современным. Информации так много, что мы оказываемся неспособными использовать ее. Знания - это сегодняшняя валюта. Организации, способные работать с уже имеющимися у них и получаемыми в процессе работы знаниями, будут «на коне» в XXI веке. Знания приобретают разные формы, и поэтому ими становится сложнее управлять. Часто знания являются чем-то большим, чем просто информацией и данными о событиях, продуктах или процедурах. Данные, информация, знания Если данные - это не долго живущие новости, временные записи и т.п., не предназначенные для длительного использования, то информация представляет собой полуструктурированные (или агрегированные) данные, служащие, например, опорой для периодического приня-
310 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ тия каких-либо решений. В свою очередь знания, являющиеся результатом переработки информации, имеют весьма длительный цикл жизни, несут определенную идею и снабжены контекстом, определяющим область ее эффективного применения в данном месте в данное время. Говоря другими словами, информация - это то, что может иметь отношение к решаемой задаче, а знания - это то, что необходимо для решения данной задачи. Явные и неявные знания Необходимо отметить различие между неявными и явными знаниями. Неявные знания трудно выразить: они часто заключены в интуиции и в не поддающихся анализу опыте, навыках и привычках. Неявными знаниями может обладать отдельный человек или группа людей. Явные знания легко выражаются четкими данными, сообщениями, словами и числами. Явные знания в большей степени систематизированы, закодированы и, следовательно, более легко извлекаются из сообщений электронной почты, локальных и глобальных баз данных, HTML-файлов и других источников информации. Неявные и явные знания являются существенными компонентами при разработке стратегии управления знаниями. Внешние и внутренние корпоративные знания Корпоративные знания делятся на внешние и внутренние. К первой группе относятся, к примеру, знания клиента (наиболее важное знание для большинства организаций), независимая аналитическая информация (маркетинговые отчеты и рейтинги, цены на международных фондовых биржах, динамика изменения американских фондовых индексов - Dow Jones, NASDAQ). Ко второй группе часто причисляют: • знания о ключевых для данной отрасли процессах - накопление лучшего опыта (ноу-хау) при выполнении основных задач; • знания об изделиях и услугах; • лучшие решения, наиболее соответствующие текущим потребностям пользователей; • знания сотрудников - выявление, накопление и использование интеллектуального капитала (наиболее ценный актив организации); • «память» организации (прошлый опыт); • знания о построении отношений - глубокие персональные знания, которые обеспечивают успешное сотрудничество; • интеллектуальные активы (базы знаний) - опыт ведения проектов (образцы наилучшей практики).
Глава 19. АЛГОРИТМЫ И ФОРМАЛИЗАЦИЯ ПРОФЕССИОНАЛЬНЫХ ЗНАНИЙ 311 В продвинутых организациях все это великолепие хранится в корпоративной сети (интранет), к соответствующим сегментам которой имеют доступ как руководители компании, так и сотрудники различных ее подразделений. Классическими примерами развитых сетей такого рода, содержащих внешние и внутренние знания, являются корпоративные сети международных консалтинговых компаний «большой пятерки», транснациональных концернов (Shelly Motorola, General Motors), гигантов ИТ-ин- дустрии (IBM, Compaq, Dell, Oracle, SAP). Систематизированные знания из обширных хранилищ передового опыта доступны сотрудникам этих фирм из любой точки мира. Их менеджеры и специалисты имеют возможность в нужный момент «подсмотреть» успешный опыт своих коллег из разных отраслей и подразделений. А при необходимости — связаться с признанными экспертами из конкретной предметной области. Что такое управление знаниями? Приведем несколько определений этого понятия. Определение Gartner Group: «Управление знаниями - это дисциплина, которая обеспечивает интегрированный подход к созданию, сбору, организации и использованию информационных ресурсов предприятия и доступу к ним. Эти ресурсы включают структурированные базы данных, текстовую информацию, такую как документы, описывающие правила и процедуры, и, что наиболее важно, неявные знания и экспертизу, находящиеся в головах сотрудников» (The Knowledge Management Scenario: Trends and Directions for 1998-2003, Gartner Group, 1999). Определение International Data Corporation (IDC): «Управление знаниями - это формальный процесс, который состоит в оценке организационных процедур, людей и технологий и в создании системы, использующей взаимосвязи между этими компонентами с целью предоставления нужной информации нужным людям в нужное время, что приводит к повышению продуктивности» (The Knowledge Management Process: a Practical Approach, IDC, 2000). Определение PC Week/RE: «Управление знаниями - это технология, включающая в себя комплекс формализованных методов, охватывающих:
312 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ • поиск и извлечение знаний из живых и неживых объектов (носителей знаний); • структурирование и систематизацию знаний (для обеспечения их удобного хранения и поиска); • анализ знаний (выявление зависимостей и аналогий); • обновление (актуализацию) знаний; • распространение знаний; • генерацию новых знаний». Цель и методология управления Рассматривая задачу управления знаниями, следует различать цель и методологию управления. Цель управления бывает: • тактическая (решение конкретной задачи управления предприятием); • стратегическая (повышение интеллектуального потенциала предприятия и непрерывный рост устойчивости) Методология управления подразумевает: • извлечение знаний (из документов, баз данных, электронных архивов, файлов, из голов специалистов, интернет и т.д.) • распространение знаний (доставка требуемых документов и «закачка» в головы специалистов специализированных знаний). Любые организации, способные быстро и легко распространять свою информацию через существующую у них инфраструктуру, могут начать управлять запасами своих знаний. Актуальная информация может включать любые типы явных запасов знаний: бумажные документы, электронные документы, базы данных, сообщения электронной почты, текстовые файлы, изображения и видеофрагменты, полученные из любых источников информации. Необходимо, чтобы информационная инфраструктура организации позволяла эффективно и многократно использовать запасы знаний. Управление знаниями как бизнес-процесс Gartner Group считает, что управление знаниями (УЗ) есть бизнес- процесс для управления интеллектуальными активами предприятия. УЗ-процесс определяется следующими параметрами: 1) УЗ-процесс должен быть связан со стратегией предприятия; 2) УЗ-процесс требует организационной культуры и дисциплины, которая продвигает и поддерживает совместное использование
Глава 19. АЛГОРИТМЫ И ФОРМАЛИЗАЦИЯ ПРОФЕССИОНАЛЬНЫХ ЗНАНИЙ 313 знаний, сотрудничество работников и подразделений и стимулирует инновации; 3) УЗ-процесс должен способствовать ясности бизнес-процессов и производственных отношений; 4) УЗ-процесс должен выходить за рамки предприятия и его процессов и учитывать покупателей, поставщиков и конкурентов. Предприятие не способно управлять своим интеллектуальным капиталом в отсутствии системы управления знаниями. Интеллектуальные активы предприятия увеличивают его конкурентоспособность и рыночную стоимость. Предприятие должно не только охранять свои патенты, авторские права и ноу-хау, но и выявлять и охранять знания своих ведущих специалистов, знания о производстве товаров (услуг), о покупателях, конкурентах и т.п. В рамках управления знаниями особое внимание предлагается уделить выявлению неявных (не выраженных словами) знаний {tacit knowledge) сотрудников. (То есть знаний, которые приобретены в ходе опыта работы и явно не выражены). Функции и компоненты управления знаниями В процессе управления знаниями обычно выделяют следующие функции: • Создание - функция, результатом которой являются новые знания или новые конфигурации существующих знаний; • Выявление ~ функция, которая делает неявные знания явными, то есть преобразует индивидуальные знания в знания предприятия (его сотрудников); • Организация знаний - функция по классификации и категоризации знаний для навигации, запоминания, поиска и сопровождения знаний; • Доступ — функция по передаче и распространению знаний между сотрудниками; • Использование - функция по применению знаний для принятия решений и расширению возможностей. Есть три основных компонента управления знаниями: A) Люди получают, генерируют и передают знания; Б) Процессы используются для распространения знаний; B) Технологии обеспечивают быструю и эффективную работу людей и процессов...
314 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ Менеджеры должны убедить сотрудников распространять их эксклюзивную информацию Распространение и использование неявных знаний представляет собой свободный обмен знаниями между коллегами по работе. Он происходит ежедневно во время перерывов за чашкой чая или в лифте и часто считается само собой разумеющимся. Это критический компонент любой архитектуры управления знаниями. Менеджеры информационных систем должны убедить сотрудников распространять их эксклюзивную информацию, являющуюся дополнением к индивидуальной исключительности отдельного человека и безопасности его работы. Менеджеры информационных систем должны стремиться помогать сотрудникам лучше работать вместе со все возрастающими объемами информации. Прежде, чем кто-то начнет работу над проектом (знать что), ему было бы неплохо узнать, у кого еще в организации есть ценная информация, способная содействовать успеху этого проекта (знать кто). И каким именно образом эта информация может принести пользу в работе над новым проектом (знать как). После того, как идея создается человеком и осуществляется на практике, она проходит период оценки и усовершенствования. Эта идея или решение затем сохраняется для использования в будущем этим человеком или другими людьми. Совместные усилия всех людей, работающих над проектом, и создаваемые ими нововведения приводят к появлению новых идей, решений и продуктов. Около 50% всех затрат на управление знаниями будет потрачено на поощрение сотрудников за передачу ими своих знаний В результате циклического процесса создания и использования знаний возникает богатая знаниями организация, многократно использующая знания и опыт своих людей (служащих). Сегодня мы имеет дело с экономикой, обогащенной знаниями. Знания - это сегодняшняя валюта. Поиск, аннотирование, усовершенствование и многократное использование знаний помогут предприятию сделать бизнес-процессы более эффективными, получить конкурентоспособные преимущества и повысить производительность. Задача фирмы состоит в том, чтобы определить необходимые инвестиции предприятия и сотрудников, а также получаемую в результате этого прибыль. Ожидается, что предприятия, обеспечивающие инвестиции сотрудников с целью управления знаниями и их вознаграждение, будут функционировать на 25% лучше, чем те предприятия, которые это не сделают.
Глава 19. АЛГОРИТМЫ И ФОРМАЛИЗАЦИЯ ПРОФЕССИОНАЛЬНЫХ ЗНАНИЙ 315 По данным Gartner Group, в 2004 г. около 50% всех затрат на управление знаниями будет потрачено на мотивацию сотрудников на передачу ими своих знаний для общего пользования. С чего начать? Для современных организаций жизненно важно внедрить процессы и технологии, способствующие распространению и совместному использованию знаний. В анализе фирмы Meta Group сказано: «Все бизнес-процессы могут стать более эффективными после применения методов управления знаниями. Организации, переопределяющие свои основные бизнес-процессы для использования преимуществ управления знаниями, станут лидерами на рынке XXI века». Поскольку идея управления знаниями пока недостаточно ясно сформулирована, менеджеры по информационным технологиям часто не знают, с чего начать. Прежде всего, организация должна стремиться ускорять поток информации от одних людей к другим, и от отдельных людей ко всей организации. Взаимное распространение и использование персональных знаний (знаний, принадлежащих одному человеку) и общих для организации знаний (знаний, собранных организацией) способствует появлению нововведений и производству новых продуктов. Как изменить корпоративную культуру организации? Здесь возникает огромная проблема: как изменить корпоративную культуру организации? Как убедить людей, что постулат «мои знания - моя сила» уже устарел? Время выдвигает новый лозунг: «Давайте делиться знаниями друг с другом, чтобы обеспечить распространение и совместное использование знаний». Сделать это непросто. Ведь со школьной скамьи люди учились защищать свои знания. Например, распространение и совместное использование знаний во время экзаменов немедленно заканчивалось наказанием. Люди быстро убеждались, что чем больше знаний они сохраняют для самих себя, тем более «ценными» они становятся. Поэтому легко понять, почему в нашем корпоративном мире люди стремятся запасать знания. Чем больше их у нас, тем нам «лучше». Успех управления знаниями зависит от инвестиций сотрудников и предприятия в реализацию УЗ.
316 Часть IIL ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ С точки зрения сотрудника, стоимость инвестируемых им знаний определяется теми потерями, которые он несет. Ведь вкладывая свои знания в общую копилку, сотрудник жертвует частью своей «значимости». Почему? Потому что персональные знания сотрудника (полученные в процессе образования, опыта работы и самообразования) являются средством для успешной конкуренции в продвижении по службе, в признании руководством, в получении значимой работы. Знания сотрудника определяют его стоимость на рынке труда. Преобразование личностных (неявных) знаний в явную форму уменьшает его конкурентоспособность на рынке труда...[4] УПРАВЛЕНИЕ ЗНАНИЯМИ И ЯЗЫК ДРАКОН Сосредоточим внимание на следующих моментах, затронутых в цитированной статье: • большинство знаний скрыто в головах сотрудников; • извлечение знаний из голов сотрудников является важной, но трудной задачей; • около 50% всех затрат на управление знаниями будет потрачено на поощрение сотрудников за передачу ими своих знаний в общую копилку. Предположим, что названные трудности удалось преодолеть. Будем считать, что сотрудники согласились раскрыть свои профессиональные секреты и поделиться знаниями с коллегами. В связи с этим возникает ряд вопросов: • Как извлечь знания из голов сотрудников корпораций? • Кто будет формализовать извлеченные из голов сотрудников знания? Можно сделать следующие замечания: 1. Желательно, чтобы сотрудник формализовал свои знания САМ, не прибегая к помощи программистов или инженеров по знаниям. То есть использовал метод АВТОФОРМАЛИЗАЦИИ знаний. 2. Проблема в том, что известные методы автоформализации исключительно трудны и недоступны для подавляющего большинства специалистов. 3. Сегодня формализация знаний — дорогостоящий и трудоемкий процесс. Задача состоит в том, чтобы значительно увеличить производительность труда в процессе использования автоформализации знаний.
Глава 19. АЛГОРИТМЫ И ФОРМАЛИЗАЦИЯ ПРОФЕССИОНАЛЬНЫХ ЗНАНИЙ 317 4. Успех дела во многом зависит от наличия удобных когнитивно-эргономических инструментов, позволяющих осуществлять БЫСТРУЮ автоформализацию знаний. 5. Языки представления декларативных знаний не поддаются унификации. С процедурными знаниями ситуация иная. Существует возможность построить единый универсальный процедурный (алгоритмический) язык. 6. Автоформализация процедурных знаний и бизнес-процессов — один из важнейших видов интеллектуального труда. Чтобы добиться резкого повышения производительности этого труда и сделать автоформализацию доступной практически для всех специалистов, нужно создать межотраслевой язык, обладающий высокими когнитивными характеристиками. 7. Такой язык должен стать элементом языковой культуры человечества. Его изучение должно быть предусмотрено в средней и высшей школе. Для этого язык нужно специально приспособить, сделать легким и удобным, доступным для школьников и студентов. 8. В качестве такого языка предлагается использовать язык ДРАКОН. ДОСТОИНСТВА ЯЗЫКА ДРАКОН В главах 11 — 19 мы рассмотрели ряд примеров из самых различных, очень непохожих друг на друга областей профессиональной деятельности. И показали, что язык ДРАКОН может принести ощутимую пользу. Он позволяет эффективно формализовать процедурные знания во многих, хотя и не во всех ситуациях. Что это дает? Поскольку процесс формализации знаний оказывается чрезвычайно легким, он становится доступным практически для любого человека, который хорошо знает свое дело. С появлением языка ДРАКОН каждый специалист приобретает новые возможности: • он может формализовать свои знания сам, без помощи инженеров по знаниям или программистов, то есть воспользоваться всеми благами автоформализации знаний; • он может выражать свои мысли на своем родном профессиональном языке, но в формализованном виде. В результате специалист получает мощное средство делового общения, ибо благодаря ДРАКОНу его родной профессиональный язык каким-то чудесным образом стал очень похож на (процедурные) профессиональные языки других специальностей. Наибольшие для человека трудности возникают в сложных видах деятельности, когда человеческий ум, сталкиваясь с большими и разнооб-
318 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ разными задачами, начинает давать сбои. Следствием этого являются разного рода ошибки, недоработки, дефекты и упущения, взаимное непонимание, путаница, затяжки выполнения работ и срывы плановых сроков. Язык ДРАКОН дает возможность ослабить или устранить подобные неприятности. Он позволяет значительно упростить форму представления задачи, сделать ее обозримой и ясной. В итоге ДРАКОН приносит существенную пользу, заметно повышает производительность труда, ощутимо снижает издержки. ОБОБЩЕНИЕ ПОНЯТИЯ «АЛГОРИТМ» Взглянем еще раз на рисунки 135—164. Они представляют собой примеры алгоритмов, используемых в самых различных областях: медицине, промышленности, торговле, биологии и т. д. Рисунки 135—164 описывают различные процессы, действия и события, которые на первый взгляд не имеют ничего общего. Если содержание этих рисунков представить в виде текстового описания, общая, инвариантная часть указанных процессов и событий как бы исчезает, становится скрытой, неявной, неуловимой. Образно говоря, язык ДРАКОН срывает шапку-невидимку с этого инварианта, делает его зримым, бьющим в глаза. Введем термин диоалгоритмы, чтобы обозначить алгоритмы в широком смысле слова. Сюда относятся: • математически строгие алгоритмы [5, 6]; • структура человеческой деятельности; • технологические процессы; • биологические процессы, протекающие внутри живых организмов. Любой диоалгоритм можно описать с помощью дракон-схемы. При этом абстрактная дракон-схема (из которой полностью удален текст) является логическим инвариантом алгоритма. Способность абстракции, возможность увидеть единое в различном — важная способность человеческого ума. Инструменты, развивающие эту способность, содействуют увеличению силы ума. Известно, что процесс обучения и образовательная среда учат человека извлекать знания из собственной деятельности, постигать принципы собственных действий и руководствоваться ими в новых ситуациях. Или, как говорят педагоги, осуществлять перенос знаний, занимающий огромное место в образовательном процессе и практической жизни [7]. Язык ДРАКОН, формализуя и эргономизируя диоалгоритмы, позволяет легко выполнять перенос знаний и навыков, выявляя визуальные логические инварианты, закрепляя их в сознании. И стимулируя более глубокое постижение принципов построения и визуальной структуры ди- оалгоритмов. Внимательно анализируя рисунки 135—164, абстрагируясь от содержания алгоритмов и концентрируя внимание на их визуальной структуре
Глава 19. АЛГОРИТМЫ И ФОРМАЛИЗАЦИЯ ПРОФЕССИОНАЛЬНЫХ ЗНАНИЙ 319 и формальных аспектах описания, мы обнаруживаем «сходство в различном». На конкретных примерах мы убеждаемся в том, что язык ДРАКОН действительно пригоден для описания алгоритмов в самых разнообразных, непохожих друг на друга сферах деятельности. Преимущество состоит в использовании единой визуальной формы для любых диоалгоритмов. НУЖЕН ЛИ СТАНДАРТ ДЛЯ ОПИСАНИЯ ДИОАЛГОРИТМОВ? В связи с обобщением понятия «алгоритм», распространением этого понятия на строгие алгоритмы, описание структуры деятельности, техпроцессы и биопроцессы, возникает вопрос о создании нового стандарта. Нужен ли такой стандарт? Для краткости рассмотрим проблему для частного случая, то есть для алгоритмов, описывающих структуру человеческой деятельности. И в нашей стране, и за рубежом сегодня отсутствует единый стандарт для описания структуры деятельности, что во многих случаях создает путаницу и неразбериху. Разномастные и разнокалиберные описания, принятые в различных отраслях, часто имеют многочисленные недостатки, содержат пробелы и двусмысленности. Они не формализованы, ненаглядны, неудобны в работе и трудны для понимания. Зачастую описания вообще отсутствуют, а те, что есть, — устарели и не соответствуют действительности. Несмотря на низкое качество большинства описаний, трудоемкость их создания весьма велика. Все это вносит значительные трудности в работу, заметно снижает производительность труда, создает ненужные препятствия для общения и взаимопонимания между специалистами разных профессий. Было бы желательно создать единый стандарт для описания структуры деятельности, снабженный компьютерной поддержкой и рассчитанный на постепенное внедрение во всех отраслях и предметных областях, где его применение может дать положительный эффект. Аналогичные рассуждения можно провести и для всех остальных диоалгоритмов. И сделать вывод о необходимости разработки стандарта. На наш взгляд, при разработке стандарта целесообразно взять за основу язык ДРАКОН. ВЫВОДЫ 1. Знания делятся на процедурные и декларативные. Эта книга посвящена процедурным знаниям. 2. Процедурные знания тесно связаны с понятием «диоалгоритмы». А также с одним из наиболее фундаментальных понятий социально- гуманитарных наук — человеческой деятельностью.
320 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ 3. Важным свойством диоалгоритмов является существование глубинных логических инвариантов (структурных конструкций), выражаемых с помощью понятия «абстрактная дракон-схема». 4. Традиционные способы описания диоалгоритмов не позволяют выявить глубинные инварианты. Последние оказываются замаскированными, скрытыми, спрятанными от читателя. Это обстоятельство затрудняет перенос знаний и навыков, играющий важную роль в образовании и практической жизни. 5. Язык ДРАКОН как особое средство, специально созданное для описания диоалгоритмов, позволяет выявить и обнажить логические инварианты деятельности, сделать их явными, зримыми, доступными для всех людей. 6. Формализация знаний — труд, производительность которого играет важную роль. Если этот труд слишком сложен (производительность труда мала), то формализацию могут выполнять только специально подготовленные элитные специалисты. При таких условиях автоформализация практически невозможна. И наоборот, если данный труд удается облегчить, формализация становится посильной почти для каждого. В этом случае создаются необходимые предпосылки для автоформализации. 7. Язык ДРАКОН кардинальным образом облегчает труд формализации и повышает его производительность. Следовательно, он пригоден для эффективной автоформализации процедурных (алгоритмических) знаний. 8. Описание диоалгоритмов (результаты формализации процедурных знаний) целесообразно хранить в компьютерной форме в виде библиотек визуального гипертекста. А также в виде бумажных визуальных альбомов подходящего формата (например, формата A3). 9. Целесообразно создать единый межотраслевой стандарт для описания диоалгоритмов. Стандарт может опираться на язык ДРАКОН.
Глава 20 РЕКОМЕНДАЦИИ ПО ИСПОЛЬЗОВАНИЮ АЛГОРИТМИЧЕСКИХ СТРУКТУР «СИЛУЭТ» И «ПРИМИТИВ» ВВЕДЕНИЕ Предположим, вы собираетесь начертить дракон-схему. Возникает вопрос. Какую структуру использовать: силуэт или примитив? Этот вопрос в упрощенном виде уже обсуждался в главе 4. Сейчас мы дадим более подробные и окончательные рекомендации. КАК НАРИСОВАТЬ БОЛЬШОЙ АЛГОРИТМ? 1. Чтобы создать большую дракон-схему, следует использовать систему силуэтов. 2. Головной алгоритм большой схемы обязательно должен быть силуэтом. 3. Алгоритм надо рассматривать как последовательную декомпозицию силуэтов. В том смысле, что каждый силуэт может содержать много вставок, каждая из которых раскрывается как силуэт. 4. Ни в коем случае нельзя представлять головной алгоритм как систему примитивов. Потому что в этом случае НЕВОЗМОЖНО БЫСТРО УВИДЕТЬ ГЛАЗАМИ, как эти примитивы логически связаны между собой. Чтобы понять эту связь, нужен трудоемкий мыслительный анализ, который требует усилий, отнимает время и снижает производительность труда. 5. Если кто-либо (по ошибке) начнет рисовать головной алгоритм в виде системы примитивов, надо прекратить работу. И превратить примитивы в силуэт. При этом каждый примитив превращается в ветку силуэта. Иногда часть примитивов превращается в ветки силуэта более низкого уровня на лестнице декомпозиции. 6. Пример. На рис. 145—147 показано, что любой, сколь угодно большой и сложный алгоритм можно изобразить в виде системы силуэтов. Головной алгоритм представлен на рис. 145. Силуэты более
322 Часть III. ПРИМЕРЫ АЛГОРИТМОВ ДЛЯ РАЗЛИЧНЫХ ОТРАСЛЕЙ ЗНАНИЙ низкого уровня формируются из головного алгоритма с помощью вставок. При этом используется простой и единообразный прием — наглядная декомпозиция. Вставки нижних уровней изображаются в виде примитива только как исключение. Число листов в дракон-схеме не ограничено. БОЛЬШОЙ АЛГОРИТМ С СОЕДИНИТЕЛЯМИ Большой алгоритм можно нарисовать двумя способами: • головной алгоритм-силуэт изображается на одном листе бумаги. Этот случай описан выше; • головной алгоритм-силуэт изображается на нескольких листах бумаги. Этот случай показан на рис. 164а— 164г. В последнем случае листы сочленяются с помощью соединителей. Пример. На рис. 164а на верхней и нижней горизонтали справа нарисованы два кружка-соединителя с номерами 1 и 2. На рис. 1646 на верхней и нижней горизонтали слева нарисованы два ответных соединителя с теми же номерами. Благодаря соединителям верхние и нижние горизонтали на четырех листах рис. 164 соединяются между собой. И образуют непрерывные горизонтальные линии. В итоге четыре листа рис.164, разложенные на столе по горизонтали, превращаются в «целостный» чертеж, удобный для зрения. Примечание. Выше описаны «внешние» соединители, служащие для связи горизонталей между листами. Все другие соединители использовать запрещается. КАК НАРИСОВАТЬ МАЛЫЙ АЛГОРИТМ? Алгоритмы малых размеров рисуют в виде примитива. Сравнивая силуэт и примитив, можно отметить следующее. 1. Силуэт — главное достоинство языка ДРАКОН. Он обладает мощными выразительными средствами. В реальной работе силуэт используется в подавляющем большинстве случаев. 2. Примитив применяют крайне редко, скорее как исключение. 3. Тем не менее, полностью отказываться от понятия «примитив» не следует по двум причинам. 4. Первая причина — педагогическая. Примитив — это прообраз (зародыш) ветки. Основные понятия и правила ДРАКОНа удобно объяснять на самой простой модели. То есть на примитиве. И только после этого переходить к рассказу о силуэте.
Глава 20. РЕКОМЕНДАЦИИ ПО ИСПОЛЬЗОВАНИЮ АЛГОРИТМИЧЕСКИХ СТРУКТУР 323 5. Вторая причина — необходимость описания «мелких огрызков». Откуда берутся «мелкие огрызки»? В процессе декомпозиции силуэта может случиться (довольно редко), что какая-нибудь вставка окажется очень простой, элементарной. Настолько простой, что ее неудобно представлять в виде силуэта. Такую вставку можно назвать «мелким огрызком». Вот в этом (исключительном) случае полезно использовать примитив. Рис. 164а. Лист 1. (Комплект из 4-х листов формата A3) Рис. 1646. Лист 2. (Комплект из 4-х листов формата A3) ®-т- ПОЯСНЕНИЕ 1. На четырех рисунках (рис. 164а-164г) показана дракон-схема силуэт. Схема занимает 4 листа A3. 2. Мысленно расположите листы по горизонтали Пронумеруйте листы 1, 2, 3.4. 3. Все 4 листа соединены соединителями. 4. Дракон-схема из 4-х листов содержит 19 веток Рис. 164в. Лист 3. (Комплект из 4-х листов формата A3) Р!!!<::164г-Лист4' ВЫВОДЫ 1. Алгоритмы, как правило, следует рисовать как силуэты. 2. Сложные алгоритмы следует изображать как силуэты, в которых многократно используются иконы «вставка». Последние, в свою очередь, раскрываются как силуэты и т.д. 3. Примитивы рекомендуется применять только в крайних случаях.
Часть IV ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ И ФОРМАЛЬНОЕ ОПИСАНИЕ ЯЗЫКА ДРАКОН
Глава ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ (ДРАКОН-РЕДАКТОР) 21 Овладение техникой визуализации научно-технической информации, умение представить ее в виде ясного и простого рисунка имеют большое значение. Валерий Венда [1] ЗАЧЕМ НУЖЕН ДРАКОН-РЕДАКТОР? Разумеется, в случае крайней нужды дракон-схему можно нарисовать и вручную. Либо использовать универсальный графический редактор, на- пример, Visio. Однако это не лучший способ. Гораздо удобнее воспользоваться специальной программой, которая называется «дракон-редактор» (дракон-конструктор). Если же нужно создать дракон-программу, ручное рисование и универсальные редакторы вообще исключаются. Без дракон-редактора ввести дракон-алгоритм и дракон-программу в компьютер невозможно. В состав дракон-редактора входит меню графоэлементов (рис. 165). Чтобы нарисовать дракон-схему, пользователь сначала вызывает меню на экран персонального компьютера. А затем с его помощью рисует или, как говорят, конструирует дракон-схему. При этом важную роль играют так называемые заготовки. ЗАГОТОВКА-ПРИМИТИВ И ЗАГОТОВКА-СИЛУЭТ Чтобы вырастить огромное дерево, нужно бросить в землю маленькое семечко. Любая сколько угодно сложная дракон-схема тоже вырастает из семечка, которое называется заготовкой.
328 Часть IV. ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ Заготовки бывают двух сортов. Одна используется для построения дракон-схемы силуэт. Из другой получается примитив (рис. 166). Построение любой дракон-схемы выполняется за конечное число шагов путем соответствующих преобразований выбранной заготовки. ДА НЕТ Рис. 165. Меню дракон-редактора Заготовка для построения силуэта Заготовка для построения примитива Рис. 166. Преобразуя заготовки с помощью фиксированного набора формальных визуальных операций, можно построить любую дракон-схему ЧТО ТАКОЕ АТОМ? Элемент меню на рис. 165 называется атомом, если он имеет два вертикальных отростка. Дракон-редактор может выполнять несколько операций, среди которых важную роль играет команда «ввод атома» (рис. 167). Операция выполняется в два этапа: сначала пользователь выбирает нужный атом из меню, затем обращается к дракон-схеме и указывает точку, в которую нужно его ввести. Атомы вставляются не куда попало, а только в разрешенные места, которые называются валентными точками дракон-схемы. Перечень точек включает: • валентные точки заготовок (отмечены на рис. 166); • валентные точки макроикон (отмечены на рис. 2);
Глава 21. ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ (ДРАКОН-РЕДАКТОР) 329 Пример 1 те Пример4 Пример 7 ирмр t \ Элемент, выбираемый из меню Рис. 167. Примеры выполнения операции «ввод атома»
330 Часть IV- визуальный конструктор алгоритмов • входы и выходы атомов. Ввод атома производится так. Сначала происходит разрыв соединительной линии в выбранной пользователем валентной точке. Затем в место разрыва вставляется атом, как показано на рис. 167. В реальных дракон-схемах валентные точки не изображаются, а подразумеваются. ПРИМЕР ПОСТРОЕНИЯ ДРАКОН-СХЕМЫ «ПРИМИТИВ» Дракон-схема строится на экране компьютера методом «сборки из кубиков». В начале работы пользователь вызывает на экран визуальное меню (рис. 165). И размещает его в удобном для себя месте, например в правом верхнем углу экрана. Остальная часть экрана используется как рабочее поле для построения дракон-схемы. Предположим, мы хотим построить примитив. В начале графического конструирования пользователь обращается к меню, подводит курсор к макроиконе «заготовка-примитив» и копирует последнюю в рабочее поле экрана. На первом шаге пользователь вызывает из меню макроикону «обычный цикл». Но куда ее поместить? Пользователь подводит курсор к нужной точке в заготовке-примитив. К той самой точке, в которой следует разорвать соединительную линию, чтобы в образовавшийся разрыв вставить выбранную икону (рис. 168, шаг 1). Результат виден в шаге 2 слева. Два следующих шага выполняются аналогично. В дракон-схему последовательно вводятся две иконы «действие» (рис. 168, шаги 2 и 3). Далее следует ввод макроиконы «обычный цикл» (рис. 168, шаг 4). В конце производится ввод иконы «вставка» (рис. 168, шаг 5). Результат показан в шаге 6 (слева). После того как графический узор (слепыш) дракон-схемы построен, производится заполнение его текстом. ОПЕРАЦИЯ «ПЕРЕСАДКА ЛИАНЫ» Обезьяна, сидевшая на дереве, поймала свисавшую сверху лиану. Однако нижняя часть лианы приросла к стволу и не поддавалась. Обезьяна перегрызла ее зубами, уцепилась за конец и мигом перелетела на соседнее дерево, где прочно привязала лиану к ветке. Нечто подобное умеет делать и дракон-редактор. Роль верхнего конца лианы играет выход иконы «вопрос» или «вариант». Лиана — это присоединенная к выходу иконы «вопрос» последовательность шампур-блоков или просто соединительная линия. При некоторых условиях (подробно описанных в следующей главе) нижний конец лианы можно оторвать от своего места и присоединить в другую точку дракон-схемы. Такая операция называется пересадка лианы.
Глава 21. ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ (ДРАКОН-РЕДАКТОР) 331 Построение дракон-схемы Элемент, выбираемый из меню Пояснение Ввод макроиконы «обычный цикл». Результат показан в шаге 2 Ввод иконы «действие». Результат показан г в шаге 3 Ввод иконы «действие». Результат показан в шаге 4 Ввод макроиконы «обычный цикл». Результат показан в шаге 5 Ввод иконы «вставка». Результат показан в шаге 6 Слева показан результат работы дракон-редактора. Данная дракон-схема получена за 6 шагов Рис. 168. Конструирование дракон-схемы «примитив» с помощью дракон-редактора
332 Часть IV. ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ Пример Пример 2 ¦> Примерз ¦> Пример 4 У Пример 5 ¦> Пример 6 Исходная схема Промежуточный этап Результат Рис. 169. Примеры выполнения операции «пересадка лианы»
Глава 21. ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ (ДРАКОН-РЕДАКТОР) 333 Выполнение этой операции осуществляется в два этапа. Сначала курсор подводится к нижнему концу лианы, который надо освободить (рис. 169, левая графа). Но куда его присоединить? Пользователь выбирает желаемую точку и отмечает ее курсором (рис. 169, средняя графа). Результат операции «пересадка лианы» показан на том же рисунке в правой графе. Многие дракон-схемы, представленные в этой книге, построены с помощью пересадки лианы. Укажем некоторые из них: рис. 19, 39, 42, 46, 48, 61, 70 - 72, 87, 88, 95, 99,107-109. ОПЕРАЦИЯ «ЗАЗЕМЛЕНИЕ ЛИАНЫ» Функция «пересадка лианы» универсальна в том смысле, что она применима и к примитиву, и к силуэту. В отличие от нее операция заземление лианы относится только к силуэту. Она служит для построения веток, имеющих несколько выходов (многоадресных веток). Для этого необходимо: • организовать в ветке разветвление (с помощью макроикон «развилка» или «переключатель»); • оторвать присоединенную к ним лиану от прежнего места; • присоединить ее через икону «адрес» к нижней горизонтальной линии силуэта, то есть «заземлить» ее. Операция «заземление лианы» проводится в два этапа. Первый этап (отрыв нижнего конца лианы от своего места) осуществляется точно так же, как при пересадке лианы (рис. 170, левая графа). На втором этапе пользователь подводит курсор к нижней линии силуэта, указывая точку, куда лиана может дотянуться, не пересекая других линий (рис. 170, средняя графа). Это действие порождает автоматическое появление в нужном месте иконы «адрес». Лиана автоматически присоединяется к иконе «адрес». И через нее — к нижней линии силуэта (рис. 170, правая графа). Заземление лианы использовалось при построении силуэтов с многоадресными ветками. См., например, рис. 10, 19, 85—89, 123, 127, 128, 135. ПРИМЕР ПОСТРОЕНИЯ ДРАКОН-СХЕМЫ «СИЛУЭТ» Давайте построим силуэт, изображенный на рис. 85. Вначале обратимся к меню и вызовем в рабочее поле заготовку-силуэт (рис. 171, вверху слева). На первом шаге выполним операцию «добавление ветки». То есть модифицируем заготовку, вставляя в заготовку-силуэт еще одну ветку (рис. 171, шаг 2). Дальнейший ход строительства ясен из рисунков 171 и 172. В шагах 2—5 вставим четыре иконы «действие». В шаге 6 вставим макроикону «обычный цикл». Результат виден на рис. 172, шаг 7, слева.
334 Часть IV. ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ wapi\ Пример 1 Пример 2 Пример Пример 4 Рис. 170. Примеры выполнения операции «заземление лианы»
Глава 21. ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ (ДРАКОН-РЕДАКТОР) 335 Ш»г4; Шаг 5 Построение дракон-схемы Элемент, выбираемый из меню Пояснение Ввод ветки. Результат показан в шаге 2 Ввод иконы «действие». Результат показан в шаге 3 Ввод иконы «действие». Результат показан в шаге 4 Ввод иконы «действие». Результат показан в шаге 5 Ввод иконы «действие». Результат показан в шаге 6 Ввод макроиконы «обычный цикл». Результат показан в шаге 7. (См. рис. 172) Рис. 171. Конструирование дракон-схемы «силуэт» с помощью дракон-редактора. (Продолжение см. на рис. 172)
336 Часть IV. ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ Шаг 7 шаге Шаг 9 Шаг 10 Построение дракон-схемы Элемент, выбираемый из меню Пояснение Заземление лианы. (Отрыв нижнего : конца лианы). Результат показан в шаге 8 Заземление лианы. (Ввод иконы «адрес»). :;, Результат показан j в шаге 9 ; ;-^л- <* ч$ Ввод иконы «комментарий». Результат показан | в шаге 10 Слева показан результат работы дракон-редактора. Данная дракон-схема получена за 10 шагов V-Ц Рис. 172. Конструирование дракон-схемы «силуэт» с помощью дракон-редактора. (Шаги 7-10). Данный рисунок является продолжением рисунка 171
Глава 21. ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ (ДРАКОН-РЕДАКТОР) 337 Затем выполним заземление лианы (шаги 7—9). В заключение вставим икону «комментарий». Графическое конструирование заканчивается в момент получения желаемого слепыша (рис. 172, шаг 10). Затем в иконах записываются текстовые операторы, после чего визуальный алгоритм приобретает окончательный вид, показанный на рис. 85. ФОРМИРОВАНИЕ НАДПИСЕЙ «ДА» И «НЕТ» Вернемся к рис. 172 и обсудим еще один момент. Возле каждой иконы «вопрос» обязательно должны быть надписи «да» и «нет». Эти надписи появляются на дракон-схеме всякий раз, когда из меню вызывается элемент, содержащий икону «вопрос» (рис. 165). Редактор пишет «да» у нижнего выхода иконы «вопрос» и «нет» — у правого. Чтобы пользователь в случае необходимости мог поменять их местами, в редакторе предусмотрена операция «да/нет». При выполнении этой операции, слова «да» и «нет» у выходов иконы «вопрос» меняются местами. (При этом все остальные элементы дракон-схемы остаются на своих местах). Многократное нажатие на кнопку «да/нет» приводит к тому, что «да» и «нет» поочередно меняются местами. ЧЕМ ОТЛИЧАЕТСЯ ОПЕРАЦИЯ «ДА/НЕТ» ОТ РОКИРОВКИ? При рокировке алгоритм дракон-схемы не меняется. Потому что вместе со сменой «да» и «нет» плечи у развилки тоже меняются местами. Следовательно, рокировка — равносильное преобразование алгоритма (см. главу 5). При операции «да/нет» дело обстоит иначе. Меняются местами только «да» и «нет», а все остальные элементы остаются на своих местах. Следовательно, операция «да/нет» ИЗМЕНЯЕТ алгоритм. КАК ВСТАВИТЬ И УДАЛИТЬ ВЕТКУ По понятным причинам, наше описание дракон-редактора носит упрощенный характер. Чтобы пояснить эту мысль, рассмотрим две задачи: • вставить ветку в силуэт; • удалить ветку из силуэта. Эти задачи можно решать по-разному, например, так. Чтобы вставить ветку, надо на панели инструментов щелкнуть кнопку «вставить». Затем щелкнуть на иконе «имя ветки». Новая ветка будет вставлена СПРАВА от этой иконы. Чтобы удалить ветку, надо на панели инструментов щелкнуть кнопку «удалить». Затем щелкнуть на иконе «имя ветки». Данная ветка будет удалена полностью, включая все входящие в ее состав иконы и линии.
338 Часть IV- визуальный конструктор алгоритмов ГДЕ СКАЧАТЬ ДРАКОН-РЕДАКТОР? Первоначально среда разработки языка ДРАКОН была создана в Федеральном космическом агентстве для проектирования систем управления ракетно-космической техники. Она успешно применяется для разработки алгоритмов и программ бортового компьютера «Бисер», установленного на борту космических ракет. На втором этапе возникла необходимость приспособить эту среду для гражданских нужд широкого применения, для эксплуатации на персональных компьютерах и ноутбуках. Эту задачу попытался решить Геннадий Тышов. Продукт Тышова открыт для всех желающих. Его можно скачать на сайте www.oberoncore.ru. http://forum.oberoncore.ru/viewtopic.php?p=22669#p22669 http://forum.oberoncore.ru/viewforum.php?f=79 Консультации можно получить по адресам: • Визуальный язык ДРАКОН. http://forum.oberoncore.ru/viewforum.php?f=62 • Алгоритмы в дракон-схемах. Обсуждение способов и правил изображения алгоритмов. Примеры. http://forum.oberoncore.ru/viewforum.php?f==78 ВЫВОДЫ 1. Хотя общее число икон и макроикон языка ДРАКОН равно 45, для построения любой дракон-схемы достаточно иметь небольшое меню, содержащее всего 19 графоэлементов и операцию «да/нет». 2. Визуальное меню существенно облегчает работу пользователя — оно дает возможность конструировать дракон-схему методом «сборки из кубиков». Для этого служит операция «ввод атома», позволяющая доставать кубики из меню и укладывать их в проектируемую дракон-схему. 3. Другие операции («пересадка лианы», «заземление лианы» и т. д.) разрешают вносить в схему логические детали, расширяющие ее функциональные возможности и улучшающие эргономическое качество. 4. В алгоритмах дракон-редактора реализован полный набор правил визуального синтаксиса. Это обстоятельство почти полностью освобождает пользователя от необходимости запоминать синтаксические правила. 5. Дракон-редактор создает только правильно построенные графические схемы и исключает возможность появления запрещенных схем. Отсюда вытекает, что при работе с дракон-редактором ошибки визуального синтаксиса принципиально невозможны.
Глава ВИЗУАЛЬНЫЙ СИНТАКСИС ЯЗЫКА ДРАКОН 22 ...наглядность, говоря обыденным языком, в один день научает нас с большей легкостью и прочностью тому, чему не могут научить правила, повторяемые хотя бы тысячу раз, так как собственное наблюдение ... идет здесь рука об руку с теоретическим определением. Галилео Галилей [1] ОБЩИЕ ПОНЯТИЯ Тезис 1. Иконы — визуальные буквы, образующие визуальный алфавит языка ДРАКОН, представленный на рис. 1. Тезис 2. Заготовка-примитив и заготовка-силуэт — фигуры, показанные на рис. 166. Предварительный тезис 3. Примитив — фигура, полученная путем преобразования заготовки-примитив за конечное число шагов с помощью фиксированного набора операций (перечисленных ниже в тезисе 36). Предварительный тезис 4. Силуэт — фигура, полученная путем преобразования заготовки-силуэт за конечное число шагов с помощью фиксированного набора операций (перечисленных ниже в тезисе 37). Тезис 5. Дракон-схема — общее понятие для обозначения примитива и силуэта. ШАМПУР-БЛОК Тезис 6. Шампур-блок — часть дракон-схемы, имеющая один вход сверху и один выход снизу, содержащая одну или несколько икон, причем:
340 Часть IV- визуальный конструктор алгоритмов • вход и выход лежат на одной вертикали, через которую проходит путь от входа к выходу; • через каждую икону, входящую в состав шампур-блока, проходит хотя бы один путь от входа к выходу; • в состав шампур-блока могут входить любые иконы за исключением следующих: заголовок, конец, формальные параметры, петля силуэта. Тезис 7. Главная вертикаль шампур-блока — вертикаль, соединяющая его вход и выход. Остальные вертикали, если они есть, находятся правее главной. Все вертикали шампур-блока ориентированы сверху вниз, кроме цепей, используемых для организации петли цикла. ОПЕРАЦИЯ «ВВОД АТОМА» Тезис 8. Атомы — фигуры, изображенные на рис. 173. Эти фигуры используются в операции «ввод атома». Любой атом является шампур-блоком. Тезис 9. Валентная точка — точка, принадлежащая заготовке или дракон-схеме, в которой разрешается произвести разрыв соединительной линии, чтобы в место разрыв вставить атом с помощью операции «ввод атома». Тезис 10. Ввод атома — преобразование заготовки или дракон-схемы, выполняемое следующим образом: производится разрыв соединительной линии в валентной точке и в это место вставляется атом, как показано на рис. 167. ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ ОБ АТОМАХ Тезис 11. Атомы делятся на простые и составные. Простой атом состоит из одной иконы, составной содержит не менее двух (рис. 173). Тезис 12. Функциональный атом — простой атом, не являющийся пустым оператором. Таковы все простые атомы, кроме комментария. Тезис 13. Составные атомы бывают пустые и непустые. В непустом есть хотя бы один функциональный атом. В пустом нет ни одного. Тезис 14. В полностью законченной дракон-схеме не должно быть ни одного пустого атома (так как последний эквивалентен пустому оператору). Пустые атомы разрешается использовать на всех этапах построения дракон-схемы, кроме заключительного. КРИТИЧЕСКИЕ И НЕЙТРАЛЬНЫЕ ТОЧКИ Тезис 15. Валентные точки делятся на нейтральные и критические. Тезис 16. Точка называется нейтральной, если применение one-
Глава 22. ВИЗУАЛЬНЫЙ СИНТАКСИС ЯЗЫКА ДРАКОН 341 Атомы 7_ I Простые атомы I / \ Функциональные атомы Полка Вставка Ввод Пауза y таймера Параллельный процесс \ - Критическая валентная точка <j) - Нейтральная валентная точка Составные атомы Обычный цикл Переключающий цикл Цикл ДЛЯ Непустые атомы Цтп ЖДАТЬ Рис. 173. Атомы и валентные точки
342 Часть IV- визуальный конструктор алгоритмов рации «ввод атома» к данной точке является возможным, но не обязательным. В отличие от нее критическая точка требует обязательного ввода атома. Тезис 17. Валентные точки находятся в заготовках и атомах. Они показаны на рис. 166 и 173, где нейтральные точки обозначены светлыми кружками, критические — жирными точками. Тезис 18. Если в фигуре (заготовке или атоме) одна критическая точка, ввод атома обязательно производится именно в нее; при этом критическая точка уничтожается. Если фигура имеет две критические точки, обязательный ввод атома делается только в одну из них; при этом критическая точка, в которую произведен ввод, уничтожается, а другая критическая точка нейтрализуется, т. е. становится нейтральной. Тезис 19- Полная совокупность критических точек охватывает: • критические точки в пустых атомах; • одну критическую точку в заготовке-примитив; • одну критическую точку в заготовке-силуэт. Тезис 20. Полная совокупность нейтральных точек охватывает: • входные и выходные точки атомов; • две внутренние точки в атоме «цикл ЖДАТЬ»; • одну точку в заготовке-силуэт; • точки, полученные в результате нейтрализации критических точек. ПРАВИЛА ИСПОЛЬЗОВАНИЯ ОПЕРАЦИИ «ВВОД АТОМА» ПРИ ПОСТРОЕНИИ ДРАКОН-СХЕМЫ Тезис 21. Операция «ввод атома» применяется для ввода только простых и пустых атомов, а также цикла ЖДАТЬ. Ввод непустого атома осуществляется в два этапа; сначала вводится пустой атом, затем в его критическую точку вводится функциональный атом. Пояснение. Ввод пустого атома — удобный строительный прием. Он позволяет обеспечить богатство и разнообразие создаваемых дракон-схем и используемых в них конфигураций. Среди последних особую роль играет так называемая «матрешка». Тезис 22. Матрешка — фигура, полученная путем ввода пустого атома в критическую точку пустого атома, а также путем многократного вложения пустых и непустых атомов друг в друга (рис. 174). Тезис 23. Матрешка бывает пустой (если все содержащиеся в ней атомы пустые), частично пустой (если в ней есть как пустые, так и непустые атомы) и непустой (если все ее атомы непустые). См. рис. 175-177. Пояснение. После того как пользователь эффективно использовал пустые атомы для придания дракон-схеме желаемой конфигура-
Глава 22. ВИЗУАЛЬНЫЙ СИНТАКСИС ЯЗЫКА ДРАКОН 343 ции, он должен убрать их из схемы. Тезис 24. Чтобы устранить пустые атомы.из дракон-схемы, есть два способа: • превратить пустой атом в непустой; • преобразовать пустой атом в пустую матрешку, затем превратить ее в непустую. Тезис 25. Устранение из дракон-схемы пустых атомов автоматически приводит к уничтожению всех критических точек. ЛИАНА Тезис 26. Лиана — часть дракон-схемы, имеющая один вход и один выход, именуемые «началом лианы» и «концом лианы» соответственно. Началом лианы может быть любой выход икон «вопрос» и «вариант», если он (выход) не является петлей цикла. Концом лианы считается точка слияния, в которой нижняя часть лианы соединяется с другой линией (концом лианы не может быть нераз- ветвленный вход иконы). Тезис 27. Лиана может быть нагруженной (если она содержит иконы) и ненагруженной (если это просто линия). ПЕРЕСАДКА ЛИАНЫ Тезис 28. Пересадка лианы — преобразование дракон-схемы, выполняемое за четыре шага. Шаг 1. Производится отрыв конца лианы от точки присоединения (рис. 169). Шаг 2. Конец лианы с помощью вертикальных и горизонтальных линий присоединяется к любой валентной точке, куда лиана может дотянуться без пересечения с другими линиями (рис. 169). При этом запрещается: • формировать второй вход в ветку (ошибка «сиамские близнецы» — см. рис. 178); • образовывать новый цикл; • создавать второй вход в цикл. Однако разрешается строить новый путь из середины обычного цикла к единственному входу в этот цикл, создавая визуальный эквивалент оператора continue языка Си (см. рис. 130, пример 7, а также рис. 71). Шаг 3. Производится эквивалентное преобразование топологии дракон-схемы, чтобы • лиане не пришлось загибаться наверх (рис. 179); • соблюдались правила построения шампур-блока (рис. 180). Шаг 4. Устраняются неоправданные изломы линий (рис. 181).
344 Часть IV. ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ Рис. 174. Построение графоэлемента сматрешка» Рис. 175. Пустая матрешка Рис. 176. Частично пустая матрешка Рис. 177. Непустая матрешка СИАМСКИЕ БЛИЗНЕЦЫ, у которых срослись плечи ОШИБКА «СИАМСКИЕ БЛИЗНЕЦЫ»: у силуэта «срослись» ветки Линия XY является запрещенной Рис. 178. Ошибка «Сиамские близнецы» — это запрещенная связь между ветками
Глава 22. ВИЗУАЛЬНЫЙ СИНТАКСИС ЯЗЫКА ДРАКОН 345 ЗАЗЕМЛЕНИЕ ЛИАНЫ Тезис 29. Заземление лианы — преобразование дракон-схемы, выполняемое за четыре шага. Шаг 1. Производится отрыв конца лианы от точки присоединения (рис. 170). Шаг 2. Конец лианы с помощью вертикальной линии присоединяется к любой точке нижней горизонтальной линии силуэта, куда он может дотянуться, не пересекая другие линии. Шаг 3. Производится разрыв линии в нижней части лианы и в место разрыва вставляется икона «адрес» (рис. 170, 172 (шаги 8,9). Шаг 4. Устраняются неоправданные изломы линий. ПРОЧИЕ ОПЕРАЦИИ Тезис 30. Боковое присоединение — преобразование дракон-схемы, с помощью которого в схему добавляются иконы «синхронизатор» или «формальные параметры». Икона «синхронизатор» размещается слева от другой иконы и соединяется с ней горизонтальным отростком. Перечень икон, к которым осуществляется боковое присоединение синхронизатора, показан на рис. 2 (пункт 8-20). Икона «формальные параметры» размещается справа от иконы «заголовок» и соединяется с ней горизонтальным отростком, как показано на рис. 1 (пункт ИИ). Тезис 31. Добавление варианта — преобразование дракон-схемы, с помощью которого в атом «переключатель» добавляется еще одна икона «вариант». Число добавлений не более 14, так что максимальное число вариантов в переключателе равно 16. Тезис 32. Добавление ветки — преобразование силуэта, в который добавляется еще одна ветка. Число добавлений не более 30, так что максимальное число веток в силуэте равно 32. Эти цифры могут быть увеличены. Тезис 33. Удаление последней ветки — преобразование силуэта, при котором удаляется крайняя правая ветка. Этот прием используется при описании бесконечного параллельного процесса, как показано в примерах на рис. 127 и 128. Тезис 34. Удаление конца примитива — преобразование примитива, при котором удаляется икона «конец». Это необходимо для описания бесконечного параллельного процесса. Тезис 35. Дополнительный вход — преобразование силуэта, с помощью которого добавляется еще одна икона «заголовок», которая размещается над любой иконой «имя ветки» (кроме левой) и со-
346 Часть IV. ВИЗУАЛЬНЫЙ КОНСТРУКТОР АЛГОРИТМОВ Это конец лианы, который нужно оторвать Это точка, к которой надо присоединить оторванный конец Неправильно Правильно Рис. 179. Ошибка при пересадке лианы. Вертикаль АВ ориентирована снизу вверх, что запрещено. Это конец лианы, который нужно оторвать Это точка, к которой надо присоединить оторванный конец Неправильно Правильно Рис.180. Ошибка при пересадке лианы. Нарушено правило: «Вход и выход шампур-блока лежат на одной вертикали, через которую проходит путь от входа к выходу» Это конец лианы, который нужно оторвать Это точка, к которой надо присоединить оторванный конец Неправильно Правильно Рис.181. Ошибка при пересадке лианы. В точках А и В имеются неоправданные изломы линий, которые можно устранить
Глава 22. ВИЗУАЛЬНЫЙ СИНТАКСИС ЯЗЫКА ДРАКОН 347 единяется с ней вертикальным отростком. При этом на верхней горизонтальной линии силуэта рисуют направленную вправо стрелку, как показано в примере на рис. 123 справа. Ограничение. При наличии веточного цикла запрещается присоединять дополнительный заголовок к середине веточного цикла. ОСНОВНЫЕ РЕЗУЛЬТАТЫ Тезис 36. Любая правильно построенная дракон-схема «примитив» является результатом преобразования заготовки-примитив с помощью конечного числа операций: ввод атома, пересадка лианы, добавление варианта, боковое присоединение, удаление конца примитива. Тезис 37. Любая правильно построенная дракон-схема «силуэт» является результатом преобразования заготовки-силуэт с помощью конечного числа операций: ввод атома, добавление ветки, пересадка лианы, заземление лианы, добавление варианта, боковое присоединение, удаление последней ветки, дополнительный вход. Пояснение. Тезисы 36 и 37 могут рассматриваться как окончательные определения понятий «примитив» и «силуэт». ВЫВОДЫ 1. Изложенные выше 37 тезисов (вместе с рисунками, на которые они ссылаются) дают однозначное описание визуального синтаксиса, которое при желании можно изложить строгим математическим языком. 2. Это описание является достаточным для построения дракон-редактора, способного решить две задачи: • нарисовать (в соответствии с указаниями пользователя) любую абстрактную дракон-схему, принадлежащую множеству правильно построенных (удовлетворяющих требованиям визуального синтаксиса) дракон-схем; • создать в памяти компьютера формальное описание построенной схемы, пригодное (после заполнения икон надлежащими текстовыми операторами) для трансляции в объектные коды или для выполнения программы в режиме интерпретации.
Часть V ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН
Глава ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 23 Наше мышление основано в первую очередь на зрительном восприятии. Вадим Глезер [1] ПОСТАНОВКА ПРОБЛЕМЫ Введем термин «визуальное структурное программирование». Определим его как набор правил, совпадающий с визуальным синтаксисом языка ДРАКОН. В концентрированном виде эти правила изложены в главе 22. Размышляя над проблемой, автор пришел к следующим предварительным выводам или, лучше сказать, предположениям. • Несмотря на наличие целого ряда общих признаков, текстовое и визуальное структурное программирование — существенно разные вещи. • Традиционное (текстовое) структурное программирование является, по-видимому, наилучшим решением соответствующей задачи для традиционного (текстового) программирования. • Для визуального программирования подобное утверждение неправомерно. Можно, конечно, тупо перенести правила текстового структурного программирования на визуальный случай. Но это не будет хорошим решением. • Чтобы разработать эффективный метод структуризации для визуального варианта, необходимо, взяв за основу правила текстового структурного программирования, значительно модифицировать их. • Принципы структуризации, положенные в основу визуального синтаксиса языка ДРАКОН, являются искомым решением. В данной главе сделана попытка обосновать заявленные выводы. В качестве исходной точки для нашего анализа возьмем работы Эдсгера Дейкстры.
352 Часть V. ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН ГЕНИЙ ПРОГРАММИРОВАНИЯ Эдсгер Вибе Дёйкстра A930—2002) — выдающийся нидерландский учёный, идеи которого оказали огромное влияние на развитие программирования. В 1970-е годы вместе с Чарлзом Хоаром, Никлаусом Виртом и др. он разработал основные положения структурного программирования, ставшего классикой методологии разработки программ. Одна из основных идей Дейкстры состоит в том, чтобы превратить программирование из хаоса в строгую дисциплину. Он писал: «...искусство программировать — это умение организовать сложную систему и управлять ее бесчисленными элементами, пресекая всеми силами присущую им тенденцию к изначальному хаосу» [2, с. 12]. Для решения этой задачи Дёйкстра ввел строжайшую «дисциплину программирования» [3]. Эта дисциплина, то есть совокупность жестких правил, призвана обеспечить интеллектуальный контроль за разработкой программ и минимизировать программные ошибки. Выдающийся нидерландский ученый Эдсгер Дёйкстра
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 353 РАЗВИТИЕ КОНЦЕПЦИИ ДЕЙКСТРЫ Работы Дейкстры по структурному программированию послужили исходной идеей для разработки языка ДРАКОН. Предлагаемое нами визуальное структурное программирование — это непосредственное развитие идей Дейкстры. Почему возникла необходимость в таком развитии, то есть в существенной доработке идей нидерландского ученого? Можно указать три причины. • Дисциплина программирования Дейкстры является неоправданно жесткой. Она вводит излишние запреты и лишает программиста свободы. Образно говоря, она заковывает программиста в кандалы и затрудняет его работу. • Дейкстра недооценил потенциальные возможности блок-схем (flow-charts). И не сумел дать блок-схемам строгое математическое обоснование, пригодное для трансляции блок-схем в объектные коды. • Дейкстра не был знаком с когнитивной эргономикой и не смог превратить блок-схемы одновременно и в эргономичный, и в математический объект. Впрочем, он и не ставил перед собой такой задачи. НЕДОЧЕТЫ В РАБОТАХ ДЕЙКСТРЫ Эдсгер Дейкстра, несомненно, великий человек. Однако у великих людей, разумеется, могут быть и ошибки. В данном случае речь пойдет не об ошибке, а об упущении. О математическом упущении, которое, как нам кажется, неблагоприятно отразилось на мировой практике программирования. В чем суть? Как известно, Дейкстра ввел три управляющие конструкции: сочленение (последовательность), выбор (развилка), повторение (цикл). Внимательно прочитаем его рассуждения: Эдсгер Дейкстра Фрагмент из работы Заметки по структурному программированию Итак, мы познакомились с тремя типами разложения; можно называть их соответственно «сочленение», «выбор», «повторение»... Программы, при написании которых управление последовательностью действий осуществляется только при помощи выбора и повторения, допускают непосредственный перевод на некий язык программирования, который отличается от исходного только тем, что все управление последовательностью действий должно быть выражено
354 Часть V. ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН передачами управления на метки. Однако обратное утверждение было бы неправильным. Напротив, если мы ограничимся указанными тремя типами разложения, то это приведет к ограничению топологии блок- схем по сравнению с различными блок-схемами, которые могут быть получены, если разрешить проведение стрелок из любого блока в любой другой блок. Отказавшись от большого разнообразия блок-схем и ограничившись данными тремя типами операторов управления, мы следуем тем самым некоей последовательностной дисциплине. ...я предлагаю придерживаться этой последовательностной дисциплины... [2, с. 28] Что же мы узнали? Дейкстра выделяет три понятия: сочленение, выбор и повторение. Он называет их ОПЕРАТОРАМИ управления. С точки зрения математики это место не совсем корректно. В самом деле, если посмотреть на текст программы, никто не увидит оператор сочленения. Операторы выбора есть, операторы повторения (циклы) есть, а оператора сочленения нет. Конечно, само сочленение есть: оно состоит в том, что команды пишутся подряд. Но ОПЕРАТОРА сочленения нет. Выходит, что некоторые операции из выделенной Дейкстрой тройки понятий имеют операторы и ключевые слова, а другие нет. Это некрасиво (а если отбросит деликатность — не строго). Следующий вопрос. А где оператор вложения? Ведь само вложение есть (например, «цикл в цикле»). А оператора вложения нет. Налицо логическая неувязка. КАК ПОПРАВИТЬ ДЕЛО Этот недостаток можно легко устранить, если изменить общий взгляд на процедурное программирование. Каким образом? Для этого необходимо: • заменить линейный текст программы на графический; • во главу угла поставить не три текстовые управляющие структуры Дейкстры, а операцию — вложение. Причем операцию вложения следует рассматривать сквозь призму математической логики. Как логический вывод. В языке ДРАКОН именно так и сделано. Подробные объяснения читатель найдет в главе 24. Но уже сейчас можно дать предварительные пояснения. Уже говорилось, что в ДРАКОНе важную роль играет операция «ввод атома». Добавим сюда же «ввод ветки». Эти операции есть не что иное, как вложения.
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 355 Легко заметить, что порядок написания текстовой и визуальной программ заметно отличается: • В варианте Дейкстры команды пишутся подряд (при этом форма написания программы «не подталкивает» программиста к тому, чтобы заглянуть в конец программы). • В варианте ДРАКОНа в заготовке-примитив и в заготовке-си- луэт программист сразу видит не только начало, но и конец. Почти все визуальные операторы вставляются в дракон-программу с помощью операций «ввод атома» и «ввод ветки». То есть с помощью вложения. Причем указанные операторы вставляются между началом и явно указанным концом программы. Таким образом, программа строится с помощью цепочки вложений. Атомы вставляются между началом и концом заготовки. Преимущество в том, что цепочка вложений помогает программисту вырабатывать ЦЕЛОСТНЫЙ, ОБЗОРНЫЙ взгляд на программу, включая ее начало и конец. В визуальном структурном программировании предлагается отказаться от трех текстовых управляющих структур (последовательность, развилка, цикл) и использовать визуальную управляющую конструкцию — вложение. Кроме того, предлагаются операции с лианами. ПРЫЖОК ИЗ ЦАРСТВА НЕОБХОДИМОСТИ В ЦАРСТВО СВОБОДЫ Рассмотрим следующий недостаток. Дейкстрианская революция состоит bjtom, что Дейкстра ввел строгую дисциплину в анархическом царстве процедурного программирования. Но любая дисциплина — это ограничение свободы. Недостаток в том, что Дейкстра ввел неоправданно жесткие ограничения. Фактически Дейкстра добился успеха за счет того, что ввел интеллектуальное рабство и заковал программистов в кандалы. Первые голоса протеста прозвучали в самом начале его мощной атаки против засилья анархистов. Оппоненты доказывали, что знаменитый лозунг Дейкстры «оператор goto вреден» (GOTO statement considered harmful [4]) в ряде случаев не верен. Со временем им удалось заметно облегчить тюремный режим и сделать кандалы более легкими. Они, использовали приемы, которые я называю «заменителями goto» (см. объяснения чуть ниже). Подчеркнем главную мысль. Мы предлагаем отказаться от линейного текста программы и превратить ее (программу) в графическую дракон- схему. Если сохранить линейный текст программы, то прогресс невозможен. Тюрьма неизбежно будет тюрьмою. И железными решетками на ее
356 Часть v- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН окнах по-прежнему останутся так называемые «текстовые структурные управляющие конструкции». Когда-то они сыграли позитивную роль и помогли победить анархистов (как иногда говорят, превратить программирование из шаманства в науку). Сегодня тюрьма имени Эдсгера Дейкстры тормозит повышение производительности труда программистов. Почему? Потому что Дейкстра построил удивительно прочную тюрьму, в которой почти все запрещено. Куда ни повернись — все нельзя! Задача состоит в том, чтобы спилить решетки на окнах тюрьмы, резко уменьшить число запретов и ограничений. То есть предоставить узникам свободу. Эту задачу и решает язык ДРАКОН. Следуя по мудрому пути, начертанному великим Дейкстрой, визуальный язык ДРАКОН, тем не менее, устраняет кандалы и разрушает тюрьму, построенную Дейкстрой. И позволяет совершить прыжок из царства необходимости в царство свободы. Каким образом? Благодаря замене текстового структурного программирования на визуальное структурное программирование. Последнее, разумеется, также является дисциплиной. Но в ней большинство запретов снимается. То, что раньше было нельзя, теперь можно. Многие запреты Дейкстры «перегибают палку»; они противоречат здравому смыслу и затрудняют понимание алгоритмов и программ. Пример приведен на рис. 46. Дейкстра запретил подобные алгоритмы, объявив их неструктурными. Но такие алгоритмы часто встречаются в практическом производстве. Конструкция на рис. 46 не считается «структурной управляющей конструкцией». Поэтому (согласно Дейкстре) она запрещена. Что отсюда следует? Наш ответ таков: пусть текстовые управляющие конструкции отправляются на заслуженную пенсию. Потому что во многих случаях (хотя и не всегда) они искажают нормальный ход человеческой мысли. Недопустимо запрещать правильный процесс мышления. Его надо разрешить. И ДРАКОН разрешает. Сегодня следует поблагодарить великого нидерландского ученого за его фундаментальный вклад в развитие программирования. И поставить почетный караул у его памятника. Но надо также осознать, что в современных условиях текстовые управляющие конструкции — устаревшее понятие. НОВАЯ ФИЛОСОФИЯ ПРОЦЕДУРНОГО ПРОГРАММИРОВАНИЯ В рамках философии ДРАКОНа ключевые слова управляющих конструкций становятся ненужными. Они рассматриваются как лишние и даже вредные. В самом деле, глядя на дракон-схему, нельзя обнаружить эти ключевые слова даже под микроскопом. Почему? Потому что в языке ДРАКОН используется совершенно другой понятийный аппарат (атомы, валентные точки и т.д.) — см. главу 22.
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 357 Смена понятийного аппарата — это переход к новому пониманию глубинной сущности вещей, то есть к новому мировоззрению в области процедурного программирования. ДРАКОН — это не просто новый язык (новое семейство языков). Это новый взгляд на процедурное программирование. Если угодно — новое мировоззрение. МАТЕМАТИЧЕСКИЕ ОСНОВЫ ЯЗЫКА ДРАКОН. МЕТОД АШКРОФТА-МАННЫ К языку ДРАКОН ведут несколько математических тропинок. Одна из них — метод Ашкрофта-Манны. С помощью этого метода любую неструктурную программу можно превратить в структурную. Это чисто теоретический метод, который в реальной работе обычно не применяется. Более того, известный специалист по надежности программ Гленфорд Майерс подчеркивает, что метод Ашкрофта-Манны «никогда не следует использовать на практике» [5, с. 137] Почему же мы о нем вспомнили? Потому, что результат, получаемый с помощью метода Ашкрофта-Манны, почти полностью совпадает с дракон-схемой «силуэт». А силуэт служит мощным средством для повышения производительности труда. Ниже мы покажем, что метод Ашкрофта-Манны можно использовать для математического обоснования языка ДРАКОН. Но сначала несколько слов о самом методе. Эдвард Йодап Отрывок из книги СТРУКТУРНОЕ ПРОЕКТИРОВАНИЕ И КОНСТРУИРОВАНИЕ ПРОГРАММ Метод введения переменной состояния Другой метод преобразования неструктурных программ был предложен Ашкрофтом и Манной [6]... В этом методе интересно то, что он применим к любым программам (в частности, содержащим циклы и другие сложные конструкции)... Процесс преобразования состоит из пяти шагов. Он иллюстрируется примером программы, показанной на рис. 182. 1. Каждому блоку неструктурной схемы приписывается номер. Заметим, что на рис. 182 это уже сделано. Способ присваивания номеров произвольный. Но обычно принимают соглашение: обозначать номером 1 первый исполняемый блок программы. И номером 0 — последний исполняемый блок.
358 Часть V- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН 2. В программу вводится новая переменная. Для нашей цели требуется переменная целого типа. Имя переменной произвольное. В нашем примере новая переменная обозначена через I 3. Функциональные блоки неструктурной схемы заменяются функциональными блоками, которые выполняют те же самые вычисления. Кроме того, они присваивают переменной г целое значение, идентифицирующее номер блока-преемника в исходной схеме (рис. 182). Так, блок В на рис. 182 во всех случаях передает управление блоку D. Мы пометили блок В цифрой 2, а блок D — цифрой 4. На рис. 183 блок В выполняет тот же процесс, что и на рис. 182. Но в дополнение присваивает переменной г значение 4. 4. Логические блоки на рис. 182 преобразуются точно так же. Если решением логического блока является «истина», то переменной присваивается номер блока-преемника исходной схемы, отвечающей этому решению. Если решением является «ложь», то переменной присваивается номер блока-преемника исходной схемы, отвечающей значению «ложь». В схеме на рис. 182 блок 1 выполняет проверку Л, определяющую выбор перехода на блок 2 или блок 3. На рис. 183 блок 1 выполняет проверку А и, сверх того, присваивает переменной г значение 2, если условие А удовлетворяется. Или значение 3, если условие А не удовлетворяется. 5. Далее мы перестроим всю блок-схему на рис. 182, придав ей форму, показанную на рис. 183. Начальным значением переменной г выбрано (в соответствии с принятым ранее соглашением) целое число 1. Затем мы последовательно опрашиваем значения переменной z, исполняем соответствующее действие, повторяем опрос г и т.д. В результате схема на рис. 182 превращается в схему на рис. 183... Пояснение Преимущество метода состоит в том, что описанное выше преобразование может быть неограниченно продолжено. Например, вместо шести состояний на рис. 182, мы могли бы рассмотреть пример с шестьюдесятью состояниями, не усложняя при этом общего подхода... Каждому блоку исходной схемы на рис. 182 соответствует определенное состояние программы на рис. 183, то есть ситуация, в которой либо проверяется логическое условие, либо выполняется некоторая обработка. Многие программисты (глядя на рис. 183), делают вывод, что реализация метода введения переменной состояния предполагает использование вложенных конструкций IF-THEN-ELSE. Хотя этот способ возможен, более вероятна реализация с использованием сочетания конструкции DO-WHILE и конструкции CASE [7, с. 192-196].
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 359 Упрощение программ Ашкрофта-Манны Принцип упрощения. Если в программе Ашкрофта-Манны переменной состояния г присваивается значение только в одном месте, то указанное значение можно удалить, а программу Ашкрофта-Манны — упростить [7, с. 226, п. 41]. ПЕРВЫЙ ПРИМЕР УПРОЩЕНИЯ ПРОГРАММЫ АШКРОФТА-МАННЫ Обратимся к рис. 183. Глядя на правый столбец икон «действие», можно заметить, что значения переменной состояния г можно разделить на две части: • значения 3, 4, 5 присваиваются только один раз; • значения 0,1, 2 присваиваются более одного раза. Из принципа упрощения следует, что значения 3, 4, 5 можно удалить из программы. В результате программа станет проще. Убедимся в этом на примере. Для начала уберем из рис. 183 только одно значение, а именно, 4. Результат показан на рис.. 184. Обратите внимание, что схема изменилась. Если г = 2, то справа выполняется блок В, а затем логический блок D. При этом значение переменной состояния i = 4 из схемы исчезло. ВТОРОЙ ПРИМЕР УПРОЩЕНИЯ ПРОГРАММЫ АШКРОФТА-МАННЫ Мы устранили значение 4. Продолжим работу и удалим из рис.184 (из квадратов) еще два значения переменной состояния: i = 3 и г = 5. Результат показан на рис. 185. В схеме остались три значения переменной состояния: г = 0, i = 1, г = 2. Схема существенно упростилась. ПРЕОБРАЗОВАНИЕ УПРОЩЕННОЙ ПРОГРАММЫ АШКРОФТА-МАННЫ В ДРАКОН-СХЕМУ «СИЛУЭТ» Преобразование схемы Ашкрофта-Манны на рис. 185 в силуэт выполняется за шесть шагов. Шаг 1. Схема поворачивается на 90° против часовой стрелки. Шаг 2. Схема отражается сверху вниз. (Результат показан на рис. 186). Шаг 3. Верхние и нижние фигуры на рис. 186 превращаются в иконы «имя ветки» и «адрес» соответственно. Шаг 4. Имя переменной состояния удаляется.
360 Часть v- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН Шаг 5. Внутри икон «имя ветки» и «адрес» записываются имена, обозначающие переход из иконы «адрес» в икону «имя ветки». (На рис. 187 в порядке исключения написаны номера). Шаг 6. Ветка, содержащая икону «конец», перемещается в крайнюю правую позицию. (Результат показан на рис. 187). ПРЕОБРАЗОВАНИЕ ПРОИЗВОЛЬНОЙ (НЕУПРОЩЕННОЙ) ПРОГРАММЫ АШКРОФТА-МАННЫ В ДРАКОН-СХЕМУ «СИЛУЭТ» Рассмотрим общий случай — произвольную программу Ашкрофта- Манны. Чтобы превратить программу Ашкрофта-Манны в силуэт, ее вовсе не обязательно упрощать. Неупрощенная схема показана на рис. 183. Ее преобразование в силуэт производится за те же самые шесть шагов, что описаны в предыдущем параграфе. Результат первых двух шагов представлен на рис. 188. Выполнив остальные шаги D—6), получим окончательный результат — дракон-схему «силуэт» на рис. 189. Проведенные рассуждения позволяют сделать два вывода. Вывод 1. Метод Ашкрофта-Манны можно рассматривать как математическое обоснование основополагающей конструкции языка ДРАКОН — конструкции «силуэт». Вывод 2. Визуальный синтаксис языка ДРАКОН является строгим формализмом. ЗАМЕНИТЕЛИ GOTO Согласно классической теореме Бома и Джакопини, всякая реальная программа может быть построена из функциональных блоков (действий) и двух конструкций: цикла и дихотомического выбора (развилки) [8]. Эдсгер Дейкстра обогатил и усилил эту идею, предложив отказаться от оператора безусловного перехода goto и ограничиться тремя управляющими конструкциями: последовательность, выбор, цикл [2, с. 25—28]. Дональд Кнут подверг критике тезис Дейкстры о полном исключении gotoу продемонстрировав случаи, где goto полезен [9]. В итоге возникла плодотворная дискуссия, в ходе которой выявились четыре варианта мнений (табл. 3).
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 361 3»s Рис. 182. Неструктурная схема. Применим к ней метод Ашкрофта- Манны Рис. 183. Структурная схема. Она получена из схемы на рис. 182 с помощью метода Ашкрофта-Манны Шаг 1. Значение переменной состояния i := 4 на рис. 183 встречается только один раз. Поэтому переменную 1 = 4 (в ромбе и в квадрате) можно удалить. Схема на рис. 184 стала проще (так как две иконы удалены) Рис. 184. Первый шаг к упрощению схемы на рис. 183
362 Часть V. ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН Шаг 2. Значение переменной состояния f := 3 на рис. 183 встречается только один раз. Поэтому переменную I = 3 (в ромбе и в квадрате) можно удалить. Шаг 3. Значение переменной состояния l := 5 на рис. 183 встречается только один раз. Поэтому переменную i = 5 (в ромбе и в квадрате) можно удалить. Рис. 185. Окончательная схема, полученная после упрощения схемы на рис. 183 (в результате выполнения всех трех шагов и удаления шести икон) Преобразование схемы Ашкрофта- Манны в дракон- схему «силуэт» выполняется за 6 шагов. На этой схеме показаны шаги 1 и 2. Шаги 3-6 показаны на рис. 187 Шаг 1. Схема Ашкрофта-Манны на рис. 185 поворачивается на 90° против часовой стрелки. Шаг 2. Схема отражается сверху вниз. (Промежуточный результат показан на рис. 186) Рис. 186. Преобразование упрощенной схемы Ашкрофта-Манны (см. рис. 185) в дракон-схему «силуэт». (Шаги 1 и 2)
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 363 Шаг 3. Верхние и нижние фигуры на рис. 186 превращаются в иконы «имя ветки» и «адрес» соответственно. Шаг 4. Имя переменной состояния удаляется. Шаг 5. Внутри икон «имя ветки» и «адрес» записываются имена, обозначающие переход из иконы «адрес» в икону «имя ветки». (На данной схеме в порядке исключения написаны номера, но обычно пишут не номера, а имена). Шаг б. Ветка, содержащая икону «конец», перемещается в крайнюю правую позицию Рис. 187. Преобразование упрощенной схемы Ашкрофта-Манны (см. рис. 186) в дракон-схему «силуэт». (Шаги 3—6) i:=2 i:=3 »:=4 г:=5 i:=2 JL ± i:=0 Шаг 1. Схема Ашкрофта-Манны на рис. 183 поворачивается на 90е против часовой стрелки. Шаг 2. Схема отражается сверху вниз. Результат показан на рис. 188 (Шаги 3-6 показаны на рис. 187 ) - Рис. 188. Преобразование обычной (неупрощенной) схемы Ашкрофта-Манны (см. рис. 183) в дракон-схему «силуэт». (Шаги 1, 2)
364 Часть V. ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН Шаг 3. Верхние и нижние фигуры на рис. 188 превращаются в иконы «имя ветки» и «адрес» соответственно. Шаг 4. Имя переменной состояния удаляется. Шаг 5. Внутри икон «имя ветки» и «адрес» записываются имена, обозначающие переход из иконы «адрес» в икону «имя ветки». (На данной схеме в порядке исключения написаны номера, но обычно пишут не номера, а имена). Шаг 6. Ветка, содержащая икону «конец», перемещается в крайнюю правую позицию Рис. 189. Преобразование обычной (неупрощенной) схемы Ашкрофта-Манны (см. рис. 183) в дракон-схему «силуэт». (Шаги 3-6) Таблица 3 Позиция участников дискуссии Вариант 1 Вариант 2 Вариант 3 Вариант 4 Используются три структурные конструкции? Да Да Да Да Используются заменители goto? Нет Нет Да Да , Используются, goto? Нет Да Да Нет Вариант 1 описывает ортодоксальную позицию Дейкстры, согласно которой оператор goto имеет «гибельные последствия» и поэтому «должен быть исключен из всех языков программирования высокого уровня». Исходя из этого, были разработаны языки без goto: Модула-2, Оберон и др. Вариант 2 отражает мнение ранних критиков Дейкстры, позиция которых выражается словами:
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 365 «использование оператора goto может оказаться уместным в лучших структурированных программах»; «всегда были примеры программ, которые не содержат goto и аккуратно расположены лесенкой в соответствии с уровнем вложенности операторов, но совершенно непонятны, и были другие программы, содержащие goto и все же совершенно понятные». Нужно «избегать использования goto всюду, где это возможно, но не ценой ясности программы» [10, с. 89; 5, с. 134,137-138]. Как известно, полемика по goto «растревожила осиное гнездо» и всколыхнула «весь программистский мир». Варианты 1 и 2 выражают крайние позиции участников дискуссии, между которыми, как казалось вначале, компромисс невозможен. Однако ситуация изменилась с изобретением и широким распространением заменителей goto, примерами которых являются: • в языке Си — операторы break, continue, return и функция exit (); • в языке Модула-2 — операторы RETURN, EXIT, процедура HALT и т.д. Заменители — особый инструмент, который существенно отличается как от трех структурных управляющих конструкций, так и от goto. Они обладают двумя важными преимуществами по сравнению с goto: 1) не требуя меток, заменители исключают ошибки, вызванные путаницей с метками; 2) каждый заменитель может передать управление не куда угодно (как goto), а в одну-единственную точку, однозначно определяемую ключевым словом заменителя и его местом в тексте. В результате множество точек, куда разрешен переход, сокращается на порядок, что также предотвращает ошибки. Вариант 3 описывает языки Си, Ада и др., где имеются заменители и на всякий случай сохраняется goto. Вариант 4 соответствует языкам Модула-2 и Оберон, где также есть заменители, однако goto исключен. Следует подчеркнуть, что при наличии заменителей сфера применения goto резко сужается. Так что удельный вес ошибок, связанных с его применением, заметно уменьшается. Поэтому вопрос об исключении goto, по-видимому, теряет прежнюю остроту. Идея структуризации оказала большое влияние на разработку программ. Практически во все процедурные языки (точнее, во все процедурные фрагменты языков) были введены структурные конструкции цикла и ветвления, а также различные заменители goto. ОТ ТЕКСТОВОГО ПРОГРАММИРОВАНИЯ — К ВИЗУАЛЬНОМУ Структурное программирование породило преувеличенные надежды, которые сменились разочарованием, так как производительность труда программистов и качество программ росли медленнее, чем ожидалось. Возникла необходимость в поиске новых подходов. Одним из наиболее
366 Часть v- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН перспективных направлений является замена текстового программирования на визуальное. Игорь Вельбицкий пишет: [Отображние структуры программы] с помощью линейных текстов (последовательности операторов) сводит практически на нет преимущества структурного подхода. Огромные ассоциативные возможности зрительного аппарата и аппарата мышления человека используются практически вхолостую — для распознавания структурных образов в виде единообразной последовательности символов» [11]. Развивая мысль, Вельбицкий противопоставляет текстовое и визуальное программирование, приходит к заключению, что «на рельсах текстового представления программ» резервы повышения производительности труда в программировании исчерпаны. И делает вывод о необходимости изменить «базис» программирования, то есть перейти от текстового программирования к визуальному. В настоящее время визуальное программирование бурно развивается, число его сторонников растет. Тем не менее, уместно спросить: в какой мере предлагаемый пересмотр понятия «структура программы» согласуется с пионерскими взглядами Дейкстры? ЧЕТЫРЕ ПРИНЦИПА СТРУКТУРИЗАЦИИ БЛОК-СХЕМ, ПРЕДЛОЖЕННЫЕ Э. ДЕЙКСТРОЙ Попытаемся еще раз заглянуть в темные переулки истории и внимательно перечитаем классический труд Дейкстры «Заметки по структурному программированию» [2]. К немалому удивлению, мы обнаружим, что основной тезис о структурных управляющих конструкциях излагается с прямой апелляцией к визуальному языку блок-схем! Непосредственный анализ первоисточника со всей очевидностью подтверждает простую мысль. Дейкстрианская «структурная революция» началась с того, что Дейкстра, использовав блок-схемы как инструмент анализа структуры программ, предложил наряду с другими важными идеями четыре принципа структуризации блок-схем! К сожалению, в дальнейшем указанные принципы были преданы забвению или получили иное, по нашему мнению, слишком вольное толкование. Эти принципы таковы. 1. Принцип ограничения топологии блок-схем. Структурная программа должна приводить «к ограничению топологии блок-схем по сравнению с различными блок-схемами, которые могут быть получены, если разрешить проведение стрелок из любого блока в любой другой блок. Отказавшись от большого разнообразия блок-схем и ограничившись ...тремя типами операторов управления, мы следуем тем са-
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 367 мым некоей последовательностной дисциплине» [2, с. 28]. 2. Принцип вертикальной ориентации входов и выходов блок-схемы. Имея в виду шесть типовых блок-схем (if-do, if-then-else, case-of, while-do, repeat-until, а также «действие»), Дейкстра пишет: «Общее свойство всех этих блок-схем состоит в том, что у каждой из них один вход вверху и один выход внизу» [2, с. 27]. 3. Принцип единой вертикали. Вход и выход каждой типовой блок- схемы должны лежать на одной вертикали. 4. Принцип нанизывания типовых блок-схем на единую вертикаль. При последовательном соединении типовые блок-схемы следует соединять, не допуская изломов соединительных линий, чтобы выход верхней и вход нижней блок-схемы лежали на одной вертикали. Хотя Дейкстра не дает словесной формулировки третьего и четвертого принципов, они однозначно вытекают из имеющихся в его работе иллюстраций [2, с. 25—28]. Чтобы у читателя не осталось сомнений, мы приводим точные копии подлинных рисунков Дейкстры (рис. 190, средняя и левая графа). Таким образом, можно со всей определенностью утверждать, что две идеи (текстовое и визуальное структурное программирование), подобно близнецам, появились на божий свет одновременно. Однако этих близнецов ожидала разная судьба — судьба принца и нищего. ПОЧЕМУ НАУЧНОЕ СООБЩЕСТВО НЕ ПРИНЯЛО ВИДЕОСТРУКТУРНУЮ КОНЦЕПЦИЮ Э. ДЕЙКСТРЫ? Далее события развивались довольно загадочным образом, поскольку вокруг видеоструктурной1 концепции Дейкстры образовался многолетний заговор молчания. Неприятность в том, что изложенные выше рекомендации Дейкстры не были приняты во внимание разработчиками национальных и международных стандартов на блок-схемы (ГОСТ 19.701-90, стандарт ISO 5807-85 и т. д.). В итоге метод стандартизации, единственный метод, который мог бы улучшить массовую практику вычерчивания блок-схем, не был использован. Вследствие этого идея Дейкстры оказалась наглухо изолированной от реальных блок-схем, используемых в реальной практике программирования. В чем причина этой более чем странной ситуации? Здесь уместно сделать отступление. Американский историк и философ Томас Кун в книге «Структура научных революций» говорит о том, что в истории науки время от времени появляются особые периоды, когда выдвигаются «несоизмеримые» с прежними взглядами научные идеи. 1 В дальнейшем мы будем нередко использовать приставку «видео», трактуя ее как «относящийся к визуальному программированию» или «относящийся к визуальному представлению знаний».
368 Часть V. ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН Структурные операторы Дейкстры Структурные блок-схемы Дейкстры Дракон-схемы If ? do S1 1 1 81 t t If ? then S1 else S2 81 -' * С / case i of (S1;S2;...Sn) while ? do S i 8 | I ? , i repeat S until ? :" ?1 1 5 5 i i j *<* i Рис. 190. Структурные блок-схемы Дейкстры и эквивалентные им визуальные операторы языка ДРАКОН
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 369 Последние он называет парадигмами [12]. История науки — история смены парадигм. Разные парадигмы — это разные образцы мышления ученых. Поэтому сторонникам старой парадигмы зачастую бывает сложно или даже невозможно понять сторонников новой парадигмы (новой системы идей), которая приходит на смену устоявшимся стереотипам научного мышления. По нашему мнению, текстовое и визуальное программирование — это две парадигмы, причем нынешний этап развития программирования есть болезненный процесс ломки прежних взглядов, в ходе которого прежняя текстовая парадигма постепенно уступает место новой визуальной парадигме. При этом — в соответствии с теорией Куна — многие, хотя и не все видные представители прежней, отживающей парадигмы проявляют своеобразную слепоту при восприятии новой парадигмы, которая в ходе неустанной борьбы идей в конечном итоге утверждает свое господство. Этот небольшой экскурс в область истории и методологии науки позволяет лучше понять причины поразительного невнимания научного сообщества к изложенным Дейкстрой принципам структуризации блок- схем. Начнем по порядку. Формальная блок-схема — это двумерный чертеж. Следовательно, она является инструментом визуального программирования. Отсюда следует, что предложенные Дейкстрой принципы структуризации блок-схем есть не что иное, как исторически первая попытка сформулировать основные (пусть далеко не полные и, возможно, нуждающиеся в улучшении) принципы видеоструктурного программирования. Однако в 1972 г., в момент публикации работы Дейкстры [2], визуальное программирование как термин, понятие и концепция фактически еще не существовало. Поэтому, что вполне естественно, суть концепции Дейкстры была воспринята сквозь призму господствовавших тогда догматов текстового программирования со всеми вытекающими последствиями. Так родилась приписываемая Дейкстре и по праву принадлежащая ему концепция текстового структурного программирования. При этом (что также вполне естественно) в означенное время никто не обратил внимания на тот чрезвычайно важный для нашего исследования факт, что исходная формулировка концепции Дейкстры имела явно выраженную визуальную компоненту. Она представляла собой метод структуризации блок-схем, то есть была описана в терминах видеоструктурного программирования. Подобное невнимание привело к тому, что авторы стандартов на блок- схемы посчитали, что данная идея их не касается, ибо относится исключительно к тексту программ. Они дружно проигнорировали или, скажем мягче, упустили из виду визуальную компоненту структурного метода Дейкстры. Справедливости ради добавим, что и сам отец-основатель ( Э. Дейкстра), обычно весьма настойчивый в продвижении и популяризации своих идей, отнесся к своему видеоструктурному детищу с удивительным безразли-
370 Часть V. ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН чием. И ни разу не выступил с предложением о закреплении структурной идеи в стандартах на блок-схемы. ПАРАДОКС СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ Мы подошли к наиболее интригующему пункту в истории структурного программирования. Чтобы выявить главное звено проблемы, зададим вопрос: являются ли блок-схемы и структурное программирование взаимно исключающими, несовместимыми решениями? В литературе по этому вопросу наблюдается редкое единодушие: да, они несовместимы. Вот несколько отзывов. По мнению многих авторов, блок-схемы: «не согласуются со структурным программированием, поскольку в значительной степени ориентированы на использование goto» [5, с. 150]. Они «затемняют особенности программ, созданных по правилам структурного программирования» [13, с. 193]. «С появлением языков, отвечающих принципам структурного программирования,... блок-схемы стали отмирать» [14, с. 21]. Парадокс в том, что приведенные высказывания основываются на недоразумении. Чтобы логический дефект стал очевидным, сопоставим две цитаты по методу «очной ставки» (табл. 4). Сравнивая мнение современных авторов с позицией Дейкстры, нетрудно убедиться, что описываемый критиками изъян действительно имеет место. Но! Лишь в том случае, если правила вычерчивания блок-схем игнорируют предложенный Дейкстрой принцип ограничения топологии блок- схем. И наоборот, соблюдение указанного принципа сразу же ликвидирует недостаток. Таблица 4 Мнение критиков, убежденных в невозможности структуризации блок-схем «Основной недостаток блок- схем заключается в том, что они не приучают к аккуратности при разработке алгоритма. Ромб можно поставить в любом месте блок- схемы, а от него повести выходы на какие угодно участки. Так можно быстро превратить программу в запутанный лабиринт, разобраться в котором через некоторое время не сможет даже сам ее автор» [14, с. 21]. Предложение Э> Дейкстры о структуризации блок-схем Структуризация блок-схем с неизбежностью приводит «к ограничению топологии блок-схем по сравнению с различными блок- схемами, которые могут быть получены, если разрешить проведение стрелок из любого блока в любой другой блок. Отказавшись от большого разнообразия блок-схем и ограничившись... тремя операторами управления, мы следуем тем самым некоей последовательност- ной дисциплине» [2, с. 28]
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 371 ПЛОХИЕ БЛОК-СХЕМЫ ИЛИ ПЛОХИЕ СТАНДАРТЫ? Проведенный анализ позволяет сделать несколько важных замечаний. • Обвинения, выдвигаемые противниками блок-схем, неправомерны, потому что ставят проблему с ног на голову. Дело не в том, что блок- схемы по своей природе противоречат принципам структуризации, а в том, что при разработке стандартов на блок-схемы указанные принципы не были учтены. На них просто не обратили внимания, поскольку в ту пору — именно в силу парадигмальной «слепоты» — считалось, что на практике структурное программирование следует применять к текстам программ, а отнюдь не к блок-схемам. • Чтобы сделать блок-схемы пригодными для структуризации, необходимо ограничить и регламентировать их топологию с учетом видеоструктурных принципов Дейкстры. • Видеоструктурная концепция Дейкстры — это фундаментальная идея, высказанная более тридцати лет назад и оказавшаяся невостребованной, поскольку она значительно опередила свое время. • Эту задачу решает предлагаемый нами математически строгий метод формализации блок-схем, который развивает видеоструктурную концепцию Дейкстры. С помощью данного-метода разработана новая топология блок-схем (дракон-схемы), регламентация которой произведена на основе принципа когнитивной формализации знаний. Наибольшую трудность в течение длительного времени представляла математика блок-схем. Нужно было создать математически строгий метод формализации блок-схем, позволяющий превратить блок-схемы в программу, пригодную для ввода в компьютер и трансляции в объектный модуль программы. Язык ДРАКОН позволил эффективно решить эту задачу. Одновременно была решена задача эргономизации блок-схем, то есть задача приспособления блок-схем для наиболее удобного человеческого восприятия и понимания. БЛОК-СХЕМЫ И ТЕОРЕТИЧЕСКОЕ ПРОГРАММИРОВАНИЕ Наш интерес к структуризации и формализации блок-схем имеет и другую, не менее серьезную причину. Дело в том, что теоретическое программирование, в частности, теория схем программ (схематология) [15] и теория оптимизирующих преобразований программ [16] тесно связаны с теорией графов. По словам академика Андрея Ершова, «графы являются основной конструкцией для программиста», так как они «обладают огром-
372 Часть v- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН ной, неисчерпаемой изобразительной силой, соразмерной масштабу задачи программирования» [17]. Для наших целей особенно важным является тот факт, что «графовая форма схем программ» [15] или, что одно и то же, «графовая схема» [18] (короче, граф-схема) аналогична блок-схеме [15,16]. Более того, как убедительно показал А. Ершов, использовавший блок-схемы в качестве граф-схем [19], разграничение этих понятий является в некотором смысле условным. Различия в начертании (топологии) блок-схем и граф-схем несущественны, а наличие двух терминов оправдывается скорее разными сферами применения, так как термин «блок-схема» используется преимущественно в практическом, а «граф-схема» — в теоретическом программировании. ВИЗУАЛЬНОЕ И ТЕКСТОВОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ Можно предложить восемь правил, устанавливающих соответствие между понятиями визуального и текстового структурного кодирования. 1. Макроикона «развилка» (рис. 173), в которую произведен ввод функционального атома в левую или обе критические точки, эквивалентна конструкциям if-then и if-then-else соответственно [21]. См. также две верхние графы на рис. 190. 2. Макроикона «обычный цикл» (рис. 173), в которую произведен ввод функционального атома в одну или обе критические точки, эквивалентна конструкциям do-until, while-do, do-while-do соответственно [21]. См. также две нижние графы на рис. 190. 3. Непустая макроикона «переключатель» (рис. 173), в которую введено нужное число икон «вариант» с помощью операции «добавление варианта», эквивалентна конструкции case [2, с. 27]. См. также рис. 190. 4. Непустая макроикона «цикл ДЛЯ» (рис. 173) эквивалентна циклу for языка Си. 5. Непустая макроикона «переключающий цикл» (рис. 173), в которую введено нужное число икон «вариант», эквивалентна циклу с вложенным оператором case, используемым, например, при построении рекурсивных структурированных программ [21]. 6. Шампур-блок — видеоструктурный эквивалент понятия «простая программа» [21]. 7. Атом — общее понятие для основных составляющих блоков, необходимых для построения программы согласно структурной теореме Бома и Джакопини [8]. Оно охватывает также все элементарные структуры структурного кодирования, кроме последовательности [21]. (Последняя в шампур-методе считается неэлементарной структурой). 8. Операция «ввод атома» позволяет смоделировать две операции:
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 373 • построить последовательность из двух и более атомов; • методом заполнения критических точек осуществить многократное вложение составных операторов друг в друга. Благодаря этому единственный функциональный блок «постепенно раскрывается в сложную структуру основных элементов». Воспользуемся термином «базовые операции» для обозначения операций «ввод атома», «добавление варианта» и «боковое присоединение». Применяя к заготовке-примитив базовые операции любое число раз, мы всегда получим структурную дракон-схему в традиционном смысле слова. СТРУКТУРНЫЕ, ЛИАННЫЕ И АДРЕСНЫЕ БЛОКИ Шампур-метод позволяет строить как структурные, так и лианные программы. Выше мы выяснили, что базовые операции моделируют классическое структурное программирование. Чтобы смоделировать полезные функции оператора goto, в шампур-методе предусмотрены операции «пересадка лианы» и «заземление лианы». Введем три понятия. Структурный блок — шампур-блок, построенный только с помощью базовых операций, без использования действий с лианой. Лианный блок — шампур-блок, полученный из структурного блока с помощью операции «пересадка лианы». Адресный блок — результат преобразования структурного блока с помощью операции «заземление лианы» и, возможно, «пересадка лианы». Адресный блок используется только в силуэте и представляет собой многоадресную ветку (или ее нижнюю часть). Он имеет один вход и не менее двух выходов, присоединенных к нижней горизонтальной линии силуэта через иконы «адрес». В примитиве могут использоваться только структурные и лианные блоки (рис. 191, 192). В силуэте — все три типа блоков: структурные, лианные и адресные (рис. 193, 194). ОПЕРАЦИИ С ЛИАНОЙ И ОПЕРАТОР GOTO Операции с лианой моделируют все без исключения функции заменителей goto (например, дополнительный выход из цикла), а также некоторые функции goto, которые невозможно реализовать с помощью заменителей. Однако они не приводят к хаосу, вызванному бесконтрольным использованием goto. С эргономической точки зрения, действия с лианой на порядок эффективнее и удобнее, чем goto и заменители. Кроме того, они весьма эффективно корректируют недостатки классического структурного программирования. Чтобы убедиться,рассмотрим пример. В главе 5 мы рассмотрели эргономические преимущества схемы на рис. 48 по сравнению с рис. 47.
374 Часть V. ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН Показано, что улучшение эргономичности достигнуто за счет использования равносильных преобразований алгоритмов: вертикального и горизонтального объединения. При этом за кадром осталась важная проблема — проблема синтаксиса. Как построить указанные схемы? Теперь мы имеем возможность осветить этот вопрос. Схема на рис. 47 представляет собой структурный блок, полученный с помощью операции «ввод атома». В отличие от нее схема на рис. 48 — это лианный блок, построенный методом пересадки лианы. Уместно вспомнить предостережение Гленфорда Майерса: «Правила структурного программирования часто предписывают повторять одинаковые фрагменты программы в разных участках модуля, чтобы избавиться от употребления операторов goto. В этом случае лекарство хуже болезни. Дублирование резко увеличивает возможность внесения ошибок при изменении модуля в будущем» [5, с. 138]. Как видно из рис. 39, 42, 48 пересадка лианы позволяет элегантно и без потерь решить эту непростую проблему, одновременно улучшая наглядность и понятность программы, обеспечивая более эффективное топологическое упорядочивание маршрутов. Пересадка лианы узаконивает лишь некоторые, отнюдь не любые передачи управления, поскольку определение данной операции (см. главу 22, тезис 28) содержит ряд ограничений. Запрет на образование нового цикла вызван тем, что переход на оператор, расположенный выше (раньше) в тексте программы, считается «наихудшим применением оператора goto» [5, с. 135]. Указанный запрет вводится, чтобы выполнить требование: использовать goto только для передачи управления вперед по программе, которое считается более приемлемым. Запрет на образование второго входа в цикл соответствует требованию структурного программирования, согласно которому цикл, как и любая простая программа, должен иметь не более одного входа. Лишь третий запрет является оригинальной особенностью шампур- метода: он запрещает передачи управления, изображение которых с помощью лианы ведет к пересечению линий. Таким образом, пересадка лианы разрешает только те переходы вниз по дракон-программе, которые образуют связи с валентными точками и изображаются легко прослеживаемыми маршрутами, то есть непересекающимися линиями. В визуальном структурном программировании аналогом goto и заменителей служат формальные операции «пересадка лианы» и «заземление лианы».
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 375 Рис. 191. Примитив, построенный из структурных блоков Рис. 192. Примитив, построенный из структурных и лианных блоков Рис. 193. Силуэт, построенный из структурных блоков
u> Рис. 194. Силуэт, построенный из структурных, лианных и адресных блоков _с m О О m О О о п: о 00 Рис. 195. Детерминированный конечный автомат, соответствующий силуэту на рис. 194 -а О
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 377 МАТЕМАТИЧЕСКИЕ ОСНОВЫ ЯЗЫКА ДРАКОН. КОНЕЧНЫЙ АВТОМАТ Выше мы показали, что математической основой дракон-схемы «силуэт» является метод Ашкрофта-Манны. Но это не единственное математическое решение. Рассмотрим второе. Силуэт на рис. 194 можно интерпретировать как детерминированный конечный автомат, показанный на рис. 195. Входной алфавит и переходная функция автомата не показаны [23]. Каждая ветка силуэта характеризует состояние автомата. Переход с ветки на ветку означает переход из одного состояния в другое. Характеристика силуэта как конечного автомата имеет большое значение, так как автоматное программирование широко используется при разработке контроллеров. Автоматное программирование — это метод программирования, при котором программа или её фрагмент осмысливается как модель какого- либо формального автомата. Определяющими для автоматного программирования являются следующие особенности: • Временной период выполнения программы разбивается на шаги автомата, каждый из которых представляет собой выполнение определённой (одной и той же для каждого шага) секции кода с единственной точкой входа. Такая секция может быть оформлена, например, в виде отдельной функции и может быть разделена на подсекции, соответствующие отдельным состояниям автомата; • Передача информации между шагами автомата осуществляется только через явно обозначенное множество переменных, называемых состоянием автомата. Между шагами автомата программа (или её часть, оформленная в автоматном стиле) не может содержать неявных элементов состояния, таких как значения локальных переменных в стеке, адреса возврата из функций, значение текущего счётчика команд и т.п. Иначе говоря, состояние программы на любые два момента входа в шаг автомата могут различаться между собой только значениями переменных, составляющих состояние автомата (причём такие переменные должны быть явно обозначены в качестве таковых) [24]. Применение дракон-схемы силуэт позволяет заметно упростить решение некоторых автоматных задач. ПОЧЕМУ САМОЛЕТ НЕ МАШЕТ КРЫЛЬЯМИ? Говоря о будущем структурного программирования, необходимо осознать, что текстовое и визуальное программирование опираются на разные системы понятий, которые по-разному расчленяют действительность. Поэтому визуальное структурное программирование нельзя рассматри-
378 Часть v- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН вать как результат механического перевода устоявшихся понятий классического структурного программирования на новый язык. Поясним сказанное. При визуальном структурном программировании программист работает только с чертежом программы, не обращаясь к ее тексту. Точно так же программист, работающий, скажем, на Паскале, не обращается к ассемблеру и машинному коду — они для него просто не существуют! Это значит, что столь тщательно обоснованная Дейкстрой коллекция ключевых слов структурного кодирования (if, then, else, case, of, while, do, repeat, until, begin, end [2]) при переходе к визуальному программированию становится ненужной. Для программиста она просто перестает существовать! В равной степени становятся лишними и отмирают и другие ключевые слова, используемые оппонентами Дейкстры в различных вариантах расширения структурного кодирования: goto, continue, break, exit и т.д. Поскольку в визуальном варианте структурного программирования ключевое слово goto не используется, теряют смысл и все споры относительно законности или незаконности, опасности или безопасности его применения. Становится ненужной обширная литература, посвященная обсуждению этого, некогда казавшегося столь актуальным вопроса. Предвижу возражения: хотя названные ключевые слова действительно исчезают, однако выражаемые ими понятия сохраняют силу и для визуального программирования. Например, две программы на рис. 47, 48 можно построить с помощью понятий if-then-else и goto. Данное возражение нельзя принять, поскольку произошла подмена предмета обсуждения. С помощью указанных понятий можно построить не визуальные программы, а текстовые программы, эквивалентные визуальным программам на рис. 47, 48. Что касается собственно визуальных программ, то они, будучи «выполнимой графикой», строятся из «выполняемых» икон и «выполняемых» соединительных линий. Подчеркнем еще раз — при построении программы с помощью дракон-редактора пользователь не применяет понятия if-then-else и goto, ибо в этом нет никакой необходимости. Нельзя путать задачу и систему понятий, на которую опирается метод ее решения. В обоих случаях — и при текстовом, и при визуальном структурном кодировании — ставится одна и та же задача: улучшить понима- емость программ и обеспечить более эффективный интеллектуальный контроль за передачами управления. Однако система понятий коренным образом меняется. Ту функцию, которую в текстовой программе выполняют ключевые слова, в визуальной программе реализуют совершенно другие понятия: иконы, макроиконы, соединительные линии, шампур, главная вертикаль шампур-блока, лиана, атом, пересадка лианы, запрет пересечения линий и т.д. Очевидно, что использование понятий, выражаемых ключевыми словами классического структурного программирования, не является самоцелью. Оно служит для того, чтобы «делать наши программы разумными,
Глава 23. ВИЗУАЛЬНОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 379 понятными и разумно управляемыми» [3, с. 272]. Указанные понятия решают эту задачу не во всех случаях, а только в рамках текстового программирования. При переходе к визуальному программированию задача решается по- другому, с помощью другого набора понятий. Отказ от старого набора понятий и замена его на новый позволяет добиться новой постановки задачи и более эффективного ее решения. Поэтому высказываемое иногда критическое замечание: «недостаток шампур-метода в том, что он не удовлетворяет требованиям структурного программирования» является логически неправомерным. Нельзя упрекать самолет за то, что он не машет крыльями. ВЫВОДЫ 1. Визуальное структурное программирование (шампур-метод) и текстовое структурное программирование несоизмеримы (в кунов- ском смысле слова), они опираются на разные системы понятий, которые по-разному расчленяют действительность. 2. Текстовое структурное программирование решило стоявшие перед ним исторические задачи, исчерпало свои эвристические возможности и, выполнив свою миссию, потеряло актуальность. В настоящее время точкой роста научного знания является визуальное структурное программирование. 3. При использовании шампур-метода набор ключевых слов классического структурного программирования становится ненужным. Благодаря этому создаются предпосылки, которые в будущем, возможно, позволят исключить ключевые слова и тем самым устранить путающий всех разнобой ключевых слов и структурных конструкций в разных языках программирования. 4. В отличие от текстового структурного программирования шампур- метод является полностью формальным. 5. По эргономическим показателям визуальное структурное программирование существенно превосходит свой текстовый аналог. 6. Широко распространенное мнение о несовместимости блок-схем и структурного программирования является мифом, нелепой ошибкой, основанной на невнимательном прочтении классической работы Э. Дейкстры «Заметки по структурному программированию». 7. Дальнейшее использование неструктурных, неформальных и неэргономичных блок-схем во всех случаях следует признать нецелесообразным. 8. Актуальной задачей является разработка нового стандарта на блок- схемы. В основу проекта нового стандарта целесообразно положить изложенные в этой книге правила визуального структурного программирования.
Глава ИСЧИСЛЕНИЕ ИКОН 24 Зрительные образы — плоть и кровь самого мышления. Рудольф Арнхейм [1] ВИЗУАЛЬНОЕ ЛОГИЧЕСКОЕ ИСЧИСЛЕНИЕ Попытаемся взглянуть на визуальный синтаксис языка ДРАКОН с позиций математической логики. Нашему взору откроется необычная картина. Оказывается, любая абстрактная дракон-схема представляет собой теорему, которая строго выводится (доказывается) из двух аксиом, каковыми являются заготовка-примитив и заготовка-силуэт. \ — Какие же это аксиомы? — вправе удивиться читатель. — Ведь это просто картинки-слепыши! А дракон-схемы вовсе не похожи на теоремы! Кто и зачем их должен доказывать? Наверно, это шутка или метафора. — Вовсе нет, отнюдь не метафора. Ниже будет показано, что визуальный синтаксис ДРАКОНа построен как логическое исчисление (назовем его «исчисление икон»). Данное исчисление можно рассматривать как раздел визуальной математической логики. Последнее понятие не является традиционным. Математическая логика и ее основные понятия (исчисление, логический вывод и т. д.) сформировались в рамках текстовой парадигмы. В данной главе, по-видимому, впервые вводятся визуальные аналоги этих понятий. И на их основе строится исчисление икон. ОБЩЕИЗВЕСТНЫЕ СВЕДЕНИЯ О МАТЕМАТИЧЕСКОЙ ЛОГИКЕ Принципиальным достижением математической логики является разработка современного аксиоматического метода, который характеризуется тремя чертами:
Глава 24. ИСЧИСЛЕНИЕ ИКОН 381 • явной формулировкой исходных положений (аксиом) развиваемой теории (формальной системы); • явной формулировкой правил логического вывода, с помощью которых из аксиом выводятся теоремы теории; • использованием формальных языков для изложения теорем рассматриваемой теории [2]. Основным объектом изучения в математической логике являются логические исчисления. В понятие исчисления входят: а) формальный язык, который задается с помощью алфавита и синтаксиса, б) аксиомы, в) правила вывода [2]. Таким образом, исчисление позволяет, зная аксиомы и правила вывода, получить (то есть вывести, доказать) все теоремы теории. Причем теоремы, как и аксиомы, записываются только на формальном языке. Напомним, что в рамках математической логики следующие термины можно рассматривать как синонимы: • логическое исчисление, • формальная система, ' • теория. Следовательно, теоремы исчисления, теоремы формальной системы и теоремы теории — одно и то же. ОБ ОДНОМ РАСПРОСТРАНЕННОМ ЗАБЛУЖДЕНИИ Существуют два подхода к формализации человеческих знаний: визуальный (графический, изобразительный) и текстовый. С этой проблемой связано любопытное противоречие. С одной стороны, преимущество графики перед текстом для человеческого восприятия считается общепризнанным. Потому что человеческий мозг в основном ориентирован на визуальное восприятие и люди получают информацию при рассмотрении графических образов быстрее, чем при чтении текста. Игорь Вельбицкий совершенно справедливо указывает: «Текст — наиболее общая и наименее информативная в смысле наглядности и скорости восприятия форма представления информации», а чертеж — «наиболее развитая интегрированная форма представления знаний» [3]. С другой стороны, теоретическая разработка принципов визуальной формализации знаний все еще не развернута в должной мере. Причину отставания следует искать в истории науки, в частности в особенностях развития математики и логики.
382 Часть v- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН В этих дисциплинах с давних пор (иногда явно, чаще неявно) предполагалось, что результаты математической и логической формализации знаний в подавляющем большинстве случаев должны иметь форму текста (а не изображения). Например, Стефен Клини пишет: «Будучи формализованной, теория по своей структуре является уже не системой осмысленных предложений, а системой фраз, рассматриваемых как последовательность слов, которые, в свою очередь, являются последовательностями букв... В символическом языке символы будут обычно соответствовать целым словам, а не буквам, а последовательности символов, соответствующие фразам, будут называться «формулами»... Теория доказательств... предполагает... построение произвольно длинных последовательностей символов» [4]. Из этих рассуждений видно, что Клини (как и многие другие авторы) ставит в центр исследования проблему текстовой формализации и полностью упускает из виду всю совокупность проблем, связанных с визуальной формализацией. Анализ литературы, посвященной данной теме, показывает, что большинство ученых исходит из неявного предположения, что научное знание — это прежде всего «текстовое» знание. Они полагают, что наиболее адекватной (или даже единственно возможной) формой для представления результатов научного исследования является последовательность формализованных и неформализованных фраз. То есть текст (а отнюдь не визуальные образы). В основе этого предположения лежит ошибочная точка зрения, которую можно охарактеризовать как «принцип абсолютизации текста». ПРИНЦИП АБСОЛЮТИЗАЦИИ ТЕКСТА Суть его можно выразить, например, в форме следующих рассуждений. Прогресс науки обеспечивается успехами логико-математической формализации и разработкой новых научных понятий и принципов, а не усовершенствованием рисунков. Формулы и слова выражают сущность научной мысли. Рисунки — это всего лишь иллюстрации к научному тексту. Они облегчают понимание уже готовой, сформированной научной мысли, но не участвуют в ее формировании. Короче говоря, язык науки — это формулы и предложения, но никак не картинки. В науке есть суть, сердцевина, от которой зависит успех научного творчества и получение новых научных результатов. Она выражается логико-математическими формализмами, научными понятиями и суждениями, выраженными в словах.
Глава 24. ИСЧИСЛЕНИЕ ИКОН 383 И есть вспомогательные задачи — обучение новичков, обмен информацией между учеными. Здесь-то и помогают картинки, облегчая взаимопонимание. Кроме того, рисунки имеют необязательную, свободную и нестрогую форму, их невозможно формализовать. Поэтому формализация научного знания несовместима с использованием рисунков. Таким образом, рисунки есть нечто внешнее по отношению к науке. Совершенствование языка рисунков и научный прогресс — разные вещи, они не связаны между собой. Существует ряд работ, косвенным образом доказывающих, что принцип абсолютизации текста является ошибочным и вредным [5, 6 и др.]. Сегодня все больше ученых приходит к выводу, что визуальную формализацию знаний нельзя рассматривать как нечто второстепенное для научного познания, поскольку она входит в саму ткань мысленного процесса ученого и «может опосредовать самые глубинные, творческие шаги научного познания» [5]. Вместе с тем в математической логике визуальные методы, насколько нам известно, пока еще не нашли широкого применения. Иными словами, математическая логика по сей день остается оплотом текстового мышления и текстовых методов формализации знаний. Это обстоятельство играет отрицательную роль, мешая поставить последнюю точку в доказательстве ошибочности «принципа абсолютизации текста». Далее мы попытаемся на частном примере исчисления икон продемонстрировать принципиальную возможность визуализации по крайней мере некоторых разделов или, скажем аккуратнее, вопросов математической логики. ВИЗУАЛИЗАЦИЯ ПОНЯТИЙ МАТЕМАТИЧЕСКОЙ ЛОГИКИ Нам понадобится определение двух понятий: • визуальный логический вывод (видеовывод); • визуальное логическое исчисление (видеоисчисление). Чтобы облегчить изучение материала, используем уже знакомый читателю метод очной ставки. Мы поместим в левой графе таблицы 5 хорошо известное «текстовое» понятие. А в правой — определение нового, визуального понятия.
384 Часть V. ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН Таблица 5 Определение понятия «логическийвывод> у .л Вывод в исчислении V есть пос- ледовательност С., ... , Сп формул, такая, что для люоого г формула Q есть • либо аксиома исчисления V; • либо непосредственное следствие предыдущих формул по одному из правил вывода. Формула Сп называется теоремой исчисления V, если существует вывод в V, в котором последней формулой является Сп[7]. Определение понятия ; - ,.. * / «видеовывод» ; . * J> (визуальный логический вывод) Видеовывод в видеоисчислении V есть последовательность Cv ... Сп видеоформул, такая, что для любого г видеоформула С\ есть • либо видеоаксиома видеоисчисления V; Ф либо непосредственное следствие предыдущих видеоформул по одному из правил видеовывода. Видеоформула Сп называется видеотеоремой видеоисчисления У, если существует видеовывод в V, в котором последней видеоформулой является Сп Новое определение (справа) почти дословно совпадает с классическим (слева). Разница состоит лишь в добавлении приставки «видео». Таблица 6 Определение понятия «логическое йшйслёщё» Логическое исчисление может быть представлено как формальная система в виде четверки V=<H,S0,A,F> где И — множество базовых элементов (букв алфавита); S() — множество синтаксических правил, на основе которых из букв строятся правильно построенные формулы; А — множество правильно построенных формул, элементы которого называются аксиомами; F— правила вывода, которые из множества А позволяют получать новые правильно построенные формулы — теоремы [8]. Определение понятия «видеоисчисление» (визуальное логическое исчисление) Видеоисчисление может быть представлено как формальная система в виде четверки V=<H,S()iA,F> где И ¦— множество икон (букв визуального алфавита); So — множество правил визуального синтаксиса, на основе которых из икон строятся правильно построенные видеоформулы; А — множество правильно построенных видеоформул, элементы которого называются видеоаксиомами; F — правила видеовывода, которые из множества А позволяют получать новые правильно построенные видеоформулы — видеотеоремы. (Множество теорем 1 обозначим через Т)
Глава 24. ИСЧИСЛЕНИЕ ИКОН 385 Развивая этот подход и опираясь на «текстовое» определение логического исчисления, можно по аналогии ввести понятие «видеоисчисление» (табл. 6). ИСЧИСЛЕНИЕ ИКОН Итак, мы определили нужные понятия визуальной математической логики. С их помощью можно построить исчисление икон. • Множество икон И (букв визуального алфавита) задано тезисом 1 (см. главу 22) и показано на рис. 1. • Множество So правил визуального синтаксиса описано в главе 22 в тезисах 2—37. • Множество А визуальных аксиом включает всего два элемента: заготовку-примитив и заготовку-силуэт (рис. 166). Далее будем называть их аксиома-примитив и аксиома-силуэт. • Множество Г, охватывающее все видеотеоремы исчисления V, есть не что иное как множество абстрактных дракон-схем. Заметим, что множество Г не включает аксиомы, так как последние содержат незаполненные критические точки и, следовательно, эквивалентны пустым операторам. Множество Т распадается на две части: множество примитивов Т1 и множество силуэтов Т2. • Множество F правил видеовывода также делится на две части F1 и F2. Множество F1 позволяет выводить все теоремы-примитивы, принадлежащие множеству Т1, из единственной аксиомы-примитива. Оно содержит пять правил вывода: ввод атома, добавление варианта, пересадка лианы, боковое присоединение, удаление конца примитива. Эти правила описаны в тезисах 10, 21, 28, 30, 31, 34 главы 22. • Множество F2 дает возможность выводить все теоремы-силуэты множества Т2 из единственной аксиомы-силуэта. Оно содержит восемь правил вывода: ввод атома, добавление варианта, добавление ветки, пересадка лианы, заземление лианы, боковое присоединение, удаление последней ветки, дополнительный вход. Правила вывода для силуэта описаны в тезисах 10, 21, 28—33, 35 главы 22. На этом построение исчисления икон заканчивается. СЕМАНТИКА АБСТРАКТНЫХ ДРАКОН-СХЕМ Известно, что изучение исчислений составляет синтаксическую часть математической логики. Кроме того, последняя занимается семантическим изучением формальных языков, причем основным понятием семантики служит понятие истинности [2]. В исчислении икон семантика тривиальна. Различные видеоформулы (блок-схемы) могут быть истинными или ложными.
386 Часть V. ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН Видеоформула называется истинной, если она — либо аксиома, либо выводится из аксиом с помощью правил вывода (то есть является теоремой). И ложной в противном случае. Таким образом, все правильно построенные абстрактные дракон-схемы (теоремы) истинны. И наоборот, неправильно построенные схемы, не удовлетворяющие визуальным правилам языка ДРАКОН, считаются ложными. Примеры ложных схем показаны на рис. 58, 60, 62, а также 190 (в средней графе). МАТЕМАТИЧЕСКИЕ ОСНОВЫ ЯЗЫКА ДРАКОН. ИСЧИСЛЕНИЕ ИКОН Мы предложили три математических метода, которые являются математическим обоснованием языка ДРАКОН: • метод Ашкрофта-Манны; • конечные автоматы; • исчисление икон. Первые два метода были описаны в главе 23. Эти методы хорошо известны. Наша задача состояла лишь в том, чтобы использовать известные методы в качестве математического фундамента для обоснования нового объекта — языка ДРАКОН. Последний метод (исчисление икон) разработан нами заново и описан в этой главе. ЕЩЕ РАЗ О ШАМПУР-МЕТОДЕ Ранее мы определили шампур-метод как теорию визуального структурного программирования. В этой главе появилась возможность значительно обогатить это понятие и рассматривать его как исчисление икон, включая вопросы интерпретации последнего. Чтобы подчеркнуть теоретический характер шампур-метода, целесообразно слегка изменить терминологию. В частности, использование названия ДРАКОН, связанного с практической разработкой конкретных языков программирования, для теоретических целей представляется неуместным. Поэтому произведем замену терминов. Шампур-схема — абстрактная дракон-схема. Подчеркнем, что шампур- схема по определению является абстрактной, то есть полностью лишенной текста (за исключением слов «да» и «нет», записываемых у выходов иконы «вопрос»). Шампур-язык — язык шампур-схем. Для шампур-языка задан только визуальный синтаксис. Текстовый синтаксис не определен.
Глава 24. ИСЧИСЛЕНИЕ ИКОН 387 ШАМПУР-СХЕМА КАК АБСТРАКТНАЯ МОДЕЛЬ ПРОГРАММЫ Уже говорилось, что для визуального программирования характерно «расщепление синтаксиса». Синтаксис S распадается на: • визуальный синтаксис So, определяющий правила построения шампур-схем, • текстовый синтаксис Sv задающий алфавит текстоэлементов и правила записи текстовых операторов внутри икон. Исходя из этого, можно сказать, что шампур-программа В состоит из двух частей: Во и Вр где Во — шампур-схема с синтаксисом So; В1 — текстовая часть программы, то есть совокупный текст, находящийся во всех иконах программы, определяемый синтаксисом Sr Бросается в глаза несомненное сходство между шампур-схемами и схемами программ [7]. Заметив эту аналогию и повторяя — с некоторыми, почти очевидными изменениями — общую канву рассуждений, принятую в схематологии [9], можно сделать Вывод. Шампур-схема Во описывает не одну программу, а целый класс программ. Она является полипрограммой, а шампур-язык служит мультиязыком — языком полипрограммирования [10]. Класс шампур-схем является подклассом класса крупноблочных схем, по степени абстрактности занимающий промежуточное положение где- то между схемами Мартынюка и стандартными схемами. Связь между шампур-схемами и схемами программ имеет фундаментальный характер и порождает ряд интересных проблем, связанных, в частности, с тем, что «задача эффективизации транслируемых программ перерастает в задачу автоматизации конструирования качественных программ» [10]. С точки зрения теории визуального программирования, граф-схемы, используемые в (текстовом) теоретическом программировании, обладают недостатком. Как и обычные блок-схемы прикладного программирования, они являются неформальными. Хотя в работах Андрея Ершова сделан определенный шаг к формализации граф-схем, однако предложенное им решение [11] нельзя признать удовлетворительным. Потому что использованный Ершовым визуальный синтаксис граф-схем не позволяет получить однозначную, строго детерминированную визуальную конфигурацию (топологию) граф-схем. И, следовательно, не дает единственного решения визуальной задачи. Впрочем, Ершов и не ставил перед собой подобных задач. Однако для наших целей строгая формализация визуального синтаксиса блок-схем (включая граф-схемы) играет принципиальную роль.
388 Часть v- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН ПРЕОБРАЗОВАНИЕ ШАМПУР-СХЕМЫ В ШАМПУР-ПРОГРАММУ Подчеркнем еще раз, что построенный нами язык (шампур-язык) — это не язык программирования, а язык крупноблочных схем программ, то есть, язык полипрограммирования. Однако его можно легко превратить в язык программирования, причем сделать это многими способами. Для этого необходимо дополнительно задать текстовый синтаксис S1 и семантику Q1 текстовых операторов, помещаемых в иконах шампур- схемы. Например, если взять текстовый синтаксис и семантику, соответствующие языку Паскаль, получим язык визуального программирования, который можно назвать «шампур-паскаль». Аналогично можно построить языки шампур-бейсик, шампур-си и т. д. Используя терминологию схематологии, можно сказать, что шампур- программа есть интерпретированная шампур-схема, однако понятие интерпретации в нашем случае заметно отличается от классического [9]. Детальное рассмотрение вопроса выходит за рамки книги, ограничимся лишь кратким замечанием. Чтобы задать интерпретацию шампур-схемы и превратить ее в шампур-программу, необходимо: • доопределить шампур-язык и превратить его в язык программирования, описав синтаксис S1 и семантику Q1 текстовых операторов; • указать конкретные текстовые операторы, записанные в соответствии с синтаксисом S1 и размещенные в иконах шампур-схемы Во Тем самым будет задана текстовая часть В1 шампур-программы В. Таким образом, интерпретация шампур-схемы определяется как тройка < Sv Qv B1 >. Отсюда вытекает следующее очевидное замечание. Поскольку шампур-язык есть абстрактная модель любого процедурного (императивного) языка программирования (импер-языка), постольку импер-язык есть интерпретированный шампур-язык. При этом интерпретация шампур-языка, превращающая его в конкретный импер-язык, определяется как пара < Sv Q1 >. ШАМПУР-МЕТОД И ДОКАЗАТЕЛЬСТВО ПРАВИЛЬНОСТИ ПРОГРАММ Роберт Андерсон подчеркивает: «целью многих исследований в области доказательства правильности программ является... механизация таких доказательств» [12]. Дэвид Грис указывает, что «доказательство должно опережать построение программы» [13]. Объединив оба требования, получим, что автоматическое доказательство правильности должно опережать построение программы. Нетрудно убедиться, что шампур-метод обеспечивает частичное выполнение этого требования. В самом деле, в начале главы было показано, что любая пра-
Глава 24. ИСЧИСЛЕНИЕ ИКОН 389 вильно построенная шампур-схема является строго доказанной теоремой. В алгоритмах дракон-редактора закодировано исчисление икон. Поэтому любая шампур-схема, построенная с его помощью, является истинной, то есть правильно построенной. Этот результат очень важен. Он означает, что: I Дракон-редактор осуществляет 100%-е автоматическое доказательство ! правильности шампур-схем, гарантируя принципиальную невозмож- | ность ошибок визуального синтаксиса. Поскольку шампур-схема является частью шампур-программы, сказанное равносильно доказательству частичной правильности шампур- программы. В начале главы мы задали смешной вопрос: если дракон-схемы — это теоремы, кто должен их доказывать? Ответ прост. Их никто не должен доказывать, так как все они раз и навсегда доказаны. Потому что работа дракон-редактора построена как реализация исчисления икон. А теперь добавим ложку дегтя в бочку меда. К сожалению, данный метод позволяет доказать правильность шампур-схемы и только. Это составляет лишь часть от общего объема работы, которую нужно выполнить, чтобы доказать правильность программы на все 100%. Здесь необходима оговорка. Частичное доказательство правильности программы с помощью дракон-редактора осуществляется без какого-либо участия человека и достигается совершенно бесплатно, так как дополнительные затраты труда, времени и ресурсов не требуются. Так что полученный результат (безошибочное автоматическое проектирование графики дракон-схем) следует признать значительным шагом вперед. ВЫВОДЫ 1. Построено визуальное логическое исчисление, которое мы назвали «исчислением икон». 2. Данное исчисление можно рассматривать как раздел нового направления — визуальной математической логики. 3. Показано, что визуальный синтаксис языка ДРАКОН представляет собой исчисление икон. 4. Исчисление икон является теоретическим обоснованием языка ДРАКОН. 5. Если говорить в целом, предложены три метода, которые являются математическим обоснованием языка ДРАКОН: • метод Ашкрофта-Манны; • конечные автоматы; • исчисление икон.
390 Часть V- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН 6. Исчисление икон полностью реализовано во внутренних алгоритмах работы дракон-редактора. 7. Дракон-редактор осуществляет 100%-е автоматическое доказательство правильности шампур-схем, гарантируя принципиальную невозможность ошибок визуального синтаксиса. 8. Безошибочное конструирование графики дракон-схем следует признать значительным шагом вперед, повышающим производительность труда при практической разработке алгоритмов и программ. 9. Вторым (наряду с математическим) направлением, использованным при создании языка ДРАКОН, является научный подход к эргономизации конструкций языка. Такой подход позволяет улучшить визуальные образы языка (визуальные формы фиксации знаний), согласовав их с тонкими характеристиками глаза и мозга.
Глава ЧТО ДЕНЬ ГРЯДУЩИЙ НАМ ГОТОВИТ? (ПРОЕКТ ПРЕОБРАЗОВАНИЯ АЛГОРИТМИЧЕСКОГО ЯЗЫКА) 25 Визуализация дает возможность увидеть невидимое — она интенсифицирует процесс научного открытия и способствует рождению глубоких и неожиданных озарений. Александр Зенкин [1] ЦЕЛЬ ПРОЕКТА — РАЗВИТЬ АЛГОРИТМИЧЕСКОЕ МЫШЛЕНИЕ КАК СОЦИАЛЬНО НЕОБХОДИМЫЙ НАВЫК Одна из важнейших задач книги состоит в следующем: • Подвергнуть критике существующие способы представления алгоритмов (но не программ); • Предложить новый способ представления алгоритмов (имеется в виду алгоритмический язык ДРАКОН); • Подчеркнуть, что существует возможность во многих или даже в большинстве случаев полностью отказаться от традиционных способов представления алгоритмов и безболезненно заменить их на язык ДРАКОН; • Для обозначения отказа от традиционных способов в пользу языка ДРАКОН мы используем термин «Проект преобразования алгоритмического языка»; • По нашему мнению, широкомасштабная практическая реализация Проекта позволит получить существенный выигрыш; • Многие люди не знакомы с алгоритмами и не умеют с ними рабо-
392 Часть V. ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН тать. Они не могут быстро и безошибочно записывать свои знания в форме алгоритмов; Цель Проекта — помочь таким людям освоить алгоритмическое мышление, научиться разрабатывать и использовать алгоритмы; Проект будет осуществляться по мере распространения сведений о языке ДРАКОН в результате добровольного решения и свободного волеизъявления людей, проявляющих интерес к данной теме; Мы возлагаем надежду на инициативу учителей школ и преподавателей университетов, которые пожелают ввести в программу обучения информацию о языке ДРАКОН; Важным каналом распространения информации о ДРАКОНе являются различные форумы в сети Интернет, публикации и т. д. Особую роль в Проекте играют усилия инициативных групп и отдельных специалистов, которые будут создавать все более совершенные дракон-редакторы и другие программные средства. Это позволит закрепить навыки алгоритмизации на практике, приблизить их к жизни. Чтобы любой человек, нажимая на клавиши компьютера, мог убедиться в удобстве и эффективности работы с языком ДРАКОН, так сказать, на кончиках пальцев. Конечный результат Проекта подразумевает широкое распространение алгоритмического мышления и преодоление ныне существующей массовой алгоритмической неграмотности. (Разумеется, алгоритмическое мышление не противопоставляется другим типам человеческого мышления, а всего лишь дополняет и обогащает их). ТРАДИЦИОННЫЕ СРЕДСТВА ЗАПИСИ АЛГОРИТМОВ УСТАРЕЛИ И ПРЕВРАТИЛИСЬ В ТОРМОЗ РАЗВИТИЯ ОБЩЕСТВА Для наших целей необходимо развести два понятия: • алгоритмический язык (именно на нем мы сосредоточим внимание в данной главе); • языки программирования (о них будет лишь кратко упомянуто в конце главы в «Проекте преобразования языков программирования»). Четкое разделение понятий «программы» и «алгоритмы» означает, что мы рассматриваем языки программирования как средство для записи программ, но не алгоритмов. Языки программирования не приспособлены для записи алгоритмов. Поэтому мы исключаем их из рассмотрения. Причина проста. Чтобы превратить исходники в удобную для понимания форму представления алгоритмов, понятную для других людей, надо затратить неоправданно большой труд. Это невозможно реализовать на практике в приемлемых масштабах.
Глава 25. ЧТО ДЕНЬ ГРЯДУЩИЙ НАМ ГОТОВИТ? 393 Использование принципов объектно-ориентированного программирования еще более усугубляет проблему алгоритмизации. Оно исключает возможность целостного восприятия сложной алгоритмической картины. И превращает сложные алгоритмы в кусочно-рваную мозаику, непригодную для быстрого понимания. В результате непрограммирующие специалисты лишаются доступа в мир алгоритмов. Мы рассматриваем этот факт как серьезную социальную проблему, как неоправданное препятствие, ограничивающее интеллектуальные возможности общества. По нашему мнению, большинство программистов недооценивает важность проблемы, связанной с умением создавать сложные алгоритмы, пригодные для быстрого понимания ЧЕЛОВЕКОМ. Исходя из этого, мы отклоняем традиционные представления об алгоритмическом языке как неудовлетворительные и устаревшие. Какие же средства предлагает нам традиция для записи алгоритмов (но не программ)? К числу наиболее известных можно отнести: • псевдокод (pseudo code); Ф блок-схемы алгоритмов (flowcharts). ЧТО ТАКОЕ ПСЕВДОКОД? Псевдокод — упрощенный язык описания алгоритмов, предназначенный для восприятия алгоритмов человеком, а не для трансляции в машинный код. Для обозначения управляющих структур используются ключевые слова и отступы (интендация). Можно сказать, что псевдокод — это вариант письменного разговорного языка, сокращенный для создания видимости компьютерного языка высокого уровня. Цель использования псевдокода — сделать описание алгоритма более воспринимаемым, чем исходный код на языке программирования. Псевдокод широко используется в учебниках и научно-технических публикациях. Иногда он применяется на начальных стадиях разработки компьютерных программ. В отличие от стандартизации синтаксиса языков программирования, на синтаксис псевдокода обычно не устанавливается стандартов, так как последний непосредственно не компилируется в исполняемую программу. Обычно каждый автор публикации применяет свой оригинальный псевдокод. Чтобы сделать текст понятным для читателя, авторы публикаций, содержащих псевдокод, иногда заимствуют нужные им конструкции из какого-либо языка программирования. Бывает и по-другому. Зачастую источником псевдокода служат сразу несколько языков. Поэтому псевдокод может не содержать специфических признаков конкретного языка программирования. Кроме того, математические выражения часто включаются в псевдокод в том виде, как
394 Часть V- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН их принято записывать в математике, а не в языках программирования. Некоторые фрагменты псевдокода могут быть фразами естественного языка (русского, английского и т.д.). Нередко в псевдокоде применяют управляющие конструкции таких языков программирования, как Паскаль, Си, Фортран и др. Их использование можно объяснить как личными симпатиями авторов, так и распространенностью на момент написания книги или статьи. В русскоязычных текстах в качестве псевдокода часто используется перевод ключевых слов языков программирования с английского на русский. Такой подход практикуется, в частности, в учебниках по информатике. Псевдокод удобен для записи простых алгоритмов. Если же алгоритм становится чуть сложнее и занимает несколько страниц, чтение псевдокода становится затруднительным. Порою оно напоминает работу по расшифровке египетских иероглифов. Рассмотрим случай, когда на псевдокоде записан многостраничный алгоритм. Например, «Алгоритм Global_Value_Numbering} реализующий процедуру обнаружения неэффективных мест в программе на основе глобального метода нумерации значений». Текст этой процедуры на псевдокоде занимает 12 страниц книги [2, с. 120—131]. Легко убедиться, что запись сложного алгоритма на псевдокоде создает неоправданные помехи для понимания и требует значительных затрат труда и времени. • Псевдокод является важным социальным изобретением, получив- iuHM широкое распространение. Но только для программистов и математиков. • Недостатки псевдокода являются продолжением его достоинств. Сюда относятся принципиальная невозможность стандартизации и невозможность общепринятой формализации управляющих структур. • Фундаментальным недостатком является полная непригодность псевдокода для непрограммирующих специалистов. Псевдокод наглухо закрывает для них дорогу в мир сложных алгоритмов, обрекая население на алгоритмическую неграмотность. БЛОК-СХЕМЫ АЛГОРИТМОВ Блок-схемы алгоритмов при желании можно рассматривать как графическую альтернативу псевдокоду. Одно из отличий состоит в том, что для псевдокода стандартов нет, а для блок-схем есть. Действующий международный стандарт на блок-схемы {flowcharts) ISO 5807—85 выпущен в 1985 году [3]. Отечественный стандарт ГОСТ 19.701—90 [4] является точной копией международного. По нашему мнению, указанные стандарты имеют множество недостатков и являются устаревшими. Существуют и другие средства для записи алгоритмов. В некоторых
Глава 25. ЧТО ДЕНЬ ГРЯДУЩИЙ НАМ ГОТОВИТ? 395 англоязычных учебниках наряду с псевдокодом и блок-схемами используются диаграммы Насси-Шнейдермана (см., например, [5]). Создание блок-схем связано с именем выдающегося ученого Джона фон Неймана. Блок-схемы оказались удивительно эффективным социальным изобретением, которые завоевали огромную популярность, вышли далеко за пределы информатики и проникли почти во все области знания. Пример использования блок-схем алгоритмов в медицинской литературе В медицинском руководстве [6] приведены блок-схемы диагностических алгоритмов клинических синдромов, наиболее часто встречающихся в общей врачебной (семейной) практике. В руководстве представлены блок-схемы 24 диагностических алгоритмов, в том числе: остро возникшая головная боль, хроническая головная боль, головокружение, синкопальное состояние, нарушение остроты зрения, красный глаз, боль в ухе, боль в горле, боль в груди, боль в суставах, острый кашель, хронический кашель, кровохарканье, одышка, дисфагия и т. д. ДОСТОИНСТВА И НЕДОСТАТКИ БЛОК-СХЕМ • Блок-схемы алгоритмов — это единственный алгоритмический язык, который сумел преодолеть пропасть между информатикой и другими дисциплинами и найти применение во многих (почти во всех) областях человеческого знания. • Хотя при обучении программированию псевдокод нередко рассматривается как основное средство, однако, популярность блок-схем во много раз превышает популярность псевдокода, если учесть не только программирование и математику, но и другие отрасли знания. • Визуальный синтаксис блок-схем алгоритмов, описанный в действующих стандартах, имеет серьезные недочеты. Он не имеет научного (математического и когнитивно-эргономического) обоснования. • Это обстоятельство является серьезным недостатком блок-схем, который резко ограничивает возможности людей и создает непреодолимый барьер при работе со сложными алгоритмами. • Блок-схемы способны проникнуть во многие области знания, однако они пригодны для работы только с простыми алгоритмами. Блок-схемы не позволяют понятно выразить содержание сложных алгоритмов. С ростом сложности блок-схемы стремительно теряют наглядность и становятся практически нежизнеспособными, в особенности, для непрофессионалов.
396 Часть v- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН • Сказанное означает, что блок-схемы алгоритмов и другие традиционные средства не позволяют преодолеть нынешнюю массовую алгоритмическую неграмотность. ПРИЧИНЫ МАССОВОЙ АЛГОРИТМИЧЕСКОЙ НЕГРАМОТНОСТИ В нашей жизни алгоритмы играют чрезвычайно важную роль. Мы сталкиваемся с ними на каждом шагу. Они окружают нас повсюду — от космических ракет до бухгалтерских расчетов. Они ухитряются жить в каждой живой клетке — от холерного вибриона до незабудки и слона. Но вот беда, для большинства людей алгоритмы — это загадочные невидимки. Лишь немногие знают, что успехи цивилизации в огромной степени зависят от алгоритмов. Если некий злой волшебник уничтожит алгоритмы, мировая экономика рухнет. И все живое на планете канет в небытие. К сожалению, специалисты-непрограммисты (химики, биологи, технологи, экономисты и др.) почти ничего не знают об алгоритмах. Они не умеют расчленять свои знания и выделять среди них алгоритмическую (процедурную) часть. Они не в состоянии выразить свои знания на бумаге в форме алгоритмов. Допустима ли подобная алгоритмическая неосведомленность? В чем причина алгоритмической неграмотности? Неграмотности подавляющего большинства специалистов? Это важный вопрос. Чрезвычайно важный. Нынешние алгоритмы, используемые во всем мире, имеют серьезный дефект. Они чрезвычайно трудны для понимания. Существующая практика изучения, разработки и эксплуатации алгоритмов является неудовлетворительной. Она требует неоправданно больших затрат труда и времени. Алгоритмическая неосведомленность специалистов-непрограммистов объясняется тем, что изучение алгоритмов является слишком сложным и даже непосильным делом. Поэтому работа с алгоритмами для подавляющего большинства профессионалов оказывается невозможной. Это плохо. Алгоритмическая неграмотность многих умных людей неблагоприятно отражается на развитии общества.
Глава 25. ЧТО ДЕНЬ ГРЯДУЩИЙ НАМ ГОТОВИТ? 397 ЧТО ДОЛЖНО СТАТЬ ЧАСТЬЮ ПРОФЕССИОНАЛЬНОЙ КУЛЬТУРЫ СПЕЦИАЛИСТОВ-НЕПРОГРАММИСТОВ: АЛГОРИТМИЗАЦИЯ ИЛИ ПРОГРАММИРОВАНИЕ? Наша позиция такова: • Алгоритмизация и программирование — существенно разные вещи. • Массовое обучение программированию невозможно и не нужно по двум причинам. Во-первых, оно неимоверно трудно. Во-вторых, оно дает знания, которые большинству просто не нужны. • Массовое обучение алгоритмизации, наоборот, полезно и необходимо. • Число людей, которым необходимо знать алгоритмы, во много раз превышает число людей, которым надо знать программирование. Умение формализовать собственные процедурные знания специалистов-непрограммистов, а также умение разрабатывать и изображать алгоритмы в своей предметной области должно стать частью их профессиональной культуры. ТРАДИЦИОННЫЙ АЛГОРИТМИЧЕСКИЙ ЯЗЫК И ЯЗЫК ДРАКОН Под традиционным алгоритмическим языком мы понимаем все традиционные средства, предназначенные для записи алгоритмов (но не программ). Сюда относятся: псевдокод, блок-схемы алгоритмов, диаграммы Насси-Шнейдермана и др. Под «Проектом преобразования алгоритмического языка» понимается добровольный отказ учителей, преподавателей и специалистов от традиционного алгоритмического языка и постепенный переход к широкомасштабному (или даже повсеместному) использованию языка ДРАКОН. Алгоритмический язык ДРАКОН содержит две части: формальную и неформальную. Первая является математически строгой. Вторую пишут на естественном языке. В отличие от традиционных средств для описания алгоритмов (псевдокода, блок-схем и др.) визуальный синтаксис языка ДРАКОН опирается на строгую математику и серьезные эргономические проработки. По этой причине язык ДРАКОН претендует на то, чтобы стать международным стандартом, принятым в соответствии с процедурами Международной организации по стандартизации {International Standard Organization).
398 Часть V- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ ПО «ПРОЕКТУ ПРЕОБРАЗОВАНИЯ АЛГОРИТМИЧЕСКОГО ЯЗЫКА» Ниже указаны наиболее важные свойства и особенности алгоритмического языка ДРАКОН. Он позволяет: • изображать линейные, разветвленные и цикличные алгоритмы с расширенным ассортиментом циклов по сравнению с традиционным; • изображать вложенные, последовательные и параллельные алгоритмы; • изображать логические элементы И, ИЛИ, НЕ и сложные логические функции; • преобразовывать логические элементы и сложные логические функции из текстовой формы в визуальную и обратно; • использовать эквивалентные преобразования алгоритмов (рокировка, вертикальное объединение, горизонтальное объединение) для улучшения эргономических характеристик алгоритмов; • изображать базовые управляющие структуры визуального структурного программирования; • строить алгоритмы из базовых управляющих структур; • изображать алгоритмы реального времени с использованием элементов управления временем: пауза, период, пуск таймера, синхронизатор по таймеру, параллельный процесс. Концепция языка ДРАКОН опирается на так называемый шампур- метод. Напомним его основные черты: • Необходимо отказаться от текстовой формы управляющих структур, преобразовав их в визуальную форму согласно правилам визуального структурного программирования (см. главу 23); • Необходимо отказаться от текстовых управляющих операторов (например, if-then-else, while-do и т. д.), заменив их управляющей графикой. • В шампур-методе при разработке алгоритмов активно используется операция вложения (ввод атома, ввод ветки), а также пересадка лианы и заземление лианы. • Графическое представление управляющих структур не изоморфно текстовым конструкциям. Оно принципиально отличается от традиционных управляющих ключевых слов. • При переходе от псевдокода и блок-схем к дракон-схемам привычный способ мышления пользователя при разработке алгоритмов существенно меняется и становится более легким. Производительность труда повышается. • Необходимо (в пределах возможного) исключить сложные термины «истина» и «ложь», характерные для текста. И заменить их удобны-
Глава 25. ЧТО ДЕНЬ ГРЯДУЩИЙ НАМ ГОТОВИТ? 399 ми словами «да» и «нет», пригодными для графических чертежей. Такая замена упрощает визуальные логические рассуждения, делая их более легкими. • Предусмотрены и другие эргономичные приемы (шапка, правило «чем правее — тем хуже») и многое другое. Когнитивно-эргономические методы делают дракон-схему более понятной и более качественной. На этом мы заканчиваем рассмотрение Проекта преобразования алгоритмического языка. ПРОЕКТ ПРЕОБРАЗОВАНИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Выше мы рассмотрели Проект для алгоритмического языка. Возможен ли аналогичный проект для программирования? Можно ли говорить о Проекте (хотя бы частичного) преобразования языков программирования? Это сложный вопрос. И у нас нет готового ответа. Тем не менее, попытаемся в порядке предварительного обсуждения сделать первый шаг в этом направлении. ОТКАЗ ОТ ТЕКСТОВЫХ УПРАВЛЯЮЩИХ СТРУКТУР В ПОЛЬЗУ УПРАВЛЯЮЩЕЙ ГРАФИКИ Как известно, управляющие структуры языков программирования были созданы в то далекое время, когда основным инструментом программиста был линейный или ступенчатый текст. Со временем — по мере совершенствования вычислительной техники и расширения ее возможностей — появилась компьютерная графика. Компьютерная графика быстро проникла в различные сферы умственной деятельности. Однако этот процесс почти не затронул управляющие структуры. В подавляющем большинстве случаев при использовании управляющих структур в языках программирования до сих пор безраздельно господствует ТЕКСТ. Опираясь на развитие идей Эдсгера Дейкстры (см. главу 23), мы различаем два структурных подхода: • текстовый (одномерный) структурный подход; • визуальный (двумерный) структурный подход. Структурное программирование Дейкстры, лишенное графических элементов в управляющих структурах, является неоправданно жестким и неудобным. И наоборот, замена одномерного (текстового) подхода на двумерный (визуальный) дает существенные преимущества.
400 Часть v- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН При визуальном структурном программировании программист работает только с чертежом программы, не обращаясь к ее тексту. Точно так же программист, работающий, скажем, на Дельфи, не обращается к ассемблеру и машинному коду — они для него просто не существуют. Визуальные программы, будучи «выполнимой графикой», строятся из «выполняемых» икон и «выполняемых» соединительных линий. При построении программ с помощью дракон-редактора пользователь не применяет понятия if-then-else, goto и т.д., ибо в этом нет никакой необходимости. Ту функцию, которую в текстовой программе выполняют ключевые слова, в визуальной программе реализуют совершенно другие понятия: иконы, макроиконы, соединительные линии, шампур, главная вертикаль шампур-блока, лиана, атом, пересадка лианы, запрет пересечения линий и т. д. При переходе к визуальному программированию задача решается по- другому, с помощью другого набора понятий. Отказ от старого набора понятий и замена его на новый позволяет добиться новой постановки задачи и более эффективного ее решения. Итак, наше предложение состоит в том, чтобы полностью устранить текстовые управляющие структуры. Им на смену должна прийти значительно более легкая и удобная управляющая графика. ТРИ ЧАСТИ ЯЗЫКА ПРОГРАММИРОВАНИЯ В общем виде почти любой язык программирования можно разделить на три части: • маршрутную; • командную; • декларативную. Маршрутная часть языка программирования описывает маршрут движения рабочей точки от начала до конца программы и содержит управляющие структуры, предназначенные для управления порядком выполнения действий в программе. Пример управляющей структуры: if-then-else, while-do и т. д. В маршрутную часть мы включаем также все элементы алгоритмического языка ДРАКОН, описанные в данной книге и подытоженные в параграфе «Заключительные замечания по Проекту преобразования алгоритмического языка» Командная часть описывает совокупность команд. Пример команды: а\=Ь+с. Декларативная часть содержит описания данных, классов и т. д. В центр анализа поместим маршрутную часть языка. По-нашему мнению, маршрутная часть языков программирования — это отдельная, самостоятельная и очень важная проблема.
Глава 25. ЧТО ДЕНЬ ГРЯДУЩИЙ НАМ ГОТОВИТ? 401 Думается, в языке ДРАКОН эта проблема решена лучше, чем во многих других языках. Некоторые специалисты утверждают, что управляющая графика языка ДРАКОН является мощным инструментом, причем ее мощь легка в освоении и легко применима на практике. Возникает вопрос. Можно ли задел, разработанный в языке ДРАКОН и хорошо себя зарекомендовавший, использовать в качестве частного элемента для «Проекта преобразования языков программирования»? Ниже мы будем иметь в виду такие языки, как например, Ява, Си#, Питон, Перл, Руби, Ада, Оберон и др. КРИТИКА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Попытаемся вынести на суд читателей несколько предположений. • В языках программирования имеется слабое звено. Это касается не всех языков, но многих. • Слабым звеном языков является маршрутная часть. • Чтобы устранить слабое звено, необходимо отказаться от использования текстовых управляющих конструкций, заменив их управляющей графикой. • В качестве управляющей графики предлагаются структурные, математически строгие и эргономичные блок-схемы — дракон-схемы. • Дракон-схемы позволяют устранить слабое звено языков программирования и за счет этого повысить производительность труда. ГИПОТЕТИЧЕСКИЙ ПЛАН ПРЕОБРАЗОВАНИЯ ЯЗЫКОВ Рискуя ошибиться, можно предложить план преобразования языков программирования. Языки, подлежащие изменению, назовем кандидатами. Выберем в качестве кандидатов, например, 10 языков программирования (цифра условная). С каждым из кандидатов выполняем следующие действия. 1. Проверяем языки-кандидаты и убеждаемся, что намечаемые преобразования действительно улучшают качества языка (делают его более выразительным, более понятным и удобным для работы). 2. Преобразуем маршрутную часть языка-кандидата (то есть, превращаем текстовые управляющие структуры в управляющую графику). Маршрутную часть желательно делать универсальной для всех языков-кандидатов. 3. Командную и декларативную часть языка-кандидата оставляем без изменения. (Имеется в виду, что команды записываются внутри икон дракон-схемы, а декларации — вне икон или даже вне схемы).
402 Часть v- ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ ЯЗЫКА ДРАКОН 4. По методике, описанной в главе 10, преобразуем языки-кандидаты X, Y и др. в гибридные языки Дракон-Х, Дракон- У и др. В итоге (если получится) получим гибридные языки Дракон-Ява, Дракон-Си#, Дракон-Питон, Дракон-Перл, Дракон-Руби, Дракон-Ада, Дракон- Оберон и т. д. Перечисленные четыре пункта и составляют «Проект преобразования языков программирования». Какой эффект будет получен в результате реализации проекта? Предположительно, повышение производительности труда, уменьшение числа ошибок и т. д. ВЫВОДЫ 1. Существует возможность во многих или даже в большинстве случаев полностью отказаться от традиционных способов представления алгоритмов и безболезненно заменить их на язык ДРАКОН. 2. Для обозначения отказа от традиционных способов в пользу языка ДРАКОН используется термин «Проект преобразования алгоритмического языка». 3. Конечный результат Проекта подразумевает широкое распространение алгоритмического мышления и преодоление ныне существующей массовой алгоритмической неграмотности. 4. Большинство программистов недооценивает важность проблемы, связанной с умением создавать сложные алгоритмы, пригодные для быстрого понимания ЧЕЛОВЕКОМ. 5. Блок-схемы алгоритмов, псевдокод и другие традиционные средства не позволяют преодолеть нынешнюю массовую алгоритмическую неграмотность. 6. Нынешние алгоритмы, используемые во всем мире, имеют серьезный дефект. Они чрезвычайно трудны для понимания. 7. Алгоритмическая неосведомленность специалистов-непрограммистов объясняется тем, что в современных условиях изучение алгоритмов и алгоритмизации является слишком сложным и даже непосильным делом. Поэтому работа с алгоритмами для подавляющего большинства профессионалов оказывается невозможной. 8. Алгоритмическая неграмотность многих умных людей неблагоприятно отражается на развитии общества. 9. Язык ДРАКОН позволяет устранить недостаток. Умение формализовать собственные процедурные знания специалистов-непрограммистов, а также умение разрабатывать и изображать алгоритмы в своей предметной области должно стать частью их профессиональной культуры. 10. В отличие от традиционных средств для описания алгоритмов (псевдокода, блок-схем и др.) визуальный синтаксис языка ДРАКОН
Глава 25. ЧТО ДЕНЬ ГРЯДУЩИЙ НАМ ГОТОВИТ? 403 опирается на строгую математику и серьезные эргономические проработки. По этой причине ДРАКОН претендует на то, чтобы со временем стать международным стандартом, принятым в соответствии с процедурами Международной организации по стандартизации {International Standard Organization). 11. Проект преобразования алгоритмического языка позволяет создать задел для Проекта частичного преобразования языков программирования. 12. В гибридном языке программирования Дракон-Х текстовые управляющие конструкции полностью устранены. Им на смену пришла значительно более легкая и удобная управляющая графика. 13. Большинство языков программирования можно разделить на три части: маршрутную, командную и декларативную. 14. Маршрутная часть языка программирования описывает маршрут движения рабочей точки от начала до конца программы и содержит элементы, организующие линейные, разветвленные, цикличные, вложенные и параллельные участки маршрутов, а также логику и элементы, организующие работу в реальном времени. Маршрутная часть строится из управляющих конструкций. 15. В языках программирования имеется слабое звено. Это касается не всех языков, но многих. 16. Слабым местом является маршрутная часть. 17. Чтобы устранить слабое звено, необходимо отказаться от использования текстовых управляющих конструкций, заменив их управляющей графикой. 18. Проект преобразования языков программирования вкратце сводится к следующему: • Преобразуем маршрутную часть языка-кандидата, превращая текстовые управляющие конструкции в управляющую графику. • Командную и декларативную часть языка-кандидата оставляем без изменения. 19. В качестве управляющей графики предлагаются структурные, математически строгие и эргономичные блок-схемы — дракон-схемы. 20. Предполагается, что дракон-схемы позволяют устранить слабое звено языков программирования и за счет этого повысить производительность труда.
Часть VI ВОЗМОЖНА ЛИ ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? ИСТОРИЯ И ЭРГОНОМИКА МАТЕМАТИКИ И СОЗДАНИЕ ЯЗЫКА ДРАКОН
Глава О ЧЕМ ГОВОРЯТ УРОКИ ИСТОРИИ? АНАЛИЗ ЭРГОНОМИЧНОСТИ АЛГЕБРЫ ДИОФАНТА 26 Ученый! Ты объясняешь нам науку, но кто объяснит нам твое объяснение? Джордж Байрон ВВЕДЕНИЕ Выше мы часто подчеркивали, что при создании языка ДРАКОН широко применялись идеи когнитивной эргономики. И что применение этих идей дало положительный эффект. Возникает вопрос. Почему эргономика ведет к успеху при решении математических проблем? Это исключение или закономерность? Счастливый случай или обоснованный результат? Можно ли привести другие подобные случаи? Кстати, о чем говорят уроки истории? Что было в стародавние времена? Можно ли отыскать в глубинах минувшего какие-то факты, которые свидетельствуют о «дружбе» математики и эргономики? Мы попытаемся убедить читателя, что такие факты есть. ПОЧЕМУ ДЖОН ФОН НЕЙМАН ПРОВАЛИЛСЯ НА ЭКЗАМЕНЕ? Прежде, чем нырять в бездонные волны истории, дадим оценку современному состоянию дел. Зачем нужна когнитивная эргономика? Ответ известен: чтобы сделать непонятное понятным. Актуальна ли эта задача? Да, актуальна. Потому что сложность задач все время растет.
408 Часть VL возможна ли эргономизация математики? Жизнь властно ставит вопрос о необходимости эргономической реформы математического знания. Необходимо устранить чудовищные и неоправданные трудности, которые испытывают люди, изучающие математику или решающие математические задачи. Нужно эргономизировать математику, то есть облегчить ее, сделать более дружелюбной и человечной. Важность проблемы определяется следующим. Современная наука и система образования немыслимы без математики. К сожалению, эта дисциплина чрезвычайно трудна и продолжает усложняться. Изучение математики требует колоссальных трудозатрат. Однако речь не только об учащихся. Появляющееся новое математическое знание стало столь разветвленным, что охватить его одному человеку или даже группе единомышленников (например, известной группе Николас Бурбаки) физически невозможно. Даже великий Джон фон Нейман признавался, что знает не больше трети корпуса математики. Чтобы проверить себя, он попросил Станислава Улама проэкзаменовать его. Тот вспоминает: «Я устроил ему некоторое подобие докторантского экзамена в различных областях, стараясь выделить те вопросы, на которые он не мог бы ответить. Я нашел пробелы в дифференциальной геометрии, теории чисел, алгебре, где его ответы были неудовлетворительными» [1]. А ведь фон Нейман был выдающимся математиком! Но если трудности испытывают фигуры такого масштаба, с какими же поистине невероятными трудностями сталкивается подавляющее большинство математиков? Недаром говорят, что «в условиях современной математики математик не знает, как это ни парадоксально, математики» [1]. Что же тогда можно сказать о математических знаниях нематематиков и многочисленных армиях студентов? Проблема в том, что для большинства нематематических специальностей требования к математической подготовке постоянно растут, поскольку возрастает роль математики в современной науке и технике, теории и практике. В итоге получается, что люди не обладают знаниями, которые необходимы для эффективного выполнения профессиональных обязанностей. Отпугивающая многих трудность изучения математики и вызванный ею недобор математических знаний неизбежно приводит к снижению интеллектуального потенциала общества, еще более усугубляя интеллектуальный кризис цивилизации. Попытка «запихнуть» в человеческую голову больше, чем она способна переварить за известный промежуток времени, ведет к негативным последствиям — перегрузкам учащихся и педагогов, низкой эффективности обучения и затягиванию учебного процесса. Получается замкнутый круг, из которого в рамках традиционного подхода фактически нет выхода.
Глава 26. О ЧЕМ ГОВОРЯТ УРОКИ ИСТОРИИ? 409 СУЩЕСТВУЕТ Л И ПРОПАСТЬ МЕЖДУ МАТЕМАТИКОЙ И ЭРГОНОМИКОЙ? Чтобы преодолеть или хотя бы ослабить названные трудности, необходимо: • улучшить понятность (когнитивно-эргономическое качество) математической литературы и за счет этого облегчить изучение математики; • улучшить взаимопонимание между специалистами, работающими в разных отраслях и отделах математики (а их свыше трех тысяч [1]), а также в прикладных областях, тесно с нею связанных; • уменьшить интеллектуальные усилия (интегральные умственные трудозатраты), которые общество расходует на изучение и решение математических проблем (при сохранении заданных стандартов качества). Легко сообразить, что перечисленные задачи имеют эргономический характер. При разработке принципов эргономизации математики полезно учесть мировой опыт развития и комбинирования математической символики от древнейших времен до наших дней. Но самое главное, надо уяснить, что эргономизация не есть нечто внешнее для математики. Как раз наоборот, эргономизация — это неотъемлемая внутренняя компонента исторического процесса развития математических идей. Тем не менее, остается фактом, что сегодня эргономика и математика почти не имеют точек соприкосновения (применение математических методов в эргономике не в счет). Их разделяет пропасть взаимного непонимания. Другой удивительный факт состоит в том, что математики почти всегда старались сделать математические методы более удобными для человека, улучшить понятность математических текстов. Это значит, что они (неосознанно) применяли и применяют эргономические методы. Однако этот процесс носил и носит интуитивный и кустарный характер. Подобная «кустарщина» ощутимо снижает когнитивное качество математической литературы. Ухудшает понимание и взаимопонимание в математическом сообществе. Эргономическая беспечность (а если отбросить деликатность — эргономическая неграмотность) традиционных математических методов — большой недостаток. Подобная неграмотность представляет собой одну из причин неоправданно высокого интеллектуального барьера, окружающего величественный дворец математической науки. Для обозначения этого барьера появился даже специальный термин — «математический терроризм» [2]. Мы исходим из того, что в наш междисциплинарный век пренебрежение к эргономическим методам следует признать устаревшим. Чтобы
410 Часть VI. ВОЗМОЖНА ЛИ ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? сделать эту мысль более наглядной, проиллюстрируем ее на примере развития правил записи алгебраических уравнений. Возьмем в качестве точки отсчета алгебру Диофанта. МНОГОМУДРЫЙ ДИОФАНТ Греческий математик Диофант (III век нашей эры) был последним великим математиком античности. До него уравнения решались в словесной либо в геометрической форме. Он впервые использовал в алгебре буквенную символику. Но введенные им буквенные обозначения были сокращениями соответствующих математических терминов, а не алгебраическими символами в нашем понимании. Тем не менее новшества Диофанта имели революционный характер. Он ввел обозначения неизвестной величины, ее первых шести положительных и отрицательных степеней, отрицательные числа, знак «минус» и знак «равенство». Благодаря этому Диофанту удалось получить ряд важных результатов. Он даже сумел предвосхитить подстановки Эйлера, Однако современному читателю символика Диофанта кажется странной, запутанной и очень непривычной [3, 4, 5]. Попробуем запастись терпением и совершим небольшую прогулку по джунглям диофантовой алгебры. Мы ограничимся одним-единственным вопросом: как Диофант записывал уравнения? Ответ будет дан несколько позже. Сначала нужно кое-что рассказать о греческих буквах и цифрах. ГРЕЧЕСКИЕ БУКВЫ Все знают, что на белом свете существуют арабские и римские цифры. Арабские — самые удачные. Они позволяют легко и быстро выполнять арифметические действия. Именно поэтому они завоевали мир. Их изучают во всех школах планеты. Почти все (кроме неграмотных) умеют считать с помощью арабских цифр. Римские цифры также известны всем. Но сегодня они служат не для расчетов, а в качестве декоративного украшения письма. Запись «XXI век» выглядит наряднее и торжественнее, чем убогое «21 век». Однако существуют еще греческие, точнее, древнегреческие цифры. О них мало кто слышал. Именно они и будут нас интересовать. Почему? Потому что Диофант использовал их при построении своей алгебры. Арабы и римляне поступили очень умно. Они ввели для цифр специальные обозначения. Греки до этого не додумались. В качестве цифр они использовали буквы. Для удобства читателя напомним названия греческих букв (см. таблицу 7).
Глава 26. О ЧЕМ ГОВОРЯТ УРОКИ ИСТОРИИ? 411 Таблица 7 Современный греческий алфавит Буква Аа вр Гу А5 Ее нл 00 h Кк АХ Мц Название альфа бета гамма дельта эпсилон дзэта эта тэта йота каппа ламбда мю Буква Nv Оо Пя Рр Eg Тт Фср XX Yd Название ню кси омикрон пи ро сигма тау фи хи ипсилон пси омега Как видите, в греческом алфавите 24 буквы. Но в греческой системе счета использовалось 27 цифр. Здесь возникает трудность — не хватает трех букв! Как же быть? Очень просто — в древности у греков было на три буквы больше. Эти три древнейшие буквы (дигамма, сампи и коппа) со временем стали ненужными для письма и канули в Лету. Но продолжали использоваться в качестве цифр (см. таблицу 8). Таблица 8 Древнегреческие буквы F ч Название дигамма сампи коппа Число 6 900 90 Примечание Три древние буквы (дигамма, сампи, коппа) в современном греческом алфавите отсутствуют
412 Часть VI. ВОЗМОЖНА ЛИ ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? ДРЕВНЕГРЕЧЕСКИЕ ЦИФРЫ Итак, мы выяснили — в старину у греков было 27 цифр. Они делились на три группы — по девять цифр в каждой. Первые девять цифр обозначали единицы. Следующие девять — десятки. Еще девять — сотни (см. табл. 9). Таблица 9 Единицы Современная | запись 1 1 3 4 5 6 7 8 9 1 2 Древнегреческая запись а (альфа) р (бета) у (гамма) 5 (дельта) е (эпсилон) ¦р (дигамма") ? (дзэта) т| (эта) 0 (тэта) Десятки Современная запись 10 20 30 40 50 60 70 80 90 Древне* греческая запись i (йота) к(каппа) X (ламбда) [1 (мю) v (ню) §(кси) о (омикрон) п (пи) Ч (коппа) Сотни Современная запись 100 200 300 400 500 600 700 800 900 Древнегреческая запись Р(ро) > с (сигма) | *(таУ) ( 1) (ИПСИЛОН)| Ф (фи) | X(хи) | \|/ (пси) | Q (омега) | ^ (сампи) 1 Примечание . В греческой системе счисления нуль отсутствует. . Подчеркнуты три старинные буквы, которых нет в современном греческом алфавите. Здесь есть одна особенность. Для нас 80 — это не цифра, а число, состоящее из двух арабских цифр. Но греки смотрели на дело иначе. Для них 7Г (пи) — это не число, а именно цифра (которая обозначает наше число 80). Точно так же греческая цифра 1|/ (пси) соответствует нашему числу 700. КАК ГРЕКИ ЗАПИСЫВАЛИ ЧИСЛА? Предположим, грек желает записать число 32. Как это сделать? Число 32 надо представить как сумму греческих цифр. В арабских цифрах запишем «шпаргалку»: 32 = 30 + 2 A) Из таблицы 9 узнаем, что:
Глава 26. О ЧЕМ ГОВОРЯТ УРОКИ ИСТОРИИ? 413 • 30 — это X (ламбда), • 2 - это Р (бета). Заменив арабские числа в формуле A) на греческие цифры, получим: B) Учтем теперь, что знак + у греков отсутствует; слагаемые пишутся подряд. В итоге получим, что число 32 по-гречески можно записать двумя способами 32 = 5ф = C) Предположим теперь, что наш умный грек (например, Платон) решил записать число 881. Действуя по прежнему шаблону, пишем шпаргалку. 881 = 800 + 80+1 D) Из таблицы 9 узнаем, что: • 800 - это Ш (омега), • 80 — это % (пи), • 1 — это а (альфа). Заменим арабские числа в формуле D) на греческие цифры. Уберем знак +, которого у греков нет. В итоге получим шесть вариантов записи числа 881. 881 = аша = соатс = паю = тисоа = атссо = асотс E) Чтобы лучше понять древнегреческую систему счисления, приведем обозначения греческих чисел от 10 до 29. Таблица 10 мешая запись 10 11 12 13 14 15 16 17 18 19 5 .Д] t ia ф iy 18 18 iF щ 10 ревнегреческая (йота) (йота, альфа) (йота, бета) (йота, гамма) (йота, дельта) (йота, эпсилон) (йота, дигамма") (йота, дзэта) (йота, эта) (йота, тэта) Современная запись 20 21 22 23 24 25 26 27 28 29 К ка кр ку к8 KS kF КГ] к9 »евнегреческая I запись . | (каппа) ! (каппа, альфа) (каппа, бета) (каппа, гамма) (каппа, дельта) (каппа, эпсилон) (каппа, дигамма) (каппа, дзэта) (каппа, эта) (каппа, тэта)
414 Часть VI. ВОЗМОЖНА ЛИ ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? Вопрос. Как греки записывали числа больше тысячи? Ответ. Они использовали те же самые буквы, но добавляли к ним штрихи, как показано в таблице 11. Таблица 11 Древнегреческие цифры больше 1000 Совре-' менная запись 1000 2000 3000 4000 5000 Древнегреческая запись # а (альфа) # Р (бета) ,у (гамма) , 5 (дельта) , е (эпсилон) Современная завись 6000 7000 8000 9000 Древнегреческая запись р (дигамма") X (дзэта) #Г| (эта) 9 (тэта) Бывает так, что буквы и цифры приходится писать подряд. Чтобы не запутаться и отличить числа от букв, греки ставили над цифрами горизонтальные черточки, например: ЭРГОНОМИЧЕСКИЕ НЕДОСТАТКИ ГРЕЧЕСКОЙ СИСТЕМЫ СЧЕТА Эффективность нашего мышления зависит от когнитивно-эргономического качества используемых знаков. Греческая система счисления неэргономична. Она обладает многочисленными недостатками, которые вносят значительные когнитивные затруднения, замедляющие работу мысли. Сравним две задачи: 4* 10 =40 F) 4х 100=400 G) Запись в арабских числах позволяет легко заметить, что эти задачи являются родственными. Сравнивая формулы F) и G), можно сделать очевидный вывод: добавление нуля во второй сомножитель приводит к добавлению нуля в произведение. Другими словами, увеличение сомножителя в 10 раз увеличивает произведение во столько же раз. А теперь запишем те же равенства, используя греческие цифры. Получим: 5 х i = (j, (8) 8 х р = D (9)
Глава 26. О ЧЕМ ГОВОРЯТ УРОКИ ИСТОРИИ? 415 Что же получилось? Формулы (8) и (9) не имеют ни малейшего сходства между собой. Выявленная закономерность бесследно исчезла и стала невидимкой! В самом деле, цифра ро р A00) в десять раз больше, чем йота 1A0). Но мы этого не видим! Точно так же цифра ипсилон и D00) в десять раз больше, чем мю |1 D0). Но этого мы тоже не видим! По сути дела, греческие цифры «ослепляют» наш мозг, лишая его части творческих сил! Эти и другие примеры подтверждают, что отсутствие позиционной системы вносит большие и ничем не оправданные когнитивные трудности. По этому поводу немецкий психолог Фридхарт Клике восклицает: «Насколько проще метод нашей позиционной системы, насколько меньше затрат при решении одинаковых задач!» [7]. Можно указать следующие эргономические недостатки греческой системы. 1. Мы используем 10 цифр, а греки 27, то есть в три раза больше. 2. С помощью 10 арабских цифр можно записать сколь угодно большое число. Греческие цифры этого не позволяют. С помощью 27 цифр можно записать числа от 1 до 999. Чтобы записать числа от 1000 до 9999 грекам приходилось усложнять систему обозначений и снабжать цифры штрихами (см. табл. И). 3. В нашей системе для цифр придуманы специальные значки @, 1 ... 9), отличные от букв. У греков специальные значки отсутствуют, что вносит дополнительные когнитивные неудобства. 4. Наша система позиционная. Это значит, что значение цифры зависит от позиции в записи. Возьмем число 44. Правая цифра означает 4, а левая — в 10 раз больше, то есть 40. 5. Древнегреческая система непозиционная. Вес цифры не зависит от ее позиции, то есть «места в строю». Два числа ?ф (ламбда бета) и рА, (бета ламбда) означают в точности одно и то же — число 32. В арабской системе все по-другому. 27 и 72 — совершенно разные числа. 6. У греков отсутствуют два важнейших элемента — цифра 0 и знак +. 7. Вследствие этого выполнение арифметических действий «столбиком» становится невозможным. Трудоемкость вычислений возрастает во много раз. 8. Главный недостаток состоит в следующем. Эргономически неудачная система счисления сделала греческие числа нежизнеспособными, то есть непригодными для быстрых практических расчетов. Греческая система была изначально обречена и впоследствии закономерно уступила место более эргономичной арабской системе. Здесь есть смягчающее обстоятельство. Дело в том, что к письменным вычислениям для практических целей греки прибегали редко. Бумага была дорогой. Обычно использовалась счетная доска (абак). На ней реа- лизовывалось нечто подобное позиционной системе.
416 Часть VI. ВОЗМОЖНА ЛИ ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? Несмотря на это, греческие ученые блестяще вычисляли дроби. Архимед открыл, пользуясь греческими числами, правило умножения степеней: ns х nm = ns+m Однако он так и не смог «увидеть» позиционную систему записи чисел. А ведь он был буквально на волосок от величайшего открытия! Спустя две с лишним тысячи лет «король математиков» Карл Фридрих Гаусс чуть ли не со слезами на глазах сокрушался об этом: «И как только он [Архимед] мог просмотреть это! [то есть наш современный принцип записи чисел]. Какого уровня достигла бы сейчас наука, если бы он сделал это открытие!» [7]. АЛГЕБРА ДИОФАНТА На этом введение можно считать законченным. Вернемся к главному вопросу: как Диофант записывал уравнения? Прежде всего, попытаемся выяснить: как будут выглядеть наши современные знаки л, Л , л , X , Л , X , , • если перевести их на язык Диофанта? Ответ дает таблица 12. Таблица 12 Современная алгебра Обозначение X X2 X3 X4 X5 = - + Как читается Неизвестная величина Икс квадрат Икс куб Икс в четвертой степени Икс в пятой степени Икс в шестой степени Равно Минус Плюс Алгебра Диофанта Обозначение Av Kv AAV AKV KKV i A Как читается Число Квадрат Куб Квадратоквадрат Квадратокуб Кубокуб Равно Недостаток Название греческих букв дзэта дельта ню каппа ню | дельта дельта ню дельта каппа ню каппа каппа | ню I йота I 1 Плюс у Диофанта отсутствует. Слагаемые пишутся подряд
Глава 26. О ЧЕМ ГОВОРЯТ УРОКИ ИСТОРИИ? 417 Окончательный результат для наглядности представим так Современные обозначения Обозначения Диофанта X X2 Av X3 Kv X4 AAV X5 AKV хб KKV = - A ттжтлж + | нет I КАК ДИОФАНТ ЗАПИСЫВАЛ ПОЛОЖИТЕЛЬНЫЕ ЧЛЕНЫ УРАВНЕНИЯ? Каждый член уравнения Диофант пишет так: сначала указывает степень неизвестного, потом числовой коэффициент. Обратите внимание: в современной алгебре все наоборот. Сначала пишут числовой коэффициент и лишь затем — степень неизвестного. Эти отличия показаны на рис. 196 и 197. Современные обозначения Обозначения Диофанта Рис. 196. Как преобразовать современные обозначения в обозначения Диофанта (для первой степени х) Современные обозначения Обозначения Диофанта Рис. 197. Как преобразовать современные обозначения в обозначения Диофанта (для второй степени х2) Результаты, представленные на рис. 196 и 197, сведены в таблицу 13.
418 Часть VI. ВОЗМОЖНА ЛИ ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? Таблица 13 Запись положительных членов уравнения (примеры) | Первая степень д: Современная X 2х Зх 4х У Диофанта ?Г (дзэта альфа) ? Р (дзэта бета) C/f (дзэта гамма) ? 5 (дзэта дельта) Вторая степень х2 j Современная X2 2х2 Зх2 4х2 У Диофанта A "of (дельта ню альфа) А C (дельта ню бета) A Y (дельта ню гамма) 1 А 8 (дельта ню дельта) 1 Мы узнали, как Диофант записывал члены уравнения для первой и второй степени неизвестной. На рис. 198 и 199 аналогичные преобразования показаны для третьей и четвертой степени. Современные обозначения Обозначения Диофанта Рис. 198. Как преобразовать современные обозначения в обозначения Диофанта (для третьей степени л?) Современные обозначения Обозначения Диофанта > Рис. 199. Как преобразовать современные обозначения в обозначения Диофанта (для четвертой степени х*) Результаты, представленные на рис. 198 и 199, сведены в таблицу 14.
Глава 26. О ЧЕМ ГОВОРЯТ УРОКИ ИСТОРИИ? 419 Таблица 14 Запись положительных членов уравнения (примеры) Третья степень хг \ Современная У Диофанта Четвертая степень х* К а (каппа ню альфа) менная У Диофанта АА а (дельта дельта ню альфа) 2х3 К Р (каппа ню бета) 2х4 АА Р (дельта дельта ню бета) Зх3 К у (каппа ню гамма) I Зх4 АА у (дельта дельта ню гамма) 4х3 щ К 5 (каппа ню дельта) j 4х4 АА 5 (дельта дельта ню дельта) КАК ДИОФАНТ ЗАПИСЫВАЛ ОТРИЦАТЕЛЬНЫЕ ЧЛЕНЫ УРАВНЕНИЯ? Перед отрицательными членами уравнения Диофант ставит знак недостатка /К (по-нашему, минус). Примеры показаны на рис. 200 и в таблице 15. Современные обозначения Обозначения Диофанта АХСХР I IA Av У Рис. 200. Как преобразовать современные обозначения в обозначения Диофанта (для отрицательных членов уравнения) Таблица 15 Запись отрицательных членов уравнения (примеры) Первая степень х Совре- | менная | -2х | -Зх I ! ~4х У Диофанта А ? а (дзэта альфа) А^Р (дзэта бета) А^у (дзэта гамма) j А ? Ъ (дзэта дельта) Вторая степень х Современная -X2 -2х2 -Зх2 -Ах2 У Диофанта АД а (дельта ню альфа) А А р (дельта ню бета) А А у (дельта ню гамма) А А 8 (дельта ню дельта)
420 Часть VI. ВОЗМОЖНА ЛИ ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? КАК ДИОФАНТ ЗАПИСЫВАЛ СВОБОДНЫЙ ЧЛЕН УРАВНЕНИЯ? При записи свободного члена уравнения Диофант сначала ставит символ М° (признак свободного члена), а затем его числовое значение (табл. 16). Таблица 16 Запись свободного члена Современная 0 1 2 | 3 У Диофанта У греков нуля нет М° 5Г (мю омикрон альфа) М° р (мю омикрон бета) М° Y (мю омикрон гамма) КАК ДИОФАНТ ЗАПИСЫВАЛ УРАВНЕНИЯ? Предварительная часть нашего рассказа закончена. Выше были подробно рассмотрены все «кирпичики», из которых строится уравнение. Перейдем к главному. Рассмотрим несколько примеров записи уравнений в символике Диофанта. Современные обозначения Обозначения Диофанта ОСр Рис. 201. Первый пример. Как записать уравнение 2х = 4 в обозначениях Диофанта? Необходимо учесть важную особенность. Современная (каноническая) запись уравнения требует, чтобы в правой части уравнения находился свободный член 0. Пример: 2х + 4 = 0. Но у греков нет нуля. Значит, это уравнение нельзя напрямую перевести на язык Диофанта. Но можно применить хитрость. Чтобы избавиться от нуля, нужно перенести свободный член в правую часть уравнения. В результате уравнение примет вид: Теперь его легко можно записать в обозначениях Диофанта (рис. 202).
Глава 26. О ЧЕМ ГОВОРЯТ УРОКИ ИСТОРИИ? 421 Современные обозначения Обозначения Диофанта М р i А М"8 Рис. 202. Второй пример. Как записать уравнение 2х = - 4 в обозначениях Диофанта? Современные обозначения Обозначения Диофанта Рис. 203. Третий пример. Как записать уравнение Зх^+бх = 1 в обозначениях Диофанта? Современные обозначения Обозначения Диофанта Рис. 204. Четвертый пример. Как записать уравнение Зх* +5х = -1 в обозначениях Диофанта? Результаты, представленные на рис. 201—204, сведены в таблицу 17. Таблица 17 Современная запись 2х = 4 2х-4 = 0 2х = -4 2х + 4 = 0 Зх2 + 5х = 1 Зх2 + 5х - 1 = 0 Зх2 + 5х = -1 Зх2 + 5х + 1 = 0 Зх2 - 5х = -1 Зх2 - 5х + 1 = 0 Запись уравнения у Диофанта ^ р i М°5" 5 Р i A M°S" • V ^ ¦» жО А у ? е i M а А у ^ s" i А М°а А у^С^1^ М°а
422 Часть VI. ВОЗМОЖНА Л И ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? ЭРГОНОМИЧЕСКИЙ АНАЛИЗ АЛГЕБРЫ ДИОФАНТА Попытаемся оценить способ записи уравнений, использованный Диофантом, с точки зрения современной когнитивной эргономики. Не претендуя на составление полной «дефектной ведомости», укажем лишь несколько эргономических недостатков диофантовой алгебры. 1. Когда человек смотрит на запись уравнения, он должен решить несколько визуальных задач, обеспечивающих правильное зрительное восприятие и понимание сути дела. Причем делать это надо «без лишней траты умственных сил». Первая задача — разбить зрительную сцену на два главных смысловых блока: левую и правую части уравнения. Для этого нужно выполнить три зрительных операции: • бегло просмотрев все символы уравнения, найти среди них знак равенства; • сделать вывод: зрительная зона, находящаяся левее этого знака, есть левая часть уравнения; • сделать второй вывод: зона, лежащая правее, есть правая часть. Современный знак равенства ( = ) с пробелами до и после него имеет удачную эргономическую конфигурацию. Он как нельзя лучше подходит для названной цели. По форме он резко отличается от других знаков и эффектно «разламывает» уравнение на две части. Благодаря этому человеческий глаз моментально решает первую визуальную задачу. Что касается алгебры Диофанта, то греческая буква йота I, используемая как знак равенства, слишком невзрачна и невыразительна. Она теряется среди других букв. Ее попросту не видно. Из-за этого зрительное выделение и опознание двух частей равенства заметно усложняется (см. правый столбец таблицы 17). 2. Следующая визуальная задача — разбить каждую часть уравнения на смысловые блоки, то есть выделить и опознать члены уравнения. Сегодня мы решаем эту задачу, фиксируя взором зрительные зоны, расположенные между знаками сложения и вычитания. Последние, выполняя функцию разделителей, моментально расчленяют уравнение, превращая его в гирлянду, состоящую из отдельных членов, «склеенных» знаками + и -. У Диофанта дело обстоит гораздо хуже. Использование знака недостатка А\ в качестве знака минус (—) трудно признать удачным. А полное отсутствие знака плюс (+) это уже бедствие, которое приводит к визуальной неоднозначности. В самом деле, современное выражение х2 + Зх по Диофанту записывается так: В последней формуле присутствуют три пары из двух смежных букв. Все они трактуются по-разному, что создает неоправданную нагрузку на память человека:
Глава 26. О ЧЕМ ГОВОРЯТ УРОКИ ИСТОРИИ? 423 • запись А обозначает х2; • запись а ? обозначает операцию сложения, причем складываются члены (AV а) + (? у ); • запись (^ У ) обозначает умножение х><3. Столь сложные правила расшифровки зрительной сцены вносят дополнительные и никому не нужные трудности в процесс зрительного восприятия. 3. У Диофанта три класса объектов (неизвестные, цифры и операции) имеют сходные обозначения (всюду — буквы), что затрудняет визуальное различение указанных классов и кристаллизацию соответствующих понятий. 4. Не существует обозначений для нуля, знака плюс и степеней неизвестной выше шестой. 5. Степени неизвестной величины обозначаются не путем вариации одного знака (х, х2, х3, х4, х5, х6), но имеют неоправданные различия и отсутствие общих элементов. В итоге нет визуальной подсказки, облегчающей опознание и выявление родственных черт у сходных понятий (степеней). 6. Отсутствует единая символика для чисел и показателей степени. Например, цифра 3 обозначается через у"> а х* — через К (X. Но в последнем выражении цифра 3G) отсутствует. Проведенный анализ показывает, что по эргономическим показателям символика Диофанта значительно уступает современным обозначениям. ВЫВОДЫ 1. Математика становится все сложнее. Для большинства специальностей требования к математической подготовке растут, поскольку возрастает роль математики в современной науке и технике, теории и практике. 2. Отпугивающая многих трудность изучения математики и вызванный ею недобор математических знаний неизбежно приводит к снижению интеллектуального потенциала общества. 3. Люди не в состоянии за ограниченное время усвоить знания, которые необходимы им для эффективного выполнения профессиональных обязанностей. 4. Жизнь властно ставит вопрос о необходимости эргономической реформы математического знания. Необходимо устранить неоправданные трудности, которые испытывают люди, изучающие математику и решающие математические задачи. 5. Чтобы преодолеть или хотя бы ослабить названные трудности, необходимо: • улучшить понимаемость (когнитивно-эргономическое ка-
424 Часть VL возможна ли эргономизация математики? чество) математической литературы и за счет этого облегчить изучение математики; • уменьшить интеллектуальные усилия (интегральные умственные трудозатраты), которые общество расходует на изучение и решение математических проблем (при сохранении заданных стандартов качества). 6. Эргономизация не есть нечто внешнее для математики. Наоборот, эргономизация — это неотъемлемая внутренняя компонента исторического процесса развития математических идей. 7. При разработке принципов эргономизации математики полезно учесть мировой опыт развития и комбинирования математической символики от древнейших времен до наших дней. 8. Математики почти всегда старались сделать математические методы более удобными для человека, улучшить понятность математических текстов. Это значит, что они (неосознанно) применяли и применяют эргономические методы. Однако этот процесс носил и носит интуитивный и кустарный характер. Подобная «кустарщина» ощутимо снижает когнитивное качество математической литературы, ухудшает понимание и взаимопонимание в математическом сообществе. 9. В наш междисциплинарный век пренебрежение к эргономическим методам следует признать устаревшим. Чтобы сделать эту мысль более наглядной, в этой главе мы провели эргономический анализ алгебры Диофанта. 10. С точки зрения эргономики, символика Диофанта значительно уступает современной алгебраической символике. 11. Анализ эволюции эргономики за две тысячи лет (на примере записи алгебраических уравнений) позволяет выявить обширный опыт эргономических приемов, который можно обобщить и — вместе с новыми идеями — использовать для современных задач. 12. Можно утверждать, что взаимосвязь математики и эргономики способствовала эффективной разработке эргономико-математических основ языка ДРАКОН.
Глава ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ. ОБСУЖДЕНИЕ И ПРИМЕРЫ 27 Нужно, как то свойственно сильным, отдавать предпочтение вопросам, которые никто не осмеливается ставить... Фридрих Ницше ЭРГОНОМИЧЕСКАЯ КАТАСТРОФА В АЛГЕБРЕ ПОСЛЕ ДИОФАНТА Алгебра Диофанта для своего времени была крупнейшим достижением. Однако ее постигла печальная участь. Оригинал на греческом языке в Европе был утерян и вновь найден только в XV веке [1]. К счастью, идеи Диофанта получили распространение в арабском мире и вернулись в Европу кружным путем — через арабское культурное влияние. При этом многое было утеряно и переоткрыто заново. Важным этапом на пути эргономизации европейской алгебры была замена греческих цифр на арабские. Самый древний европейский манускрипт, содержащий эти замечательные десять цифр, — «Вигиланский кодекс», написанный в Испании в 976 году. Однако по ряду причин, которых мы не касаемся, арабская система счисления распространялась в Европе очень медленно и стала общепринятой лишь к концу XV века [2]. К сожалению, имело место и попятное движение. Целый ряд эргономических находок Диофанта на несколько столетий был забыт. В частности, оказалась утраченной его буквенная символика, уступившая место словесным описаниям. Например, итальянский математик Леонардо Пизанский A180 — 1240) называет понятия так:
426 Часть VI. ВОЗМОЖНА ЛИ ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? • неизвестная — res (вещь) или radix (корень). • квадрат неизвестной — census (имущество) или quadratics (квадрат). • данное число — numerus. Все это — латинские переводы соответствующих арабских слов [1]. Наваждение слов преследовало математиков многие века. Общепринятых символов даже для самых простых арифметических действий не существовало. Каждый автор по-своему записывал сложение и вычитание, возведение в степень и извлечение корня. Требовалось немало усилий, чтобы разобраться в сложном лабиринте форм записи. Поэтому ученые доверяли больше словам, чем знакам. Они тяготели больше к словесным описаниям, чем к формулам [3]. КАК ФРАНЦУЗЫ ЗАПИСЫВАЛИ УРАВНЕНИЯ В XV ВЕКЕ Однако мало-помалу формульная запись начала пробивать себе дорогу. Но, боже, что это были за формулы?! Возьмем, к примеру, уравнение -\]4х2 + Ах + 2х + 1 = 100 В XV веке во Франции оно записывалось таким образом [4]. #2 42 p 4lP 21 Р 1 egalwca 100 A0) Автором записи A0) был бакалавр медицины Никола Шюке, который внес оригинальный вклад в алгебру. Какой же смысл имеет эта загадочная формула? Каким образом она получилась? Ответ дан на рис. 205. Дополнительные разъяснения можно получить из переводной таблицы 18. Современная запись Запись Никола Шюке (XV век) Рис. 205. Как преобразовать современные обозначения во французские обозначения XV века?
Глава 27. ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ. ОБСУЖДЕНИЕ И ПРИМЕРЫ 427 Таблица 18 -г 4л-2 + Ах Dл2 + 4л) 2л- I 1 = 1 100 ^4л2 + 4л R2 42 Р 41 А2Р 41 21 1 i egalwca 100 | К242 р 41 ЭРГОНОМИЧЕСКИЕ НЕДОСТАТКИ УРАВНЕНИЙ, ЗАПИСАННЫХ НИКОЛА ШЮКЕ 1. Обратите внимание: в формуле A0) явное обозначение для неизвестной величины х отсутствует. Буквы х в формуле просто нет! Это значит, что неизвестная величина в уравнении A0) не записывается, а только подразумевается. Вместо Ах1 Никола Шюке пишет 42. Вместо 4г соответственно 41. Это серьезный эргономический недостаток. 2. Есть и другой дефект: вместо удобных знаков + и - используются громоздкие буквенные обозначения р и т -1 3. Еще одна неприятность — применение длинного слова egaluxa в качестве знака равенства ( = ). 4. Следующий эргономический промах — неудачные обозначения для скобок. Там, где мы пишем {Ах2 + 4х), Шюке использует подчеркивание Ах1 + Ах. 5. С этим связано еще одно неудобство. У нас окончание подкоренного выражения обозначается окончанием линии корня л/ 4х2 + 4х . Однако Шюке и здесь применяет эргономически неудачное подчеркивание i?242 p 41. Отмеченные недостатки вносят дополнительные интеллектуальные трудности, снижают производительность труда математиков и создают неоправданную нагрузку на память читателей. 1 Знаки р и т для обозначения сложения и вычитания впервые предложил итальянский монах и бродячий преподаватель математики, автор двойной бухгалтерии Лука Пачоли (около 1445—1514) [10].
428 Часть VI. ВОЗМОЖНА ЛИ ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? ДАЛЬНЕЙШЕЕ РАЗВИТИЕ ПРАВИЛ ЗАПИСИ УРАВНЕНИЙ У истоков символической алгебры стоят труды Яна Видмана, уроженца чешского города Хеба. В 1489 г. он опубликовал знаменитую книгу «Быстрый и красивый счет для всего купечества». Именно в этом учебнике впервые в печатном издании появились символы плюс ( + ) и минус (-), введенные чуть раньше немецкими алгебраистами (коссистами). Французский математик и советник короля Франсуа Виет A540 — 1603) придумал знаки для произвольных величин, называемых сегодня параметрами. Он же предложил правило: неизвестные обозначать гласными буквами, а параметры — согласными (таблица 19). Таблица 19 запись уравнения Уравнение в записи Виета A cubus + В planum in Al aequatur C solidum Запись в правой части таблицы можно упростить. Ведь planum и solidum — паразитные слова, которые можно безболезненно опустить2. Сделав это, получим A cubus + В in Al aequatur С A1) Каким образом уравнение я3 + 7x5 = С превращается в формулу A1)? Ответ дает рис. 206. Дополнительные разъяснения читатель найдет в таблице 20. Современная запись Запись Франсуа Виета (XVI век j aequatur ][ С Рис. 206. Как преобразовать современные обозначения в обозначения Франсуа Виета? 2 Как и древние греки, Виет придерживался правила: сторону можно складывать только со стороной, квадрат — с квадратом, куб — с кубом и т. д. Поэтому для придания уравнению однородности Виет после входящих в него параметров писал planum (плоскость), solidum (тело) и т. д.
Глава 27. ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ. ОБСУЖДЕНИЕ И ПРИМЕРЫ 429 Таблица 20 X X3 Знак умножения 7х 1Вх = С Обозначение Виета А A cubus | in Al BinAl aequatur С Совершенно очевидно, что запись уравнений у Виета неэргономична, громоздка и словообильна. Тем не менее дело потихоньку двигалось вперед. Английский математик Роберт Рекорд A510 — 1558) придумал знак равенства (=). Томас Гарриот (умер в 1621 г.) сделал следующий эргономический шаг, полностью исключив словесные описания. Уравнение х3 - ЪЪх1 + ЗЬ'2х = 2Ь3 в записи Гарриота имело почти современный вид ааа - З.Ьаа + З.ЬЬа = 2.bbb Следующее эргономическое новшество принадлежит Рене Декарту. Он смело шагнул прямо в наши дни. Многие его обозначения мы используем и сегодня. Декарт обозначил: • неизвестные величины — буквами ху уу г; Ф известные величины — буквами а, Ь, с; Ф ввел обозначения степеней: х\ х*у а3, аА. Правда, квадраты Декарт иногда выражал с помощью символов хху аа. Его обозначение корня несколько отличается от современного: знак 4с означает у Декарта кубический корень. Есть и другие недостатки: Декарт «испортил» знак равенства, изображая его как (ос) [1,4]. ОСОЗНАНИЕ ПОЛЕЗНОСТИ ЭРГОНОМИЧЕСКИХ ИДЕЙ В МАТЕМАТИКЕ Подведем некоторые итоги. Эргономизация алгебры очень важна. Голландский историк математики Дирк Стройк высказывает важную мысль: «Новые результаты часто становятся возможными лишь благодаря новому способу записи... Подходящее обозначение лучше отображает действительность, чем неудачное. Оно оказывается как бы
430 Часть VL возможна ли эргономизация математики? наделенным собственной жизненной силой, которая в свою очередь порождает новое. За усовершенствованием алгебраических обозначений Виета поколение спустя последовало применение алгебры к геометрии у Декарта» [2]. С ним согласен философ Владимир Катасонов: «Весь XVI век проходит под знаком настойчивых поисков удобной (читай — эргономичной) алгебраической символики, которая позволила бы создать некое "исчисление" для решения задач... без излишней траты умственных сил, механически следуя простым правилам» [5]. Суть эргономизации алгебры не только в том, что она выработала очень компактные и удобные обозначения. Надо смотреть глубже. Эргономичные знаки и (что самое главное) их эргономичные комбинации образуют эргономичные зрительные сцены {диосцены). Эти сцены помогают улучшить продуктивность интеллекта. Точно и строго отражая математическую реальность, они (диосцены) вместе с тем гораздо лучше согласуются с нейробиологическими характеристиками человеческого глаза и мозга. Все это создает важные предпосылки для улучшения творческой продуктивности человеческого ума. Известно, что «прогресс науки... связан с созданием и совершенствованием символики. В свою очередь, сам этот прогресс зависит от того, насколько компактна и совершенна та знаковая система, которая отображает существенные свойства и черты реальности» [3]. Конечно, каждый отдельно взятый символ не может играть слишком большой роли. Но вся совокупность символов в целом, взаимоотношения между которыми складываются по вполне определенным правилам, — это уже целый язык, новая знаковая система. В таком едином ансамбле знакам присущи новые эргономические и иные свойства, которых не имеет каждый из них в отдельности. Эргономическая сущность замены словесных описаний на эффективные и компактные алгебраические формулы состоит в том, что происходит «удивительная рационализация визуального поля» [3]. В результате в оптическом поле одномоментного восприятия, визуального охвата оказывается значительно большая информация в удобной и доступной для восприятия форме. Это означает, что имеет место эффект симулътанизации, который, как мы знаем, является одним из наиболее мощных рычагов, обеспечивающих ускорение работы мозга. Согласно взглядам французского ученого Лазаря Карно, математические знаки «не являются только записью мысли, средством ее изображения и закрепления. Нет, они воздействуют на саму мысль, направляют ее. Бывает достаточно переместить их на бумаге согласно известным, очень простым правилам, чтобы безошибочно достигнуть новых истин... [Логика знаковых преобразований наталкивает людей] на
Глава 27. ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ. ОБСУЖДЕНИЕ И ПРИМЕРЫ 431 глубокие, не всегда привычные взаимосвязи явлений» [3, 6]. Кроме того, эргономизация алгебры включает в себя все ходы мысли, связанные с дроблением и вычленением новых понятий, доведением их до логического совершенства. Алгебра Декарта, например, неэргономична еще и потому, что в ней использовано неудачное определение понятия «коэффициент». Декарт полагал, что все буквенные коэффициенты в алгебраических формулах положительны. Это ограничение имело вредные последствия. Рассмотрим вопрос подробнее. Например, если р > 0 и q > 0, уравнение в записи Декарта полностью отвечает современным требованиям и является вполне эргономичным (если забыть про неудачный знак равенства): х* + рх] - qx ос О Если же знак коэффициента произволен, Декарт вводит странные многоточия [1]: X* — рх? - qx ос О Откуда взялись эти никому не нужные многоточия, усложняющие символику? Они являются следствием неудачного определения понятия «буквенный коэффициент». Чтобы устранить недостаток, надо улучшить определение, то есть сделать его более эргономичным. Для этого будем считать, что буквы в уравнениях обозначают любое действительное число3. При таком определении нелепые многоточия становятся ненужными и исчезают, превращаясь (как и положено) в знаки плюс (+) и минус (-). Данный пример показывает, что эргономизация понятий в свою очередь может оказать благотворное влияние на эргономичность обозначений. ЭРГОНОМИЧЕСКАЯ ПОБЕДА ЛЕЙБНИЦА Понятие «эргономизация» является универсальным. Оно применимо не только к алгебре, но и ко многим другим темам. Чтобы убедиться в этом, рассмотрим еще один пример, связанный с эргономизацией исчисления бесконечно малых. Почти одновременное изобретение дифференциального и интегрального исчислений Лейбницем и Ньютоном явилось восхитительным достижением. Однако, в противоположность удобным обозначениям Лейбница символика Ньютона оказалась громоздкой и эргономически неудачной. К чему это привело? Историк математики Майкл Кроу пишет: «ОбщеемнениебританскихматематиковХ1Хвекасостояловтом, что к 1800 году континентальные математики далеко превзошли 1 Декарт не мог этого сделать, поскольку он не знал действительных чисел. Последнее понятие появляется только в трудах Ньютона, который впервые провел арифметизацию алгебры, окончательно отделив ее от геометрии.
432 Часть VI. ВОЗМОЖНА ЛИ ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? английских главным образом потому, что обозначения Лейбница в математическом анализе оказались лучше Ньютоновых» [7]. Этот факт еще раз подтверждает, что когнитивное качество знаковых систем сильно влияет на интеллектуальную продуктивность. Ньютон был гением идеи, а Лейбниц — не только гением идеи, но и гением символики. Стремясь построить «всеобщую характеристику» (универсальный язык), он пришел ко многим новшествам в математических обозначениях. Лейбниц — один из самых плодовитых изобретателей математических символов. Немногие так хорошо понимали единство формы и содержания. Именно это внимание к знаку, к формальной стороне метода позволило Лейбницу сформулировать ряд важных положений математического анализа. Это и знаменитая формула Лейбница для дифференцирования произведения, и многое другое. Только со времен Лейбница в математике стали широко использоваться знаки умножения (•) и деления (:). Он же ввел в обиход символы логарифма (log), интеграла (j) и дифференциала (d). Символы Лейбница настолько ясно выражали смысл и значение новых понятий, что легко привились и стали общепринятыми [2, 3]. Речь, разумеется, идет не только о выборе одиночных обозначений (буквенных или иных), но прежде всего о правилах построения суперзнаков. Мы используем термин «суперзнак» для обозначения правил комбинирования одиночных символов и правил их взаимного расположения в двумерном поле бумажной страницы, позволяющих получить полезный формальный или смысловой результат. Таким образом, суперзнак — это диосцена либо ее смысловой фрагмент. Примером суперзнака является выражение а f(x)dx , Ъ а V а также любые формулы или цепочки формул, частью которых является указанное выражение4. Лейбниц хорошо понимал, что создание эффективных знаков и пользование ими заключает в себе огромные возможности. Как бы предвосхищая будущие достижения когнитивной эргономики и семиотики, открывающие и облегчающие путь к мощным интеллектуальным прорывам, он пишет: «Общее искусство знаков, или искусство обозначения представляет собой чудесное пособие, так как оно разгружает воображение... Следует заботиться о том, чтобы обозначения были удобны для открытий. Это большей частью бывает, когда обозначения коротко 4 Обобщая, можно сказать, что любой рисунок в этой книге, а также его достаточно крупная смысловая часть является суперзнаком.
Глава 27. ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ. ОБСУЖДЕНИЕ И ПРИМЕРЫ 433 выражают и как бы отображают интимнейшую суть вещей. Тогда поразительным образом сокращается работа мысли». Поучителен известный спор Лейбница с Вагнером. Лейбниц. Удобная символика очень много значит для науки. Возражение Вагнера. Умный справится с любой задачей и без вспомогательных средств, а неумному не помогут никакие руководства. Ответ Лейбница. Я уверен, что плохая голова, упражняясь в использовании вспомогательных средств [знаков], может превзойти самую лучшую, подобно тому, как ребенок может провести линию по линейке лучше, чем самый искусный мастер от руки. Гениальные же умы, снабженные такими преимуществами, пошли бы несравненно дальше. Школа Лейбница была «гораздо более блестящей, чем школа Ньютона» [2]. Что касается эргономически неудачной символики Ньютона, то она потерпела полный крах. Впрочем, поначалу деканы Кембриджа и Оксфорда рассматривали любую попытку своих студентов использовать обозначения Лейбница как нечестивый бунт против священной тени Ньютона. В итоге ньютонова школа в Англии и школа Лейбница на континенте настолько разошлись, что Леонард Эйлер в своем «Интегральном исчислении» A768 год) рассматривал объединение обоих способов записи, как бесполезное. Но эта преграда была сломлена в 1812 году группой молодых кембриджских математиков, среди которых был и Чарльз Бэббидж, которого иногда называют отцом современной вычислительной техники. Они пытались, говоря словами Бэббиджа, проповедовать принципы чистого б/-изма5 в противоположность университетскому dotage. (Почувствуйте прелестную игру слов. С одной стороны, dotage — старческое слабоумие. С другой стороны, dot — точка, age — эпоха. Получается, dotage — эпоха точек. Это более чем прозрачный намек на Ньютоновы обозначения производных *->уЛ ) [2]. Справедливости ради добавим, что символика Ньютона полностью не исчезла. С позором изгнанная из математического анализа, она тем не менее иногда применяется в теоретической механике. ПОУЧИТЕЛЬНАЯ ОШИБКА ИСТОРИКОВ МАТЕМАТИКИ История математики показывает, что многие разделы этой науки стали успешно разрабатываться только после того, как были введены удобные (эргономичные) знаки, способствующие развитию соответствующих рассуждений и построений. Профессор Туринского университета Джузегше 5 Игра слов: деизм — религия разума эпохи Просвещения. С другой стороны, я-изм — применение буквы df которую Лейбниц широко использовал в выражениях dx, dy, dx/dy и т. д.
434 Часть VL возможна ли эргономизация математики? Пеано настаивал на важном значении символического обозначения во всяком математическом предложении, его полезности в трудных и тонких вопросах. Американский ученый Стефен Клини совершенно правильно отмечает: «Открытие простых символических обозначений, которые сами приводят к манипуляциям по формальным правилам, явилось одним из путей, на которых развивалась мощь современной математики» [8]. Отсюда вытекает, что длительный исторический процесс изобретения, изменения, улучшения и реконструкции математической символики нельзя рассматривать как нечто второстепенное для математических исканий. Данный процесс (эргономический по своей природе) в немалой степени отражает волнующий путь зарождения и развития новых математических идей и понятий. Он теснейшим образом связан с сокровенными тайнами математического творчества. История математики — самостоятельная научная дисциплина. Мы полагаем, что изучение названного эргономического процесса должно стать одним из важных направлений этой науки. Разумеется, если она (история математики) хочет претендовать на статус дисциплины, удовлетворяющей современным междисциплинарным требованиям. К сожалению, в работах по истории науки в целом (и по истории математики, в частности) проблема эргономики нередко выпадает из поля зрения ученых. Во многих публикациях господствует «модернизаторский» подход, когда старинные формулы и чертежи грубо искажаются в результате некритического перевода на современный язык. При этом эргономическая драма древних обозначений и понятий полностью ускользает от внимания исследователя. Например, в работе Б. Спасского даже чертеж Галилея, при помощи которого тот решал свою задачу, сильно изменен и упрощен и все изложение ведется на современном языке [9]. Австрийский историк науки Отто Нейгебауэр довольно резко замечает: «Только в последнее время ученые, вслед за А. РомомиА. Делаттом, начали публиковать тексты вместе с рисунками и обозначениями на них. Кроме этих недавних исключений, ни одному изданию ке- рить нельзя, во всяком случае, в отношении вида, буквенных обозначений и даже наличия рисунков» [10]. Пример сознательно модернизированного издания — Арифметика Диофанта. Например, символ Диофанта ? (неопределенный квадрат) переделан на понятный современному читателю лад х2 (переменная х во второй степени) [9]. В чем причина этой «эргономической слепоты»? Ответ довольно прост. Модернизированные издания древних математических рукописей
Глава 27. ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ. ОБСУЖДЕНИЕ И ПРИМЕРЫ 435 позволяют быстро проследить ход решения задач и математических преобразований в современных обозначениях. Однако достигается это слишком дорогой ценой. Важнейшая задача историко-математического исследования — реконструкция математического мировоззрения древних авторов — остается невыполненной, так как отказ от старинных обозначений зачастую до неузнаваемости искажает старинную систему понятий. Другой недостаток состоит в том, что исследователь, упуская из виду междисциплинарный характер стоящей перед ним задачи, как бы «перепрыгивает» через самый трудный участок. (Имеется в виду историко-эр- гономический анализ эволюции математических понятий и символики). Тем самым он полностью лишает себя возможности выявить и тщательно исследовать эргономическую суть проблемы. В результате историко-ма- тематическое исследование не достигает цели и, по крайней мере, частично превращается в неумышленную фальшивку. ПЕРЕХОД ОТ СТИХИЙНЫХ УЛУЧШЕНИЙ К СОЗНАТЕЛЬНОЙ И ЦЕЛЕНАПРАВЛЕННОЙ ЭРГОНОМИЗАЦИИ МАТЕМАТИЧЕСКОГО ТЕКСТА Выше мы рассмотрели несколько примеров «стихийной» эргономизации математики в ходе ее исторического развития. Эти примеры убедительно подтверждают уже сделанный нами Вывод. Эргономизация есть неотъемлемая внутренняя компонента исторического процесса развития математических идей, содействующая повышению производительности математического труда. Возникает законный вопрос. А нельзя ли превратить стихийный процесс эргономизации в сознательно управляемый? Можно ли использовать богатый арсенал когнитивно-эргономических приемов для повышения эффективности математической работы? Ниже приведены примеры, позволяющие дать утвердительный ответ. Эти примеры демонстрируют возможность сознательной и целенаправленной эргономизации математического текста. Пример 1. Язык ДРАКОН является результатом продуманного и последовательного применения эргономических правил. О ПОЛЬЗЕ ЭРГОНОМИЧНЫХ аРЕЛОК. МАЛЕНЬКИЙ СЕКРЕТ ПРОСТОЙ ЗАДАЧИ Пример 2. Рассмотрим задачу на рис. 207, которая содержит «маленький секрет», связанный с числом 4. Действительно, в условии задачи мы видим 4 отдельных условия (см. икону «комментарий»). В ветке «Решение задачи» имеются 4 вертикали, помеченные буквами А, В, С, D. Таким образом, в данной задаче действует
436 Часть VI. ВОЗМОЖНА ЛИ ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ? Правило. Число условий равно числу вертикалей. Причем каждому условию соответствует своя собственная вертикаль. Копнув глубже, можно заметить, что в задаче выполняется закономерность: • каждому условию соответствует свое решение, • каждое решение изображается отдельной вертикалью. В обычных условиях указанные закономерности являются невидимкой — они скрыты от читателя. Человек может правильно решить задачу, даже не заметив, что у него под носом затаился «маленький секрет». Это значит, что он решил задачу поверхностно, не проникнув в ее тайные глубины. Чтобы устранить недостаток, надо сделать читателю небольшую, но умную эргономическую подсказку. Такой подсказкой служат 4 широкие серые горизонтальные стрелки. Каждая из них устанавливает зрительную связь между условием и соответствующей вертикалью. Эти стрелки сразу бросаются в глаза и помогают читателю разгадать секрет. Разумеется, можно обойтись и без стрелок. Но если мы хотим проявить заботу о читателе, облегчить его утомительный труд и оказать ему дополнительную помощь, то стрелки и многие другие эргономические мелочи, несомненно, будут очень полезны. Эту мысль следует подчеркнуть особо. С логической точки зрения, указанные стрелки являются «архитектурным излишеством» и совершенно не нужны для решения задачи. Но с эргономической точки зрения, дело обстоит иначе. Цель эргономики — облегчение умственного труда, минимизация интеллектуальных усилий, достижение «необыкновенной легкости и глубины мышления». Именно это и достигается. Указывая на нужную вертикаль, стрелки помогают читателю прозреть и проникнуть в глубинную суть задачи. Фокус в том, что каждая вертикаль имеет два «золотых» конца: верхний и нижний. Верхний конец содержит алгоритмическую запись условия, нижний — решения. Все это математическое богатство и открывается ученику благодаря стрелкам. Если от правого конца стрелки читатель поднимет глаза вверх, он увидит алгоритмическую реализацию условия. Если же посмотрит вниз — увидит решение. Поскольку стрелок четыре, подобную операцию придется проделать четыре раза. Но после этих упражнений структура алгоритма станет абсолютно прозрачной, ясной и наглядной. ЭРГОНОМИКА ОБЛЕГЧАЕТ РЕШЕНИЕ ПРОВОКАЦИОННОЙ ЗАДАЧИ Пример 3. Разберем задачу на рис. 158. Это провокационная задача, так как она имеет не один, а шесть ответов. Но этого мало. Чтобы «раскопать»
Глава 27. ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ. ОБСУЖДЕНИЕ И ПРИМЕРЫ 437 С Логическая и арифметическая задача Условие задачи Решение Дано Заданы действительные числа X и Y. Надо ? тельны, то каждое : з нач ен ие заменить х, ,*, * х щ теиьио только едно на 0,$^% - ^ 3, Если оба значения -\ , неотрицательны и ни - "* o$i№ из них не принау; i то' оба4 з**ачёй*«#г ч уменьшать на ^ {; 4, Ш остальных елу« чаях X и Y умножить ( Конец ) Рис. 207. Сложная логическая задача с простыми вычислениями
438 4aCTb VL возможна л и эргономизация математики? правильные ответы, нужно рассмотреть восемь (!) вариантов решении. 11 отбросить два из них как бессмысленные. Типичная ошибка состоит в том, что учащиеся не видят эти восемь вариантов решения. И по этой причине упускают из виду один или несколько ответов. На рис. 158 решение задачи изображено в виде чертежа (дракон-схемы). При этом используется ряд эргономических приемов, облегчающих понимание. • Чертеж создает целостный графический образ решения, в котором иконы связаны между собой соединительными линиями. • Целостная графика заставляет учащихся учесть все варианты, так как пропущенный вариант порождает оборванную линию типа «висячий хвост». Последняя сразу же будет опознана, как ошибка, и исправлена. • Схема упорядочена по вертикали таким образом, что «бегунок», двигаясь по линиям сверху вниз, перемещается от условия задачи к одному из ответов. Значит, зрительная сцена организована не хаотично, а по правилу «Вверху — условие задачи, внизу — ответы». • Схема упорядочена и по горизонтали. На одной горизонтали расположены однородные иконы, внутри которых находятся близкие по смыслу текстовые надписи. Это дисциплинирует чертеж, делает его зрительно предсказуемым, облегчает чтение и понимание. • Чтобы облегчить зрительное различение хороших и плохих вариантов, нижняя горизонталь (горизонталь ответов) расщеплена на два уровня, слегка смещенных друг относительно друга. • На нижнем уровне размещены шесть хороших вариантов, содержащих правильные ответы. Чуть выше находятся два плохих варианта, которые не содержат ответов. Подведем итоги. Перечисленные эргономические приемы помогают читателю упорядочить свои мысли, привести их в стройную систему. В итоге сложная задача словно по волшебству упрощается, становится наглядной и доходчивой. МАТЕМАТИКА: БЛАГО ИЛИ ЗЛО? Изучение математики — нелегкое дело. Многие люди страдают, мучаются, зарабатывают неврозы и даже сходят с ума, не выдерживая огромной учебной нагрузки. Причина проста — нагрузка превышает их индивидуальные психофизиологические возможности [11]. В течение длительного времени математическая общественность, педагогическая наука и общество в целом не обращали внимания на эти неудобные факты. Точнее говоря, рассматривали их как неприятную, но неизбежную плату за высокий уровень образования населения, научно-технический прогресс и экономическое благосостояние общества.
Глава 27. ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ. ОБСУЖДЕНИЕ И ПРИМЕРЫ 439 Но являются ли математические трудности и вызванные ими человеческие страдания и трагедии действительно неизбежными? Нельзя ли их устранить или хотя бы ослабить? Мы убеждены, что можно. Для этого нужно коренным образом изменить традиционный стиль математического мышления. Нужно «одеть» чертовски трудную математику в приятные для глаза эргономические «одежды», создающие повышенный интеллектуальный комфорт и облегчающие их решение. Говоря о математических трудностях, мы имеем в виду микроскопические интеллектуальные затруднения, такие, например, как нарушение правила главного маршрута (см. главу 4). Каждая отдельная трудность очень мала; ее последствия почти незаметны. Но из ничтожных частиц воздуха рождается штормовой ветер. Из капель воды — бурлящий океан. Беда в том, что трудностей много. Вся наша жизнь — сплошные трудности. Если сложить математические трудности воедино, они превращаются в тягчайшее испытание, в реальную опасность. На нашей планете миллиарды учащихся и миллионы интеллектуальных работников. Многие из них имеют дело с математикой. Они испытывают множество трудностей, часто неосознанных. Таким образом, математические трудности воздействуют на огромное число людей, нанося им немалый ущерб. Необходимо постоянно помнить об этом. Когда автор математической книги или учебника создает свое «уму непостижимое» произведение, он, как правило, не задумывается о страданиях читателей. Это очень плохо. Ведь речь идет не о вымышленных, а о подлинных трудностях и страданиях. Мучения людей, изучающих математические книги, заслуживают сострадания и реальной помощи. Наш мир не может существовать без математики. Эта уважаемая наука проникла во все поры современной цивилизации. Но есть и другая сторона медали. Математика — это «интеллектуальная болезнь», эпидемия которой охватила весь земной шар. Она поразила множество людей, внося немалый вклад в повсеместно наблюдаемый рост нервно-психических заболеваний. Математика подобна автомобилю. Автомобиль есть благо —"он облегчает жизнь человечества. Но под его колесами ежегодно гибнут десятки тысяч людей. Для защиты от автомобилей создана мощная инфраструктура: правила уличного движения, светофоры, дорожные знаки, водительские права, транспортные развязки, пешеходные зоны и переходы, ремни безопасности, аварийные надувные подушки и многое другое. Для защиты от «математической болезни», то есть от негативного воздействия математики и других сложных наук на здоровье людей, никаких защитных средств пока не придумано. Такое положение недопустимо. Его надо в корне менять. Но как это сделать?
440 Часть VL возможна ли эргономизация математики? О ПОЛЬЗЕ ЭРГОНОМИЧЕСКИХ МЕЛОЧЕЙ В МАТЕМАТИКЕ Общий ответ таков. Необходимо тщательно и скрупулезно выявлять мельчайшие неудобства и препятствия, мешающие людям осваивать математические знания, и последовательно, шаг за шагом, их устранять. Это большая, кропотливая работа. Дело усугубляется тем, что существует вредная привычка игнорировать проблему математических трудностей, рассматривать их как недостойные внимания пустяки. Чтобы переломить ситуацию, нужно в корне изменить отношение к делу. Нужно признать, что математические трудности — крайне серьезная, острая, нерешенная и «больная» проблема. Современная математика — это вовсе не сверкающий дворец эргономического совершенства. Скорее это эргономические авгиевы конюшни, нуждающиеся в решительной эргономической чистке. Неприятность в том, что этот подвиг нельзя выполнить методом Геракла — одним мощным ударом. Необходима кропотливая, нудная, повседневная работа, состоящая из миллиона эргономических мелочей. В качестве примера рассмотрим «под лупой» одну из таких мелочей. Вернемся к задаче на рис. 158. В этой задаче шесть ответов. В связи с этим возникает несколько вопросов. Как сделать, чтобы ответы сами бросались в глаза читателю? Чтобы не приходилось продираться сквозь джунгли математического текста? В какой форме следует записывать ответы, чтобы запись была наглядной и понятной? Как добиться, чтобы время, затраченное на восприятие ответов, было минимальным? Описанная проблема может показаться мелочью. Но в эргономике не бывает мелочей. Поэтому для наглядного представления ответов на рис. 158 предусмотрена целая батарея эргономических приемов. Некоторые из них нам уже знакомы: • чертеж ориентирован сверху вниз согласно правилу «Вверху — условие задачи* внизу — ответы»; • горизонталь ответов расщеплена на два уровня: нижний — для правильных ответов, верхний — для плохих (не имеющих смысла). Но этого мало. Чтобы облегчить чтение ответов, каждая икона «комментарий» (расположенная в линейке правильных ответов) содержит текст, разбитый на 4 вертикальные зоны: • в верхней зоне написан заголовок «Если»: • во второй зоне указаны условия на сером фоне; • в третьей зоне написан заголовок «Ответ»: • в нижней зоне указан ответ на сером фоне. Предположим, мы желаем узнать набор ответов (а связанные с ними условия нас не волнуют). В этом случае мы ищем взглядом заголовок- подсказку «Ответ», легко догадываясь, что математический ответ нахо-
Глава 27. ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ. ОБСУЖДЕНИЕ И ПРИМЕРЫ 441 дится точно под этим словом на сером фоне (рис. 158). Если бы подсказки не было, поиск ответа был бы затруднен. Пришлось бы думать — тратить силы на ненужные и избыточные размышления. При этом время поиска неизбежно увеличится, а производительность труда снизится. Предположим теперь, что нас интересует набор условий (при которых справедлив данный ответ). В этом случае нас выручит заголовок-подсказка «Если». Набор условий записан точно под этим словом на сером фоне. А искомый ответ расположен «этажом ниже» в той же самой иконе (рис. 158). Подведем итоги. Мы убедились, что эргономические хитрости помогают делу. Вертикальное структурирование надписей в иконе «комментарий» и подсказки приносят большую пользу и позволяют мгновенно поймать взором нужную информацию. Все это говорит о том, что математический текст действительно можно сделать более легким для чтения с помощью тщательно продуманных эргономических приемов и правил. «ЗИЯЮЩАЯ РАНА» СОВРЕМЕННОЙ НАУКИ Изложенный материал позволяет сделать предварительный вывод о необходимости перестройки математики на эргономической основе. Нетрудно сообразить, что данный вывод вступает в острое противоречие с общепринятым стилем математического мышления и традиционными взглядами на роль математики в системе наук. Это утверждение нуждается в пояснениях. Математику часто называют царицей наук. Она дала человечеству непревзойденные идеалы строгости, точности и эффективности, позволившие создать математический фундамент современной цивилизации. Математическое мышление является «королевским» эталоном научного успеха, образцом строгой доказательности для всех наук. Потому математика пользуется в обществе громадным авторитетом. Все остальные науки в той или иной мере пытаются ей подражать. Преклонение перед математикой имеет богатую историю. Оно формировалось на протяжении двух тысяч лет, начиная с выдающихся достижений древних математиков. Аристотель в свое время писал: «Пифагорейцы были первыми, кто, занявшись математическими науками, продвинул их вперед. Воспитавшись на них, пифагорейцы стали считать их началами всех вещей» [12,13]. Платон считал, что без математики невозможно достичь подлинной мудрости. Высокая значимость математического идеала для науки не ограничивается античностью и существенно возрастает в эпоху позднего средневековья [14]. Английский философ Роджер Бэкон (XIII век) четко заявляет о превосходстве математики над всеми другими областями познания. По его мнению, «в одной лишь математике имеются неонровержи-
442 Часть VL возможна ли эргономизация математики? мые доказательства» [15]. Близких взглядов придерживается Леонардо да Винчи: «Никакой достоверности нет в науках там, где нельзя приложить ни одной из математических наук, и в том, что не имеет связи с математикой» [16]. Философ Иммануил Кант утверждает: «В любом частном учении о природе можно найти науки в собственном смысле лишь столько, сколько имеется в ней математики» [17]. Ему вторит социолог Карл Маркс: «Наука лишь тогда достигнет совершенства, когда ей удастся пользоваться математикой» [18]. В XX веке педагог Павел Блонский в книге «Реформа науки» изложил эту мысль is предельно заостренной форме: «Всякая наука постольку наука, поскольку в ней есть математика- Мыслим как математики — вот боевой клич подлинных философов-мыслителей» [19]. Недостаток такой позиции в том, что огромный и вполне заслуженный авторитет математики окружает ее своеобразной защитной стеной, которая делает затруднительной критику в адрес столь могущественной науки. Тем не менее, такая критика давно назрела и является вполне оправданной. Приходится признать, что традиционная математика в некотором смысле превратилась в хорошо укрепленный бастион устаревшего и неполноценного мышления. Не подлежит сомнению, что в самой сердцевине математического мышления скрыто глубокое противоречие. Речь идет не о мелочах; а о «зияющей ране» на теле современной науки. КРИТИКА МАТЕМАТИКИ Главное обвинение против математики состоит в том, что эта уважаемая наука проявляет стойкую нечувствительность и невосприимчивость к эргономическим идеям, что в наше время выглядит недопустимым анахронизмом. Тем не менее, факт остается фактом — для математики характерна почти полная эргономическая «слепота и глухота». Чтобы пояснить мысль, мы выдвигаем три критических замечания в адрес математики, а также в адрес системы наук, обожествляющей математику. Замечание 1. В подавляющем большинстве случаев математические идеи, теории и методы (за исключением тривиальных) становятся достоянием математического сообщества после представления их в письменном виде, предназначенном для зрительного восприятия. Производительность математического труда во многом зависит от скорости восприятия математических текстов, а последняя — от их
Глава 27. ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ. ОБСУЖДЕНИЕ И ПРИМЕРЫ 443 эргономических характеристик. Сегодня нельзя игнорировать механизмы зрительного восприятия. Не умея ими управлять, математики отрезают себе путь к созданию научно-обоснованных методов повышения производительности математического труда. Замечание 2. На протяжении всей многотысячелетней истории развития математической науки ее жрецы и поклонники были вынуждены решать эргономические проблемы. Но делалось это стихийно, вслепую и крайне неэффективно. Однако эргономические проблемы нельзя решать по наитию, «без царя в голове». Необходим строгий научный подход. Отсутствие такого подхода приводит к тому, что скорость понимания и взаимопонимания в математике остается крайне низкой и значительно отстает от растущих требований. Замечание 3. Существующая система наук рассматривает математику и эргономику как самостоятельные, не связанные между собой научные дисциплины. Такой взгляд на вещи обладает серьезным недостатком. Математика есть человеческая деятельность, которая во многом теряет смысл без зрительного восприятия. Если считать, что чистая математика не должна заниматься изучением мышления и зрительного восприятия, придется признать, что математика — не полноценная наука, а всего лишь ее половинка. Другой половинкой является эргономика. Чтобы обеспечить системный подход к решению математических проблем, необходимо соединить две половинки, чтобы получить полноценную и самодостаточную науку. Иными словами, нужно объединить усилия математики и эргономики в рамках нового научного направления — эргономичной математики (эргоматематики). Дело, разумеется, не в том, чтобы выдумать новый термин. Можно сохранить прежний термин — математика — наполнив его новым содержанием. Дело не в словах, а в признании того, что нынешний раскол между математикой и эргономикой является неприемлемым. Вывод. Сегодня актуальной задачей является эргономизация математики. Нужна перестройка всего здания математической науки на основе грамотного, научно-обоснованного решения эргономнко- математических проблем. МАТЕМАТИЧЕСКАЯ И ЭРГОНОМИЧЕСКАЯ ЭФФЕКТИВНОСТЬ Рассмотрим вопрос о недостатках математики чуть подробнее. Вся математическая литература по определению представляет собой зрительную информацию. Математические знания, которые мы получаем при помощи компьютерного экрана и принтера, тоже предназначены для глаз. Таким образом, в 99% случаев человек получает математическую информацию в
444 Часть VL возможна ли эргономизация математики? зрительной форме. У математического текста есть два фундаментальных свойства: • он несет определенное смысловое содержание и отображает математическую реальность. • он представляет собой последовательность зрительных сцен, предназначенных для зрительного восприятия человеком. Отсюда вытекает, что форма математической зрительной сцены есть объект двойного назначения. Во-первых, отражая математическую реальность, она должна обеспечить выполнение математических операций со знаками, преобразование этих знаков по определенным правилам, позволяющим получить искомый математический результат. Во-вторых, именно форма знаков и знаковых комплексов, заполняющих зрительную сцену, задает конечный результат зрительного восприятия, обеспечивая понимание человеком сущности математических идей и преобразований. Разрушение или искажение формы приводит к двум «катастрофам»: • математическое содержание пропадает, превращаясь в ничто, бессмыслицу, • осмысленное восприятие человеком математического текста рассыпается, понимание исчезает, а сама зрительная сцена воспринимается как абсурдный набор бессодержательных пятен и линий. Проведенный анализ позволяет различать два понятия: • математическую эффективность, • эргономическую эффективность. Математическая эффективность имеет место, если идеи позволяют получить результат, удовлетворяющий критерию математической строгости и другим полезным математическим критериям. Эргономическая эффективность имеет место, если удовлетворяется эргономический критерий Декарта. Иными словами, если человек, работая с математическим текстом, добивается результата ценою минимальных интеллектуальных усилий (см. главу 1). Интеллектуальная легкость нужна в двух случаях: • чтобы воспринять и усвоить математическое содержание последовательности зрительных сцен (если речь идет об изучении математического материала); • чтобы решить соответствующую математическую задачу с помощью указанных зрительных сцен (если речь идет не об изучении известных задач, а о решении новых). Органический, принципиально неустранимый дефект понятия «математическая эффективность» состоит в том, что оно почти полностью игнорирует проблему понятности математических текстов и связанный с нею критерий Декарта. Если на земном шаре отыщется пара суперматематиков, способных понять новую сложную математическую идею, этого
Глава 27. ЭРГОНОМИЗАЦИЯ МАТЕМАТИКИ. ОБСУЖДЕНИЕ И ПРИМЕРЫ 445 вполне достаточно, чтобы дать ей путевку в жизнь. При этом «мучения» всех остальных специалистов и студентов, вызванные трудностями понимания, категорически не принимаются в расчет. Понятие «эргономическая эффективность математики» вводится для того, чтобы облегчить и упростить процесс познания сложных математических проблем, создать научную основу для введения понятия «производительность математического труда». На этой основе можно обеспечить реальное повышение продуктивности работы ума математиков, а также миллионов людей, изучающих эту сложную науку. Утрируя, можно предложить вымышленный диалог. — Почему математика такая трудная? — Потому что до сих пор никто не пытался создать научно-обоснованный метод, позволяющий сделать ее более легкой. КАК ПОВЫСИТЬ ПРОИЗВОДИТЕЛЬНОСТЬ МАТЕМАТИЧЕСКОГО ТРУДА? Развитие математики и логики увенчалось созданием богатого набора формальных правил, использование которых позволяет решать обширный класс математических и логических задач. При разработке этих правил математики преследовали две цели. Первая была основной и явно выраженной — обогатить м^тедоатичрское знание. Другая цель состояла в том, чтобы сделать знаковые сиртемм нематематические преобразования по возможности удобными и обозримыми. Эта (эргономическая) цель была скорее интуитивной, чем осознанной и научно-обоснованной. В настоящее время, когда сложность математических знаний превысила критический порог, настало время коренным образом изменить подход к проблеме. В математических исканиях следует выделить два набора правил: • набор традиционных математических и логико-математических правил, обеспечивающих достижение математической эффективности; • набор эргономических формальных или частично формальных правил, цель которых — добиться эргономической эффективности математических методов. Необходимо уравнять в правах и объединить оба набора. В итоге получим единый набор формальных правил, для обозначения которых можно предложить термин когнитивная формализация знаний. Совместное применение правил даст удвоенный выигрыш. В данном контексте повышение производительности математического труда следует понимать как повышение продуктивности человеческого мозга (мозга математиков). Это не столько математическая, сколько эргономическая проблема. Человеческий ум и методы улучшения его работы — предмет изучения не математики, а когнитивной эргономики. Эту мысль следует подчеркнуть особо: эргономический выигрыш в математике
446 Часть VL возможна ли эргономизация математики? есть не что иное, как повышение производительности математического труда. Когнитивная формализация знаний как научная идея, направленная на улучшение работы человеческого ума, — это новорожденный младенец, делающий самые первые шаги. Но, как представляется, этому младенцу суждено большое будущее. ВЫВОДЫ 1. Одной из главных проблем математики является ее неимоверная трудность, которая во многих случаях превышает возможности человеческого ума. 2. Сегодня производительность математического труда крайне низка, однако повышение этой производительности есть проблема не только математики, но и эргономики. 3. Применение когнитивно-эргономических методов для улучшения письменной (зрительно воспринимаемой) формы представления математических знаний позволяет существенно улучшить когнитивное качество и понятность математических текстов. 4. Традиционные формы и методы развития и фиксации математических идей, игнорирующие эргономические аспекты математических проблем следует признать устаревшими.^ч ч 4v *' 5. Для успешного продвижения вперед необходимо осуществить синтез идей математики и эргономики в рамках нового междисциплинарного направления — эргономичной математики (эргоматемати- ки). 6. В настоящее время имеются почти все необходимые предпосылки для практического создания нового поколения учебников математики, построенных с учетом когнитивно-эргономических принципов. 7. Цель создания нового поколения математических учебников и книг состоит в том, чтобы сократить интеллектуальные трудозатраты на восприятие, понимание и глубокое усвоение математических знаний в несколько раз, возможно, на порядок. 8. Разработка языка ДРАКОН велась в соответствии с принципами, изложенными в этой главе.
НОВОЕ ПЛАТЬЕ АЛГОРИТМОВ: ВЗГЛЯД В БУДУЩЕЕ (вместо заключения) Без алгоритмов предмета информатики не существует. Анатол и й Дородн и цын СТАРЫЕ ПРИВЫЧКИ ПОРА МЕНЯТЬ Алгоритмы и программы являются важной частью современной цивилизации. К сожалению, многие алгоритмы похожи на таинственные письмена. Они непонятны никому, кроме их создателей. Непонимание порождает путаницу и досадные ошибки. Оно обходится очень дорого. Чтобы поправить дело, надо сделать алгоритмы дружелюбными. Это позволит превратить запутанные головоломки в наглядные алгоритмы- картинки, обеспечивающие быстрое и глубокое понимание. Глубина понимания сложных проблем — как раз то, чего всем нам (от студента до министра) ой как не хватает! В этой книге мы попытались показать, что прежние способы записи алгоритмов устарели и нуждаются в радикальном обновлении. МОЖНО ЛИ ТРУДНОЕ И НЕПОНЯТНОЕ СДЕЛАТЬ ЛЕГКИМ И ПРИЯТНЫМ? Можно ли преобразовать алгоритмы-ребусы в доходчивые чертежи, доступные почти каждому? Да, можно. Для этого нужно переодеть алгоритмы в новое платье. Старое платье сделано из грубого брезента. Оно не помогает, а мешает читателю быстро уяснить суть дела. Потому что брезент наглухо скрывает
448 НОВОЕ ПЛАТЬЕ АЛГОРИТМОВ: ВЗГЛЯД В БУДУЩЕЕ (вместо заключения) от читателя тонкие алгоритмические подробности. Новое платье должно ласкать глаза и быть абсолютно прозрачным. Только в этом случае мы сможем хорошо рассмотреть алгоритмические хитрости и детали. И сумеем выполнить важное требование: «Посмотрел — и сразу понял!», «Взглянул — и мигом во всем разобрался!». СВЕРКАЮЩИЕ ЗОЛОТОМ БЛОК-СХЕМЫ Некоторое время назад возобладало мнение, что блок-схемы устарели и не приносят пользы. Многие с этим согласились. И поставили на блок-схемах жирный крест. Почему? Причина проста. Старинные блок-схемы действительно представляют собой неприглядное зрелище. Они похожи на запутанный лабиринт или непролазные джунгли. Стало ясно, что в темном царстве блок-схем нужны глубокие изменения, способные убрать чертополох и создать образцовый порядок. Математика помогла превратить первобытный хаос в регулярную структуру. В итоге косноязычные блок-схемы превратились в кристально ясное понятие — дракон-схему «силуэт». Теоретическим фундаментом языка ДРАКОН являются: • исчисление икон; • модифицированный метод Эдуарда Ашкрофта и Зохара Манны. Появление строгой математической основы коренным образом изменило ситуацию. Благодаря этому новшеству блок-схемы полностью преобразились. И превратились в красивый математический объект (компьютерную программу), которую можно вводить в компьютер и транслировать в объектные коды. Блок-схемы перестали быть всего лишь игрушкой и иллюстрацией к программе. Они стали не иллюстрацией, а самой настоящей программой. ДРАКОН-КОНСТРУКТОР Исчисление икон реализовано во внутренних алгоритмах дракон-конструктора. Дракон-конструктор (дракон-редактор) осуществляет 100%-е автоматическое доказательство правильности дракон-схем, гарантируя принципиальную невозможность ошибок визуального синтаксиса. Безошибочное проектирование графики дракон-схем — важный шаг вперед, повышающий производительность труда при практической работе. КОГНИТИВНАЯ ЭРГОНОМИКА Язык ДРАКОН имеет две опоры. Первая — математика. Вторая — психология, точнее, когнитивная эргономика. Именно эргономика позволяет сделать дракон-схемы изящными и понятными. При создании ДРАКОНа
НОВОЕ ПЛАТЬЕ АЛГОРИТМОВ: ВЗГЛЯД В БУДУЩЕЕ (вместо заключения) 449 был использован научный подход к эргономизации конструкций языка. Такой подход позволил улучшить визуальные образы языка (визуальные формы фиксации знаний), согласовав их с тонкими характеристиками глаза и мозга. Разработка исчисления икон говорит в пользу этой идеи и служит примером, подтверждающим актуальность когнитивной эргономики. Компьютерная графика — важное достижение. Но графика графике рознь. Надо уметь различать: • кустарное преобразование текста в изображение; • научные методы визуализации, опирающиеся на прочную эргономическую и логико-математическую базу. Требования когнитивной эргономики позволили преобразовать древние блок-схемы («на которые без ужаса смотреть невозможно») в элегантные очертания приятных и доходчивых дракон-схем. С появлением дракон-схем разработка алгоритмов существенно облегчается. Язык ДРАКОН — качественно новый этап работы с алгоритмами. ОБОБЩЕНИЕ ПОНЯТИЯ «АЛГОРИТМ» В главах 14—22 приведены примеры алгоритмов. Примеров много и их разнообразие столь велико, что имеет смысл говорить об «алгоритмах в широком смысле слова». Это понятие охватывает четыре типа объектов: • математически строгие алгоритмы; • структуру человеческой деятельности; • технологические процессы; • биологические процессы, протекающие внутри живых организмов. Рисунки 136—164 представляют собой примеры алгоритмов, используемых в самых различных областях: медицине, промышленности, торговле, атомной энергетике, биологии и т. д. ВИЗУАЛЬНОЕ СХОДСТВО АЛГОРИТМОВ Все эти чертежи описывают различные процессы, действия и события, которые на первый взгляд не имеют ничего общего. Создается впечатление, что между ними нет никакого сходства. В самом деле, если содержание этих рисунков представить в виде текстового описания, графическая структура указанных процессов и событий как бы исчезает, становится скрытой, неуловимой. Но ситуация разительно меняется, если перейти от текстового описания к дракон-схемам. Мы сразу увидим изящную и четкую структуру алгоритмов, образованную делением силуэта на ветки и т. д. Образно говоря, язык ДРАКОН срывает шапку-невидимку с этой драгоценной структуры, делает ее зримой, бьющей в глаза.
450 Н0В0Е ПЛАТЬЕ АЛГОРИТМОВ: ВЗГЛЯД В БУДУЩЕЕ (вместо заключения) Любой алгоритм (в широком смысле слова) можно описать с помощью дракон-схемы. При этом абстрактная дракон-схема (из которой полностью удален текст) является графическим каркасом алгоритма. Способность абстракции, возможность увидеть единое в различном — важная способность человеческого ума. Инструменты, развивающие эту способность, содействуют увеличению силы ума. Известно, что процесс обучения и образовательная среда учат человека извлекать знания из собственной деятельности, постигать принципы собственных действий и руководствоваться ими в новых ситуациях. Или, как говорят педагоги, осуществлять перенос знаний, занимающий огромное место в образовательном процессе и практической жизни. Язык ДРАКОН, формализуя и эргономизируя алгоритмы, позволяет легко выполнять перенос процедурных знаний от человека к человеку. ДРАКОН выявляет визуальную логическую структуру алгоритмов, закрепляет ее в сознании. И стимулирует более глубокое постижение принципов построения алгоритмов. На конкретных примерах мы убеждаемся в том, что ДРАКОН действительно пригоден для описания алгоритмов в самых разнообразных, непохожих друг на друга сферах деятельности. Преимущество состоит в использовании единой визуальной формы для строгих алгоритмов, технологических процессов, структуры человеческой деятельности и биологических процессов. ПОВЫШЕНИЕ ПРОИЗВОДИТЕЛЬНОСТИ ТРУДА Язык ДРАКОН позволяет эффективно формализовать процедурные профессиональные знания. Что это дает? Поскольку процесс формализации знаний оказывается чрезвычайно легким, он становится доступным практически для любого человека, который хорошо знает свое дело. Каждый специалист приобретает новые возможности. Он может формализовать свои знания сам, без помощи инженеров по знаниям или программистов, то есть воспользоваться всеми благами автоформализацип знаний. Он может выражать свои мысли на своем родном профессиональном языке, но в формализованном виде. В результате человек получает мощное средство делового общения, ибо благодаря ДРАКОНу его родной профессиональный язык каким-то чудесным образом стал очень похож на (процедурные) профессиональные языки других специальностей. Наибольшие для человека трудности возникают в сложных видах деятельности, когда человеческий ум, сталкиваясь с большими и разнообразными задачами, начинает давать сбои. Следствием этого являются разного рода ошибки, недоработки, дефекты и упущения, взаимное непонимание, путаница, затяжки выполнения работ и срывы плановых сроков. Язык ДРАКОН дает возможность ослабить или устранить подобные неприятности. Он позволяет значительно упростить форму представления задачи, сделать ее обозримой и ясной. В итоге ДРАКОН приносит
НОВОЕ ПЛАТЬЕ АЛГОРИТМОВ: ВЗГЛЯД В БУДУЩЕЕ (вместо заключения) 451 существенную пользу, заметно повышает производительность труда, ощутимо снижает издержки. В ДРАКОНе текстовые управляющие конструкции полностью устранены (тем самым мы сняли грубое «брезентовое» платье). На смену пришла значительно более легкая и удобная управляющая графика. Некоторые специалисты утверждают, что управляющая графика ДРАКОНа является мощным инструментом, причем ее мощь легка в освоении и легко применима на практике. СТАНЕТ ЛИ ДРАКОН ЧЕМПИОНОМ МИРА ПО КРИТЕРИЮ «ПОНЯТНОСТЬ» АЛГОРИТМОВ? Претензия ДРАКОНа на «мировое господство» жестко ограничена. Он вступает в конкурентную борьбу только с процедурными языками. И только в том случае, когда ПОНЯТНОСТЬ алгоритмов является главным требованием к языку. Для тех, кто желает писать непонятные или трудные для понимания алгоритмы, ДРАКОН не нужен. По нашему мнению, требование удобопонятности алгоритмов все чаще выходит на передний план. Поэтому шансы ДРАКОНа на победу в конкурентной борьбе с другими языками растут. СЕМЕЙСТВО ЯЗЫКОВ В ОДИНАКОВЫХ ПЛАТЬЯХ В современных языках программирования используется обширный багаж новых идей. Вместе с тем у многих языков есть общая черта — они имеют в своем составе процедурные части. Эти части сегодня реализованы по-разному. Унификация отсутствует. Этот недостаток, по-видимому, можно исправить. Для этого надо заменить процедурные части различных языков на язык ДРАКОН. Образно говоря, надо переодеть процедурные части различных языков в новое удобное платье — платье ДРАКОНа. По мнению ряда специалистов, это даст ощутимый выигрыш. ГДЕ СКАЧАТЬ ДРАКОН-РЕДАКТОР? Ответ дан на стр. 338. Не исключено, что к моменту выхода этой книги на сайте OberonCore появится новая информация о разработке общедоступных инструментальных программ языка ДРАКОН. Как связаться с автором? e-mail: vdp2007@ bk.ru Тел. 8 D95) 331-50-72 8 D95) 334-34-13
ЛИТЕРАТУРА Введение (с. 5 1. Ершов А.П. О человеческом и эстетическом факторах в программировании // Информатика и образование, 1993, №6. С. 7. 2. Примерная программа дисциплины «Информатика». Издание официальное. — М.: Госкомвуз, 1996. С. 3,4,15,16. 3. Паронджанов В. Д. Занимательная информатика. М.: Росмэн, 1998. 152с. 190 иллюстраций. 4. Паронджанов В. Д. Занимательная информатика: Волшебный Дракон в гостях у Мурзика. М.: Росмэн, 2000. 160с. 200 иллюстраций. 5. Паронджанов В. Д. Занимательная информатика. М.: Дрофа, 2007. 192с. 240 иллюстраций. Глава 1 (с. 17-35) 1. Барабашев А. Г. Будущее математики. Методологические аспекты прогнозирования. М: Изд. МГУ, 1991. С. 48. 2. Микулинский СР. Очерки развития историко-научной мысли. М.: Наука, 1988. С. 298. 3. Клейн Ф. Лекции о развитии математики в XIX столетии. T.I. M.: Наука, 1989. С. 4, 23-25,424. 4. Лорьер Ж.-Л. Системы искусственного интеллекта. М.: Мир, 1991. С. 6, 7. 5. Интеллектуальная культура специалиста. Новосибирск: Наука, 1988. 6. Междисциплинарный подход к исследованию научного творчества. М.: Наука, 1990. 7. Видинеев Н. В. Природа интеллектуальных способностей человека. М.: Мысль, 1989. 8. Пиаже Ж. Психология интеллекта // Ж. Пиаже. Избранные психологические труды. М.: Просвещение, 1969. 9. Венда В.Ф. Системы гибридного интеллекта: эволюция, психология, информатика. М.: Машиностроение, 1990. 10. Алыпшулер Г. С. Найти идею. Введение в теорию решения изобрета-
ЛИТЕРАТУРА 453 тельских задач. Новосибирск: Наука, 1991. 11. Бьюзен Т. и Б. Супермышление. Минск, Попурри, 2003. 12. Дейкстра Э. Дисциплина программирования. М.: Мир, 1972. С. 266, 267. 13. Шнейдерман Б. Психология программирования. Человеческие факторы в вычислительных и информационных системах. М.: Радио и связь, 1984. С. 11. 14. Психологические проблемы автоматизации научно-исследовательских работ. М.: Наука, 1987. С. 10. 15. Декарт Р. Избр. произв. М.: Госполитиздат, 1950. С. 80,89. Глава 2 (с. Зб - 41) 1. Линдсей Д., Норман Д. Переработка информации у человека. (Введение в психологию). М.: Мир, 1974. С. 9. 2. Солсо Р.Л. Когнитивная психология. М.: Тривола, 1996. С. 28. 3. Соловьев А.В. Когнитивная психология и искусственный интеллект. М.: ИНИОН, 1992. С. 7. 4. Симонов П. В. Предисловие // Д. Норман. Память и научение. М.: Мир, 1985. С. 5. 5. Паронджанов В.Д. Почему мудрец похож на обезьяну или Парадоксальная энциклопедия современной мудрости. М.: РИПОЛ классик, 2007.1154с. Илл. 233. 6. Паронджанов В.Д. Перспективы информационных технологий и повышение продуктивности интеллектуального труда // Научно- техническая информация. Сер. 1. 1993. № 5. Глава 3 (с. 42-48) 1. Стогний АЛ. Предисловие. В кн.: Вельбицкий И.В., Ходаковский В.Н., Шолмов Л.И. Технологический комплекс производства программ на машинах ЕС ЭВМ и БЭСМ-6. М.: Статистика, 1980. С. 3. 2. Саркисян АЛ. Повышение качества программ на основе автоматизированных методов. М.: Радио и связь, 1991. С, 17,19. 3. Robson D.J., Bennet K.H., Cornelius B.J., Munro M. Approaches to Program Comprehension //]. Systems Software. 1991. №14. P. 79. 4. Фокс Дж. Программное обеспечение и его разработка. М.: Мир, 1985. С. 241. 5. Моисеев Н.Н. Человек. Среда. Общество. Проблемы формализованного описания. М., 1982. С. 14,17. 6. Многоразовый орбитальный корабль «Буран» / Ю.П. Семенов, Г.Е. Лозино-Лозинский, В.Л. Лапыгин, В.А.Тимченко и др. М.: Машиностроение, 1995. 7. Лапыгин В. С космической орбиты до посадочной полосы безукоризненно вела «Буран» уникальная система автоматического уи-
454 литература равления // Соц. Индустрия, 7 декабря, 1988. 8. Craig Covault. Soviet Space Shuttle Poised for High-Risk Flight Test // Aviation Week and Space Technology. V. 29, №18,1988. P. 18-20. 9. Паронджанов В.Д. Неожиданные уроки космонавтики XX века. Новая роль человеческого фактора и когнитивная революция в информационных технологиях. — В кн.: Человек—Земля—Космос. Труды 1-й международной авиакосмической конференции. (Москва. 28 сент.—2 окт. 1992 г.). Т. 2. Крылатые космические системы. — М.: Российская инженерная академия, 1995. С. 337—345. 10. Норманн Д. Память и научение. М: Мир, 1985. Глава 4 (с. 51-82) 1. ГОСТ 19.701-90. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. М.: Изд-во стащщр- тов, 1991. 2. Лингер Р., Миллс X, Уитт Б. Теория и практика структурного программирования. М.: Мир, 1982. С. 124-126,139-146. 3. Иодан Э. Структурное проектирование и конструирование программ. М.: Мир, 1979. С. 185-196. Глава 5 (с. 83-128) 1. Ломов Б.Ф. Эргономические (инженерно-психологические) факторы художественного конструирования. В кн.: Учебно-методическпс материалы по художественному конструированию. М., 1965. 2. Венда В. Предисловие к русскому изданию. В кн.: Боумен У. Графическое представление информации. М.: Мир, 1971. С. 9. 3. ХьюзДж.у МичтомДж. Структурный подход к программированию. М.: Мир, 1980. С. 80. 4. ГОСТ 19.701-90. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. М.: Изд-во стандартов, 1991. 5. Криницкий НА. Алгоритмы вокруг нас. М.: Наука, 1984. С. 102. 6. Питере Л. Дж. Методы отображения и компоновки программных средств // ТИИЭР. 1980. Т. 68, № 9. С. 60. 7. Венда В.Ф. Средства отображения информации. (Эргономические исследования и художественное конструирование). М.: Энергия, 1969. С. 155-177. Глава 6 (с. 129-157) 1. Завалова Н.Д., Ломов Б.Ф., Пономаренко В.А. Образ в системе психической регуляции деятельности. М.: Наука, 1986. С. 21.
ЛИТЕРАТУРА 455 2. Человеческий фактор. В 6-и т. Т. 6. Эргономика в автоматизированных системах. М.: Мир, 1992. С. 216. Глава 7 (с. 158-177) 1. Венда В.Ф. Предисловие к русскому изданию. В кн: У. Боумен. Графическое представление информации. М.: Мир, 1985. С. 5. 2. Подан Э. Структурное проектирование и конструирование программ. М.: Мир, 1979. С. 252. Глава 8 (с. 178-196) 1. Вайсер М., Шнейдерман Б. Человеческий фактор в программировании для ЭВМ. — В кн.: Человеческий фактор. В 6-и т. Т. 6. Эргономика в автоматизированных системах. М.: Мир, 1992. С. 15. 2. Ван ТасселД. Стиль, разработка, эффективность, отладка и испытание программ. М.: Мир, 1981. С. 18. Глава 11 (с. 225-232) 1. Visualization. Using Computer Graphics to Explore Data and Present Information / J. R. Brown, R. Earnshow, M. Jern, J. Vince. John Wiley & Sons, Inc., 1995. 2. Руководство по профилактической медицине. М.: Новая слобода, 1993. С. 40. 3. Практическое руководство для врачей общей (семейной) практики. М.: Геотар-Мед, 2001. С. 501-504. Глава 12 (с. 233-242) 1. Хренов НА. Социально-психологические аспекты взаимодействия искусства и публики. М.: Наука, 1981. С. 231. 2. Математическая энциклопедия. М.: Сов. энциклопедия, 1977. Т. 1. С. 202-210. Глава 13 (с. 243-253) 1. Боумен У. Графическое представление информации. М.: Мир, 1971. С. 28. Глава 14 (с. 254-268) 1. Робертпсон Л А. Программирование — это просто. Пошаговый подход. М.: Бином Лаборатория знаний, 2008. С. 265.
456 ЛИТЕРАТУРА Глава 15 (с. 269-278) 1. Shultz В. Scientific Visualizaton: Transforming Numbers into Computer Pictures // Computer Pictures, 1988, №1. P. 11-16. 2. Кемп Я., Арнс К. Введение в биологию. М.: Мир, 1988. С. 612, 613. 3. Птагине М. Переключение генов. Регуляция генной активности и фаг Х.М.: Мир, 1989. С. 20. Глава 16 (с. 279-284) 1. Зенкин А. А. Когнитивная компьютерная графика. М.: Наука, 1991. С. 51. 2. Марценюк В.Б. Книга, которая учит, как вырастить помидоры. Уч. пос. Пермь: ПС Гармония, 2002. С. 7-21. Глава 17 (с. 285-295) 1. Martin /., McClure С. Diagramming Technique for Analysts and Programmers. N.J.: Prentice Hall, Inc., 1985. P. 2. Глава 18 (с. 296-302) 1. Марка Д., МакГоуэн К. Методология структурного анализа и проектирования. М.: МетаТехнология, БанкСервис, 1993. С. 22. 2. Паронджанов В.Д. Почему мудрец похож на обезьяну, или Парадоксальная энциклопедия современной мудрости. М.: РИПОЛ классик, 2007. 1154с. 3. Паронджанов В.Д. Технология структурирования алгоритмов выработки управленческих решений (САВУР-технология) и ее применение в системах организационного управления. В кн.: Информационно-аналитическое обеспечение стратегического управления: теория и практика. Труды второй всероссийской научно- практической конференции 19—20 мая 2005г. М.: ИПКгосслужбы, ИНИОН РАН, 2006. С. 315-319. 4. Паронджанов В.Д., Фанов В.А. Технология структурирования алгоритмов выработки управленческих решений (САВУР-технология) и ее применение в системах ситуационного управления. В кн.: Безопасность — основа устойчивого развития регионов и мегаполисов. Международный научно-технический конгресс по безопасности. Октябрь—ноябрь 2005г. М.: Научно-издательский центр «Инженер», 2005. С. 35-39 5. Паронджанов В.Д. Устойчивое развитие и проблема улучшения Интеллекта// Общественные науки и современность., 2003, №2. С. 125-135. 6. Павлова Н.Ф. Стратегическое планирование развития террито-
ЛИТЕРАТУРА 457 риальных социальных образований в схемах. Екатеринбург, УрО РАН, 2002. 119с. Глава 19 (с.зоз-зго) 1. Громов Г.Р. Очерки информационной технологии. М.: Инфоарт, 1993. С. 277. 2. Назаров И.Н. Производственный эксперимент и его роль в познании. М.: Соцэкгиз, 1962. С. 16. 3. Паронджанов В.Д. Почему мудрец похож на обезьяну или Парадоксальная энциклопедия современной мудрости. М.: РИПОЛ классик, 2007. С. 255, 256. 4. Попов Э.В. Корпоративные системы управления знаниями // Новости искусственного интеллекта. 2001, №1. С. 14—25. 5. Математическая энциклопедия. М.: Сов. энциклопедия, 1977. Т. 1. С. 202-210. 6. Ершов Ю.Л., Палютин Е.А. Математическая логика. М.: Наука, 1979. С. 254-266. 7. Бим-Бад A.M., Петровский А.В. Образование в контексте социализации // Педагогика, 1996, №1. С. 6. Глава 21 (с. 327-338) 1. Венда В. Предисловие к русскому изданию. В кн.: Боумен У. Графическое представление информации. М.: Мир, 1971. С. 6. Глава 22 (с. 339-348) 1. Слово о науке. М.: Знание, 1978. С. 171. Глава 23 (с. 351-379) 1. Глезер В.Д. Зрение и мышление. СПб.: Наука, 1993. С. 3. 2. Дейкстра Э. Заметки по структурному программированию. В кн.: Дал У., Дейкстра Э., Хоор К. Структурное программирование. М.: Мир, 1975. 3. Дейкстра Э. Дисциплина программирования. М.: Мир, 1978. 4. Dijkstra E.W. GoTo Statement Considered Harmful. Letter to the Editor. Communication of the ACM, March, 1968. 5. Майерс Г. Надежность программного обеспечения. М.: Мир, 1980. 6. Aschcroft E., Manna Z. The Translation of «Goto» Programs into «While» Programs. Proceedings of 1971IFIP Congress. 7. Йодан Э. Структурное проектирование и конструирование программ. М.: Мир, 1979 (дано в сокращении — В.П.). 8. Bohm C.Jacopini G. Flow Diagrams, Turing Machines and Languages
458 литература with Only Two Formation Rules // Comm. ACM. 1965. Vol. 9, N 5. P. 366-371. 9. Knuth D. Structured Programming with GOTO Statements // ACM Computing Surveys, 6 D), 1974. P. 261-301. 10. Ван ТасселД. Стиль, разработка, эффективность, отладка и испытание программ. М.: Мир, 1981. С. 89. 11. Знакомьтесь, Р-технология // НТР: проблемы и решения. 1987, № 13, 7-20 июля. С. 4,5. 12. Кун Т. Структура научных революций. М.: ACT, 2003. — 608с. 13. Толковый словарь по вычислительным системам. М.: Машиностроение, 1991. 14. Очков В.Ф., Пухначев Ю.В. 128 советов начинающему программисту. М.: Энергоатомиздат, 1992. 15. Котов В.Е., Сабельфельд В.К. Теория схем программ. М.: Наука, 1991. С. 71,76-78. 16. Касьянов В.Н. Оптимизирующие преобразования программ. М.: Наука, 1988. С. 35. 17. Евстигнеев В А. Применение теории графов в программировании. М.: Наука, 1985. С. 5. 18. Янов ЮМ. О локальных преобразованиях схем алгоритмов // Проблемы кибернетики. 1968. Вып. 20. С. 201. 19. Ершов АЛ. Современное состояние схем программ // Проблемы кибернетики. 1973. Вып. 27. С. 87-110. 20. Венда В.Ф. Инженерная психология и синтез систем отображения информации. М.: Машиностроение, 1982. С. 300-302. 21. Литер Р., Миллс Х.у Уитт Б. Теория и практика структурного программирования. М.: Мир, 1982. С. 100,102, 120,121,123,141, 142. 22. ХьюзДж., МичтомДж. Структурный подход к программированию. М.: Мир, 1980. С. 24, 73, 80. 23. Рейуорд-Смит В. Дж. Теория формальных языков. Вводный курс. М.: Радио и связь, 1988. С. 28,30,44. 24. Поликарпова Н.И., Шалыто АА. Автоматное программирование. СПб.: Питер, 2009. - 176с. Глава 24 (с. 380-390) 1. Арнхейм Р. Визуальное мышление. В кн.: Хрестоматия по общей психологии: психология мышления. М.: изд. МГУ, 1981. 2. Ершов Ю.Л., Палютин ЕА. Математическая логика. М.: Наука, 1979. С. 12,13. 3. Вельбицкий ИВ. Алгебра конструирования алгоритмов и программ // Управляющие системы и машины. 1987, №6. С. 100. 4. Клина С.К Введение в метаматематику. М.: ИЛ, 1957. С. 59-61. 5. Колеватов В А. Социальная память и познание. М.: Мысль, 1984. С. 133.
ЛИТЕРАТУРА 459 6. ЗенкинЛА. Когнитивная компьютерная графика. М.: Наука, 1991. 7. Кондаков Н.И. Логический словарь-справочник. М.: Наука, 1976. С. 101, 285. 8. Поспелов Г.С. Искусственный интеллект основа новой информационной технологии. М.: Наука, 1988. С. 41. 9. Котов В.Е., Сабельфельд В. К Теория схем программ. М.: Наука, 1991. С. 67-82. 10. Касьянов В.Н. Оптимизирующие преобразования программ. М.: Наука, 1988. С. 35, 228. И. Ершов АЛ. Введение в теоретическое программирование. М.: Наука, 1977. С. 226-281. 12. Андерсон Р. Доказательство правильности программ. М., 1988. С. 152. 13. ГрисД. Наука программирования. М.: Мир, 1984. С. 303. Глава 25 (с. 391-404) 1. ЗенкинАА. Когнитивная компьютерная графика. М.: Наука, 1991. С. 19. 2. Саркисян А А. Повышение качества программ на основе автоматизированных методов. М.: Радио и связь, 1991. С. 120—131. 3. ISO 5807—85. Unified System for Program Documentation. Data, program and system flowcharts, program network charts and system resources charts. Documentation symbols and conventions for flowcharting. 4. Гост 19.701—90. Единая система программной документации. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. 5. Robertson LA. Simple Programm Design. A Step-by-step Approach. Fourth edition. Thomson, Australia, Canada, Mexico..., 2004. Русский перевод: Робертсон Л А. Программирование — это просто. Пошаговый подход. Перевод с 4-го английского издания. М.: Бином Лаборатория знаний, 2008. 6. Практическое руководство для врачей общей (семейной) практики. Под редакцией академика РАМН И.Н. Денисова. М.: ГЭОТАР- МЕД, 2001.-720с. Глава 26 (с. 407-424) 1. Барабашев AS. Будущее математики. Методологические аспекты прогнозирования. М.: МГУ, 1991. С. 19, 20. 2. Клайн М. Математика. Поиск истины. М.: Мир, 1985. С. 269. 3. Диофант. Арифметика. М.: Наука, 1974. 4. Башмакова И.Г. Диофант и диофантовы уравнения. М.: Наука. 1972.
460 ЛИТЕРАТУРА 5. Никифоровский В.А. В мире уравнений. М.: Наука, 1987. С. 47—57, 83,104-124. 6. Маслов Ю.С. Введение в языкознание. М.: Высшая школа, 1997. С. 252-254. 7. Клике Ф. Пробуждающееся мышление. История развития человеческого интеллекта. Киев: Вища школа, 1985. С. 236, 237. Глава 27 (с. 425-446) 1. Никифоровский В А. В мире уравнений. М.: Наука, 1987. С. 47—57, 83,104-124. 2. Стройк К.Л. Краткий очерк истории математики. М.: Наука, 1990. С. 103-118,139-145, 213, 214. 3. Кукушкин В Д., Нееолин И.Ф., Бушу ее B.C. Организация умственного труда. М.: МИСИС, 1976. С 134-136,141. 4. Юшкевич А.П. История математики в средние века. М: ГИФ МЛ, 1961. С. 411-425. 5. Катасонов В.Н. Метафизическая математика XVII в. М.: Наука, 1993. С. 14,17. 6. Карно Л. Размышления о метафизике исчисления бесконечно малых. М.-Л.: 1933. С. 213. 7. Crove MJ. A History of Vector Analysis. The Evolution of the Idea of Vectorial Systems. N.Y., 1985. P. 217. 8. Клини C.K Введение в метаматематику. М.: ИИЛ, 1957. С. 60. 9. Кузнецова Н.И. Наука в ее истории. Методологические проблемы. М.: Наука, 1982. С. 103-105. 10. Нейгебауэр О. Точные науки в древности. М., 1968. С. 67. 11. Безруких ММ., Ефимова С. П. Ребенок идет в школу. М.: Академия, 2000. 12. Жмудь ЛЯ. Пифагор и его школа. М.: Наука, 1990. С. 68-69. 13. Аристотель. Соч. В 4 т. Т. 1. Метафизика. М.: Мысль, 1976. С. 75. 14. Кезин А.В. Научность: эталоны, идеалы, критерии. М.: МГУ, 1985. С. 43. 15. Антология мировой философии. Т. 1. М., 1969. С. 869. 16. Антология мировой философии. Т. 2. М., 1970. С. 86 17. Кант И. Соч. в 6-и т. Т. 6. М., 1966. С. 58. 18. Кондаков Н.И. Логический словарь-справочник. М.: Наука, 1976. С. 331. 19. Блонский П.П. Реформа науки. М., 1920. С. 17, 21.
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ м Абстрактная дракон-схема 160 Аксиома-примитив 385 Аксиома-силуэт 385 Атом 328 — непустой 340, 341 — простой 340, 341 -пустой 340, 341 — составной 340, 341 — функциональный 340, 341 Видеоисчисление 384 Визуализация логических формул 158—177 Визуализация цикличных алгоритмов 129-157 Визуальное структурное программирование 351—379 Визуальные помехи 77,121,188, 216 Визуальный синтаксис 80, 339—347 Выход из цикла досрочный 134—139 Выход из цикла основной 139,144 Блок — адресный 373 — лианный 373 — структурный 373 В Валентная точка 328, 340 критическая 340, 342 нейтральная 340,342 Ввод атома 329, 330,340 Ветка 52,55 Веточный цикл 60,150—156 Вертикальное объединение 94 Вертикальное разъединение 105 Видеоаксиома 384 Видеоформула 384 Видеовывод 384 Главная вертикаль 124 Главный вопрос условного оператора 188 Главный маршрут 66,82 ветки 76 силуэта 76 Горизонтальное объединение 101,112,119, 398 Графоэлементы 52 д Да-нетный вопрос 86,132 Досрочный выход из цикла 134—139 Дракон-схема 51 примитив 56, 73,82 силуэт 56—65, 73,81
462 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ Заготовка-примитив 327, 330 Заготовка-силуэт 327, 333 Заземление лианы 333, 345 Заменители goto 360 И Икона 52 — адрес 53, 63 — вариант 53,145,146 -ввод 53,198 — вопрос 53, 67 — вставка 53,115 — выбор 53,145,146 — вывод 53,198 — действие 53,130 — заголовок 53, 63 — имя ветки 53, 55 — комментарий 53, 239,284 — конец 53, 63 — конец цикла ДЛЯ 53,146,151 — начало цикла ДЛЯ 53,146,151 — параллельный процесс 53, 204 -пауза 53,198 — период 53, 203 — петля цикла 53,130,144 — петля силуэта 53 -полка 53, 190,192 — пуск таймера 53,199 — синхронизатор 53,199 — формальные параметры 53 Истинная видеоформула 386 Исчисление икон 380—390 к Конец лианы 330, 343 Критерий сверхвысокой понимаемости 84 Л Лиана 330,343 — ненагруженная 343 — нагруженная 343 Логическая функция И 162—165 --ИЛИ 165-169 --НЕ 170-17 м Макроикона 52 — ввод по таймеру 54 — вставка по таймеру 54 — вывод по таймеру 54 — действие по таймеру 54 — заголовок с параметрами 54 — обычный цикл 54,129—144 — обычный цикл по таймеру 54 — параллельный процесс по таймеру 54 — переключатель 54,145 — переключающий цикл 54, 146, 149 — переключающий цикл по таймеру 54 — переключатель по таймеру 54 — полка по таймеру 54 — пуск таймера по таймеру 54 — развилка 54,86—89 — развилка по таймеру 54 — цикл ДЛЯ 54,146,151,218 — цикл ДЛЯ по таймеру 54 — цикл ЖДАТЬ 54, 202,203 — цикл ЖДАТЬ по таймеру 54 Маршрут 65 — главный 66, 82 — побочный 68 Матрешка 342 — непустая 342, 344 — пустая 342, 344 — частично пустая 342, 344 Оператор — адрес 79,80 — ввод 198 — ветка 80 — вывод 80
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 463 — вызов процедуры 115 — имя ветки 55 — обычный цикл 130,144 — параллельный процесс 204 — пауза 198 — переключатель 145, 216 — перехода (goto) 55 — период 203 — присваивания 189 — пуск таймера 200 — пустой 340 — развилка 214 — реального времени 206 — синхронизатор 200 — снять признак 193 — составной 55 — установить признак 193 -цикл ДЛЯ 146 Оператор языка ДРАКОН 80 Ошибка «нет шампура» 66,124 Ошибка «сиамские близнецы» 343, 344 п Плечо развилки — левое 86 — правое 86 ф Формула маршрута 89 ц Цикл веточный 60,150—156 Цикл в цикле 139—143 Цикл гибридный 130 Цикл ДЛЯ 54,146,151,218 Цикл ДО 130-139 Цикл ЖДАТЬ 54, 202, 203 Цикл переключающий 54,146,149 Цикл ПОКА 130-139 ш Шампур 65, 66 Шампур ветки 76 Шампур-блок 52 Шампур-метод 379, 386, 398 Шапка 60, 257 Рокировка 91 Текстовый синтаксис 80 Тело ветки 55 Тело цикла 132,144 Точка слияния 86, 343 Условие окончания цикла 132,144 Условие продолжения цикла 132,144
Книги издательства «ДМК Пресс» можно приобрести в торгово-изда- тельском холдинге «АЛЬЯНС-КНИГА» (АЛЬЯНС БУКС) наложенным платежом или выслать письмо на почтовый адрес: 115533, Москва, Нагатинская наб., д.6, стр.1. При оформлении заказа в письме следует указать полностью Ф.И.О. и почтовый адрес заказчика (с индексом). Эти книги Вы также можете заказать на сайте: www.alians-kniga.ru. Оптовые продажи: тел. D95) 258-91-94, 258-91-95 (факс). Электронный адрес: books@alians-kniga.ru. Владимир Данилович Паронджанов e-mail: vdp2007@bk.ru ДРУЖЕЛЮБНЫЕ АЛГОРИТМЫ, ПОНЯТНЫЕ КАЖДОМУ КАК УЛУЧШИТЬ РАБОТУ УМА БЕЗ ЛИШНИХ ХЛОПОТ Главный редактор Мовчан Д. А. dm@dmk-press.ru Корректор Синяева Г. И. Верстка Паранская Н. В. Дизайн обложки Мовчан А. Г. Художник Ульянов С. А. Подписано в печать 16.03.2010. Формат 70*100 1/16 . Гарнитура «Петербург». Печать офсетная. Усл. печ. л. 37,7. Тираж 1000 экз. № Webcam издательства: www.dmk-press.ru Электронный адрес издательства: books@dmk-press.ru
Владимир Паронджанов Дружелюбные алгоритмы, понятные Как улучшить работу ума без лишних хлопот