Text
                    Владимир
ПАРОНДЖАНОВ
ДРУЖЕЛЮБНЫЕ
АЛГОРИТМЫ,
ПОНЯТНЫЕ
КАЖДОМУ
КАК УЛУЧШИТЬ РАБОТУ УМА
БЕЗ ЛИШНИХ ХЛОПОТ
Москва
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, давно изучающей эти вопросы, сегодня на стоимость большинства изделий и услуг, в первую