Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Концепции и программы прикладного мышления


Философия алгоритмов
 

Ситуация

Давайте поговорим об алгоритмическом мышлении вообще. Почему оно слабо развито у подавляющего большинства людей, что создает казалось бы непреодолимые барьеры в освоении программирования?

Дело в том, что каждый из нас представляет собой сложнейший клубок программ, управляющих физиологией и деятельностью организма. Наукой еще не открыто понятие, выражающее сущность такого "клубка", - известные термины, такие как система, конфигуратор, теория, слишком просты, чтобы применяться в этом случае. Не случайно говорят, что человеческий мозг - самый сложный объект во Вселенной.
Чтобы программы успешно работали, они должны быть привязаны к ситуации. Так вот, наше мышление в основном ориентировано на изучение ситуации, т.е. на так называемые декларативные знания, а процедурные знания скрыты в подсознании. Возьмем самый банальный пример: Вы отправились в магазин, чтобы прикупить хлеба к ужину. План или алгоритм этого действия можно записать в одном предложении, а информация о ситуации, требующейся для реализации этого плана, уместится в короткометражном фильме, что в переводе в текстовый вид составит сотни томов. Вот и получается, что конструируемые алгоритмы нашей деятельности на поверхности мышления крайне просты, тогда как осознаваемые знания о ситуации на много порядков сложнее.
Большинство своих алгоритмов мы получаем по наследству, что-то приобретаем через подражание, а то, что с огромным трудом осваивается в обучении, опять же не удерживается в сознании и находит свое место в том же подсознании. И более того, если сознание вторгается в тонкую структуру алгоритмов подсознания, то может случиться небезызвестная "сержантская болезнь": в армии сержант мастерски закручивает свои портянки, но если попытается объяснить новобранцам алгоритм, то и сам разучивается...

Так может и не стоит описывать алгоритмы, чтобы не навредить себе? Во многих случаях так дело и обстоит. Почему экспертные системы так медленно распространяются? Да эксперты не такие дураки, чтобы годами накопленные знания и отточенные алгоритмы передавать компьютеру - это и авторитет девальвирует, и ответственность возлагает, ведь алгоритм наверняка неполон и может в ряде случаев давать обратные результаты.
Однако в междисциплинарных исследованиях и разработках (а их роль неуклонно растет) процедурные знания необходимо становятся коллективной собственностью и предметом совместного творчества. Да и в своей личной творческой мастерской на своем персональном компьютере неплохо с пользой для себя автоматизировать отдельные алгоритмы, а то и превратить их в коммерческий продукт. Опять же виртуальная среда, в которой мы пребываем, работая на компьютере и лазая по Интернету и районным сетям, все больше насыщается программами, что требует от пользователей гораздо большего понимания, нежели очередности нажатия кнопок.

Вывод очевиден: научиться писать простые, а потом все более сложные алгоритмы, понимать природу и логику программного обеспечения, с которым мы работаем, - полезно для всех.

Ключевое понятие - алгоритм

Википедия приводит несколько определений "алгоритма":

Алгоритм - это конечный набор правил, который определяет последовательность операций для решения конкретного множества задач и обладает пятью важными чертами: конечность, определённость, ввод, вывод, эффективность. (Д. Э. Кнут)
Алгоритм - это всякая система вычислений, выполняемых по строго определённым правилам, которая после какого-либо числа шагов заведомо приводит к решению поставленной задачи. (А. Колмогоров)
Алгоритм - это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату. (А. Марков)
Алгоритм - точное предписание о выполнении в определенном порядке некоторой системы операций, ведущих к решению всех задач данного типа. (Философский словарь / Под ред. М. М. Розенталя)
Алгоритм - строго детерминированная последовательность действий, описывающая процесс преобразования объекта из начального состояния в конечное, записанная с помощью понятных исполнителю команд. (Н.Д. Угринович, учебник «Информатика и информационные технологии»)
Алгоритм - это последовательность действий, направленных на получение определённого результата за конечное число шагов. (ROXANstudio)

