Продолжение следуетЦитата:
ПОЧЕМУ НАУЧНОЕ СООБЩЕСТВО НЕ ПРИНЯЛО
ВИДЕОСТРУКТУРНУЮ КОНЦЕПЦИЮ Э. ДЕЙКСТРЫ?
Далее события развивались довольно загадочным образом, поскольку вокруг
видеоструктурной концепции Дейкстры образовался многолетний заговор молчания.
________________________________________________________
В дальнейшем мы будем нередко использовать приставку “видео”, трактуя ее как
“относящийся к визуальному программированию” или “относящийся к визуальному представлению знаний”.
______________________________________________________
Неприятность в том, что изложенные выше рекомендации Дейкстры не были приняты
во внимание разработчиками национальных и международных стандартов на блок-
схемы (ГОСТ 19.701–90, стандарт ISO 5807–85 и т. д.).
В итоге метод стандартизации, единственный метод, который мог бы улучшить
массовую практику вычерчивания блок-схем, не был использован,
а идея Дейкстры оказалась наглухо изолированной от реальных блок-схем,
используемых в реальной практике программирования.
В чем причина этой более чем странной ситуации?
Здесь уместно сделать отступление.
Американский историк и философ Томас Кун в книге “Структура научных
революций” говорит о том, что в истории науки время от времени появляются
особые периоды, когда выдвигаются “несоизмеримые” с прежними взглядами
научные идеи.
Последние он, следуя Р. Бергману, называет парадигмами.
История науки — история смены парадигм.
Разные парадигмы — это разные образцы мышления ученых.
Поэтому сторонникам старой парадигмы зачастую бывает сложно или даже
невозможно понять сторонников новой парадигмы (новой системы идей),
которая приходит на смену устоявшимся стереотипам научного мышления.
По нашему мнению, текстовое и визуальное программирование — это две
парадигмы, причем нынешний этап развития программирования есть
болезненный процесс ломки прежних взглядов, в ходе которого прежняя
текстовая парадигма постепенно уступает место новой визуальной парадигме.
При этом — в соответствии с теорией Куна — многие, хотя и не все видные
представители прежней, отживающей парадигмы проявляют своеобразную
слепоту при восприятии новой парадигмы, которая в ходе неустанной борьбы
идей в конечном итоге утверждает свое господство.
Этот небольшой экскурс в область истории и методологии науки позволяет
лучше понять причины поразительного невнимания научного сообщества
к изложенным Дейкстрой принципам структуризации блок-схем.
Начнем по порядку.
Формальная блок-схема — это двумерный чертеж, следовательно, она является
инструментом визуального программирования.
Отсюда следует, что предложенные Дейкстрой принципы структуризации блок-схем
есть не что иное, как исторически первая попытка сформулировать основные
(пусть далеко не полные и, возможно, нуждающиеся в улучшении) принципы
видеоструктурного программирования.
Однако в 1972 г., в момент публикации работы Дейкстры [2], визуальное
программирование как термин, понятие и концепция фактически еще не
существовало.
Поэтому — вполне естественно — суть концепции Дейкстры была воспринята
сквозь призму господствовавших тогда догматов текстового программирования
со всеми вытекающими последствиями.
Так родилась приписываемая Дейкстре и по праву принадлежащая ему концепция
текстового структурного программирования.
При этом (что также вполне естественно) в означенное время никто не обратил
внимания на тот чрезвычайно важный для нашего исследования факт, что
исходная формулировка концепции Дейкстры имела явно выраженную
визуальную компоненту — она представляла собой метод структуризации
блок-схем, т. е. была описана в терминах видеоструктурного
программирования.
Подобное невнимание привело к тому, что авторы стандартов на блок-схемы
посчитали, что данная идея их не касается, ибо относится исключительно к тексту
программ, и дружно проигнорировали или, скажем мягче, упустили из виду
визуальную компоненту структурного метода Дейкстры.
Справедливости ради добавим, что и сам отец-основатель (Э. Дейкстра),
обычно весьма настойчивый в продвижении и популяризации своих идей,
отнесся к своему видеоструктурному детищу с удивительным безразличием
и ни разу не выступил с предложением о закреплении структурной идеи в
стандартах на блок-схемы.
ПАРАДОКС СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ
Мы подошли к наиболее интригующему пункту в истории структурного
программирования.
Чтобы выявить главное звено проблемы, зададим вопрос: являются ли блок-схемы
и структурное программирование взаимно исключающими, несовместимыми
решениями?
В литературе по этому вопросу наблюдается редкое единодушие: да, они
несовместимы.
Вот несколько отзывов.
Блок-схемы “не согласуются со структурным программированием, поскольку
в значительной степени ориентированы на использование goto” [4].
Они “затемняют особенности программ, созданных по правилам структурного
программирования” [9].
“C появлением языков, отвечающих принципам структурного программирования,...
блок-схемы стали отмирать” [10].
Парадокс в том, что приведенные высказывания основываются на недоразумении.
Чтобы логический дефект стал очевидным, сопоставим две цитаты по методу “очной
ставки” (табл. 5).
Сравнивая мнение современных авторов с позицией Дейкстры, нетрудно убедиться,
что описываемый критиками изъян действительно имеет место, но лишь в том случае,
если правила вычерчивания блок-схем игнорируют предложенный Дейкстрой
принцип ограничения топологии блок-схем.
И наоборот, соблюдение указанного принципа сразу же ликвидирует недостаток.
Таблица 5
_____________________________________________________
МНЕНИЕ КРИТИКОВ,
УБЕЖДЕННЫХ В НЕВОЗМОЖНОСТИ
СТРУКТУРИЗАЦИИ БЛОК-СХЕМ
«Основной недостаток блок-схем заключается в том, что они не приучают к аккуратности при разработке алгоритма: ромб можно поставить в любом месте блок-схемы, а от него повести выходы на какие угодно участки. Так можно быстро превратить программу в запутанный
лабиринт, разобраться в котором через некоторое время не сможет даже сам ее автор» [10]
ПРЕДЛОЖЕНИЕ Э. ДЕЙКСТРЫ
О СТРУКТУРИЗАЦИИ БЛОК-СХЕМ
«Структуризация блок-схемс неизбежностью приводит к ограничению топологии
блок-схем по сравнению с различнымиблок-схемами, которые могут быть получены,
если разрешить проведение стрелок из любого блока в любой другой блок.
Отказавшись от большого разнообразия блок-схем и ограничившись... тремя операторами управления, мы следуем тем самым некоей последовательностной дисциплине» [2]
_____________________________________________________
ПЛОХИЕ БЛОК-СХЕМЫ
ИЛИ ПЛОХИЕ СТАНДАРТЫ?
Проведенный анализ позволяет сделать несколько важных замечаний.
• Обвинения, выдвигаемые противниками блок-схем, неправомерны,
потому что ставят проблему с ног на голову.
Дело не в том, что блок-схемы по своей природе противоречат принципам
структуризации, а в том, что при разработке стандартов на блок-схемы указанные
принципы не были учтены.
На них просто не обратили внимания, поскольку в ту пору — именно в силу парадигмальной “слепоты” — считалось, что на практике структурное програм-
мирование следует применять к текстам программ, а отнюдь не к блок-схемам.
• Чтобы сделать блок-схемы пригодными для структуризации, необходимо
ограничить и регламентировать их топологию с учетом видеоструктурных принципов
Дейкстры.
• Видеоструктурная концепция Дейкстры — это фундаментальная идея,
высказанная более двадцати лет назад и оказавшаяся невостребованной,
поскольку она значительно опередила свое время.
• Сегодня созрели благоприятные условия для ее развития.
Этому способствуют два обстоятельства. Во-первых, бурное развитие компьютерной
графики и визуального программирования. Во-вторых, широкое применение CASE-
технологий, в которых используется общий для всех участников проекта набор
визуальных (графических) языков.
• Предложенные Дейкстрой принципы структуризации блок-схем правильно
указывают общее направление развития, однако они нуждаются в доработке,
развитии и детализации с учетом последних достижений современной науки,
а также опыта (в том числе отрицательного), накопленного при практическом
внедрении текстового структурного программирования.
В частности, современные блок-схемы должны удовлетворять не только критерию
структуризации, но и критериям формализации и эргономизации.
• Именно эту задачу решает шампур-метод, который, с одной стороны,
развивает видеоструктурную концепцию Дейкстры, а с другой — учитывает реалии
сегодняшнего дня. С помощью шампур-метода разработана новая топология блок-
схем (дракон-схемы), регламентация которой произведена на основе принципа
когнитивной формализации знаний.
• Современные стандарты на блок-схемы (международный стандарт
ISO 5807–85, отечественный ГОСТ 19.701–90 и другие национальные стандарты,
в том числе американский стандарт ANSI), а также инструкции по их применению
следует признать устаревшими, так как они игнорируют принципы структуризации,
формализации и эргономизации и объективно содействуют снижению качества
соответствующей интеллектуальной продукции…
ПОЧЕМУ САМОЛЕТ НЕ МАШЕТ КРЫЛЬЯМИ?
Говоря о будущем структурного программирования, необходимо осознать,
что текстовое и визуальное программирование опирается на разные системы понятий,
которые по-разному расчленяют действительность.
Поэтому видеоструктурное программирование нельзя рассмат¬ривать как результат механического перевода устоявшихся понятий классического структурного
программирования на новый язык.
Поясним сказанное. При визуальном структурном программировании программист
работает только с чертежом программы, не обращаясь к ее тексту, подобно тому, как программист, работающий, скажем, на Паскале, не обращается к ассемблеру и
машинному коду — они для него просто не существуют!
Это значит, что столь тщательно обоснованная Дейкстрой коллекция ключевых слов
структурного кодирования (if, then, else, case, of, while, do, repeat, until, begin, end [2])
при переходе к визуальному программированию становится ненужной —
для программиста она просто перестает существовать!
В равной степени становятся лишними и отмирают и другие ключевые слова,
используемые оппонентами Дейкстры в различных вариантах расширения
структурного кодирования: goto, continue, break, exit и т. д.
Следует специально подчеркнуть: поскольку в визуальном варианте структурного программирования ключевое слово goto не используется, теряют смысл и все споры
относительно законности или незаконности, опасности или безопасности его применения,
а также обширная литература, посвященная обсуждению этого, некогда казавшегося
столь актуальным вопроса.
Предвижу возражения: хотя названные ключевые слова действительно исчезают,
однако выражаемые ими понятия сохраняют силу и для визуального программирования.
Например, две видеопрограммы на рис. 27 можно построить с помощью понятий
if-then-else и goto.
Данное возражение нельзя принять, поскольку произошла подмена предмета обсуждения.
С помощью указанных понятий можно построить не видеопрограммы, а текстовые
программы, эквивалентные видеопрограммам на рис. 27.
Что касается собственно видеопрограмм, то они, будучи “выполнимой графикой”,
строятся из “выполняемых” икон и “выполняемых” соединительных линий.
Причем — подчеркнем еще раз — в процессе построения (которое реализуется
с помощью ДРАКОН-редак¬тора) пользователь не применяет понятия if-then-else
и goto, ибо в этом нет никакой необходимости.
Нельзя путать задачу и систему понятий, на которую опирается метод ее решения.
В обоих случаях — и при текстовом, и при визуальном структурном кодировании —
ставится одна и та же задача: улучшить понимаемость программ и обеспечить более эффективный интеллектуальный контроль за передачами управления.
Однако система понятий коренным образом меняется: ту функцию, которую в текстовой программе выполняют ключевые слова, в видеопрограмме реализуют совершенно другие понятия: иконы, макроиконы, соединительные линии, шампур, главная вертикаль
шампур-блока, лиана, атом, пересадка лианы, запрет пересечения линий и т. д.
Очевидно, что использование понятий, выражаемых ключевыми словами классического структурного программирования, не является самоцелью, а служит лишь для того,
чтобы “делать наши программы разумными, понятными и разумно управляемыми” [22].
Указанные понятия решают эту задачу не во всех случаях, а только в рамках текстового программирования.
При переходе к визуальному программированию задача решается по-другому, с помощью другого набора понятий.
Именно отказ от старого набора понятий и замена его на новый и позволяет добиться новой постановки задачи и более эффективного ее решения.
Поэтому высказываемое иногда критическое замечание: “недостаток шампур-метода
в том, что он не удовлетворяет требованиям структурного программирования” является
логически неправомерным.
Нельзя упрекать самолет за то, что он не машет крыльями.
ВЫВОДЫ
1. Визуальное структурное программирование (шампур-метод) и текстовое
структурное программирование несоизмеримы (в куновском смысле слова), они
опираются на разные системы понятий, которые по-разному расчленяют действительность.
2. Текстовое структурное программирование решило стоявшие перед ним
исторические задачи, исчерпало свои эвристические возмож¬ности и, выполнив свою
миссию, потеряло актуальность. В настоящее время точкой роста научного знания
является визуальное структурное программирование.
3. При использовании шампур-метода набор ключевых слов классического
структурного программирования становится ненужным. Благодаря этому создаются
предпосылки, которые в будущем, возможно, позволят исключить ключевые слова
и тем самым устранить путающий всех разнобой ключевых слов и структурных кон-
струкций в разных языках программирования.
4. В отличие от текстового структурного программирования шампур-метод является полностью формальным.
5. По эргономическим показателям визуальное структурное программирование существенно превосходит свой текстовый аналог.
6. Широко распространенное мнение о несовместимости блок-схем и структурного программирования является мифом, нелепой ошибкой, основанной на невнимательном прочтении классической работы Э. Дейкстры “Заметки по структурному программированию”.
7. Дальнейшее использование неструктурных, неформальных и неэргономичных блок-схем во всех случаях следует признать нецелесообразным.
8. Существующая литература по блок-схемам, включая международные и национальные стандарты, на 99% устарела.
9. Современные стандарты на блок-схемы объективно содействуют снижению качества соответствующей интеллектуальной продукции. Указанные стандарты игнорируют три важнейших принципа: структу¬ризации, формализации и эргономизации.
10. Актуальной задачей является разработка новой системы международных и национальных стандартов на блок-схемы, свободных от перечисленных недостатков. В основу проекта новых стандартов целесообразно положить изложенные в этой книге правила визуального структурного программирования. Дракон-схемы наследуют все или почти все достоинства блок-схем и устраняют их недостатки.