То, что единого строгого определения "алгоритма" не существует, свидетельствует не о туманности смысла этого понятия, а о том, что оно входит в число общенаучных понятий, имеющих чрезвычайно широкое применение. Точно так же нельзя строго определить понятия "элемент", "система", "функция"... В силу их универсальности они активно используются в разных задачах и областях знаний, приобретая там специфические качества, что и создает разнобой в определениях.

Общий же смысл достаточно ясен: алгоритм - это понятные и точные предписания исполнителю совершить конечное число шагов, направленных на решение поставленной задачи (или на доказательство отсутствия решения).

Википедия при этом подчеркивает, что указания на последовательность действий устарели, поскольку теперь в ходу параллельные операции. И уместнее говорить о порядке или системе операций, а не о последовательности, которая теперь не более чем частный случай.

Нетрудно заметить, что понятия "алгоритм", "план" и "программа" совпадают по смыслу, а если понятие "система" приложить к процессу, то и здесь мы получим полное совпадение с алгоритмом. Алгоритм представляет собой систему операций для преобразования исходных данных в результат. Если различать степень общности операций, то можно увидеть, что алгоритм соответствует обобщенному решению, а план или программа - конкретному, привязанному к возможностям исполнительных механизмов.

В классической работе "Планы и структура поведения", написанной мэтрами американской психологии Миллером, Галантером и Прибрамом, предлагался типовой элемент операций с обратной связью - единица TOTE, из которой, как из кирпичиков складывались сложные планы мышления. И экспериментально было показано, что при решении незнакомых задач (например, запоминании наборов слов) основные усилия затрачиваются на мучительный поиск алгоритмов достижения результата. Если же эффективный алгоритм предлагался испытуемым заранее, то результаты получались легко и непринужденно. Отсюда значение эвристик - подсказок алгоритмов для решения творческих задач.

ДРАКОН как принцип алгоритмизации

Идеальный конструктор алгоритмов дает пользователю возможность самому синтезировать программу решения интересующего его класса задач и тем самым автоматизировать соответствующие функции мышления. При этом используются обобщенные формы представления задач и общие методы их решения.

Если спуститься с небес на землю и взглянуть на реальные прототипы этого класса усилителей интеллекта, то можно увидеть, что Олимп идеала пустует, а по склонам его карабкаются две многочисленные группы программ. В первой реализуются все более и более гибкие (настраиваемые) алгоритмы, но без функции синтеза. Во второй используются универсальные языковые модели синтеза алгоритмов все более оснащаемые эвристиками (паттернами проектирования), но осмысление конкретики задач и путей их решения по прежнему остается на откуп искусству программирования.

Одной из попыток преодоления разрыва между конкретикой задач и абстрактностью языков программирования является концепция  В.Д. Паронджанова и его язык визуального программирования ДРАКОН. (Для интересующихся привожу прямые ссылки на книгу Паронджанова и среду программирования, реализующую язык Дракон. Соответственно: http://www.twirpx.com/file/36420/  и http://www.twirpx.com/file/36785/ ) Любопытна авторская расшифровка аббревиатуры ДРАКОН = Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность.

Всякий простой алгоритм (а мы всегда начинаем с простых) есть всего лишь последовательность действий от исходных условий к результату. Действия эти могут ветвиться на варианты, могут замыкаться в циклы, образуя сложные схемы. Если упорядочить эти схемы, приспособив к особенностям зрительного восприятия, то читать и сочинять их  будет намного проще. Это и есть главная идея ДРАКОНа.
Соответственно, человек, свободно ориентирующийся в дракон-схемах, сможет оперировать большими алгоритмами наподобие того, как мы можем оперировать с географическими картами и многостраничными текстами.

Области приложений принципа

Язык ДРАКОН выполняет две принципиально разные функции. Для большинства работников он является новым средством повышения эффективности интеллектуального труда, поскольку существенно упрощает описание тхнологий.

Вторая функция состоит в том, что для программистов ДРАКОН действительно является языком программирования.

Таким образом, ДРАКОН имеет две головы, обращенные к совершенно разным аудиториям. В этом состоит одно из ключевых преимуществ, поскольку язык ДРАКОН можно использовать как удобный “мост взаимопонимания” между не программирующим большинством и программирующим меньшинством, между “бескомпьютерной” и компьютерной интеллектуальной деятельностью.
 

Апробация принципа

Слово В.Паронджанову:

"...В Пилюгинском центре (НПЦ автоматики и приборостроения, г. Москва) реализован на практике и успешно эксплуатируется в течение 12 лет метод «Программирование без прикладных программистов», основанный на использовании языка ДРАКОН. Созданная технология называется «Технология разработки алгоритмов и программ Графит-Флокс». Разработка языка ДРАКОН и технологии Графит-Флокс длилась 11 лет (с 1986 по 1996 год). Программы на языке ДРАКОН выполняются бортовым компьютером БИСЕР (разработан в нашем научно-производственном центре). Этот компьютер создан для установки на борту ракет. Он управляет полетом ракеты, управляет бортовыми системами ракеты и выполняет множество других функций.
Язык Дракон содержит декларативную часть и процедурную часть. Декларативная часть (язык Флокс) имеет специализированный характер (жестко привязана к ракетной технике). Поэтому ее нельзя рекомендовать для использования в других областях (исключения не в счет).
Процедурную часть «бортового» языка ДРАКОН можно разделить на две части:
∙ командную часть (пример команды a:=b+c)
∙ маршрутную часть, описывающую маршрут движения рабочей точки от начала до конца алгоритма (программы).
Командную часть «бортового» языка ДРАКОН я не рекомендую использовать для других приложений.
Что же остается? Остается только маршрутная часть. Она представляет собой Дракон-схему, из которой полностью удален текст (кроме слов «да» и «нет»). Вот эта маршрутная часть и представляет собой основную ценность. Назовем ее язык ДРАКОН.
В этом случае получается, что язык ДРАКОН — это сознательно недоопределенный язык. Фактически это язык схем-слепышей, из которых полностью удален текст (кроме да и нет).
Маршрутный язык ДРАКОН — это единственное, что я рекомендую. Именно маршрутный язык ДРАКОН вступает в конкурентную борьбу с аналогичными частями других языков.
Как превратить маршрутный язык ДРАКОН в настоящий язык программирования?
Надо добавить к нему недостающие части:
∙ декларативный язык и
∙ командный язык.
Откуда их взять? Проще всего, заимствовать из других языков. Если мы возьмем декларативный язык и командный язык из языка Оберон или си# и присоединим их по определенным правилам к маршрутному языку ДРАКОН, то получим гибридные языки Дракон-Оберон и Дракон-си#.
Я утверждаю: маршрутная часть языков программирования — это отдельная, самостоятельная и очень важная проблема.
Я утверждаю также, что в языке Дракон эта проблема решена лучше, чем во многих других языках.
...Первый шаг — это создание дракон-редактора. Его уже создал Геннадий Тышов. Редактор непрерывно совершенствуется. Имея дракон-редактор Тышова и больше ничего, можно конструировать любые алгоритмы. Важно отметить, что при этом ошибки графического синтаксиса полностью исключаются.
...Второй шаг - Ярослав Романченко опубликовал свои результаты по созданию гибридного языка Дракон—Active Oberon, который он назвал «язык программирования ДРОН»".

Программные приложения

Программоиспытателям и всем любителям скачать что-то интересненькое:


Алгоритм удачи - в веселых приключениях космонавта Порнова.
(скачать - http://www.twirpx.com/file/44711/ )


Пишите ваши пожелания

feod@narod.ru  

До новых встреч!
Юлий Феодоритов


В избранное