Бородатый заявил: "Лично я вижу в этом перст судьбы - шли по лесу и встретили программиста. Мне кажется, вы обречены." — "Вам действительно так нужен программист?" — спросил я. "Нам позарез нужен программист".
(А.Стругацкий, Б.Стругацкий "Понедельник начинается в субботу")
В которой обсуждается, что такое программа и что означает программировать, намечается путь от алгоритма до программы и выясняется, что общение с исполнителем алгоритма на человеческом языке может привести к неожиданным и нежелательным последствиям.
Программист, программа, программируемый, запрограммированный... Все эти слова вам давно известны, но хорошо ли вы понимаете их смысл? Попробуйте объяснить самому себе, что такое программа.
Итак, программа — это...
Что-то не складывается в определении? Возникли сомнения и неясности? Это не удивительно, ведь вопрос совсем непростой, но нам необходимо в нем разобраться прежде всего. Приступая к изучению языка программирования Logo, на котором мы уже в скором времени начнем писать разнообразные программы, надо ясно представлять, чем же нам предстоит заниматься.
Для начала наметим маршрут:
Алгоритм и исполнитель |
В прошлом году мы с вами говорили об алгоритмах и исполнителях.
Алгоритм — это предписание, набор точных инструкций (команд), записанных в строгом порядке и направленных на решение поставленной задачи. Того, кто (или То, что) выполняет алгоритм, мы назвали исполнителем алгоритма. Команды, которые может выполнить конкретный исполнитель, образуют систему команд исполнителя (СКИ) .
Вспомним примеры алгоритмов и Исполнителей.
В дом привезли новый шкаф... То есть, шкафа как такового еще нет, на полу разложены створки, полки, шурупы и прочие детали будущего вместилища одежды и белья. Вы с отцом, следуя подробной инструкции, приступаете к сборке. Здесь инструкция выступает в роли алгоритма, а вы с отцом — его исполнителей.
На уроках математики вы выполняете разные вычисления — умножаете и делите столбиком, складываете простые дроби. В этих случаях вы являетесь исполнителями соответствующих алгоритмов.
Но исполнителем может быть не только человек. Разнообразные устройства, в том числе и компьютер, также могут выполнять заданные им алгоритмы. Например, "Луноход" — самоходный автоматический аппарат, доставленный на Луну в 1970 году, выполнял сложнейшие алгоритмы, перемещаясь по лунной поверхности и собирая необходимую людям информацию. Прмышленные роботы заменяют людей на производстве, в быту на помощь хозяйкам также приходят устройства, способные действовать по заданным алгоритмам.
Формальный и неформальный исполнитель |
— Вы не знаете, как пройти в библиотеку?
— Знаю.
И ушел...
В отличие от устройств, человек является неформальным исполнителем алгоритма. Что это означает?
Во-первых, человек не выполняет алгоритм бездумно и формально, соображения здравого смысла часто берут верх, какими бы строгими ни были инструкции. Если ему скажут, идите прямо до второго перекрестка и никуда не сворачивайте, то вряд ли он станет наступать на встречных прохожих и опрокидывать попадающиеся на пути предметы.
Во-вторых, человек, даже если он еще мал, обладает определенным жизненным опытом и чем больше этот опыт, тем менее подробным может быть алгоритм. Взрослому человеку достаточно сказать, свари кофе, не объясняя до мельчайших подробностей, как это следует делать.
В-третьих, неформальному исполнителю, как правило, известна конечная цель и он к ней стремится, порою уточняя и дополняя алгоритм. Представим себе, что в алгоритме "Доберись до библиотеки" есть такая конечная инструкция:
— На всех перекрестках поворачивай направо, пока не увидишь здание библиотеки.
Вряд ли, увидев вдали здание библиотеки, исполнитель-человек остановится, как вкопанный.
Формальный исполнитель не обладает ни жизненным опытом, ни здравым смыслом, он не стремится к конечному результату и все инструкции алгоритма выполняет буквально, так, как они записаны в алгоритме. Поэтому такого исполнителя мы будем называть бездумным исполнителем или БИ. И если случится так, что наш БИ будет вести себя неразумно, выполнять что-то, не отвечающее нашим намерениям, то винить все-таки придется нам самих себя и искать неточности и ошибки в алгоритме, ведь БИ повинуется не нашим намерениям, а нашим инструкциям.
Язык описания алгоритма и программа |
Исполнитель сможет выполнить алгоритм, если он ему известен, если алгоритм ему сообщили. Для людей важнейшим способом общения является язык. Попадая в чужую страну и не зная национального языка, человек оказывается совершенно беспомощным. На выручку может придти язык жестов, мимика, письмо с помощью рисунков (пиктографическое письмо), но все это только частично улучшает ситуацию.
Естественный язык (русский, английский, французский, ...) — основа основ полноценного общения людей.
Естественные языки образны и многозначны. Если заглянуть в толковый словарь русского языка, то можно узнать, например, что существует более 20 значений слова "идти". Вот только несколько примеров:
Человек идет по дороге; идет дождь; время идет; ей идет это платье; опята пойдут позже, в сентябре; давай, сходим завтра на рыбалку? — идет!
В естественном языке совершенно разные понятия могут обозначаться одним и тем же словом. Как правило, человек из контекста (общего смысла текста), порою даже не задумываясь, из всего множества значений слова выделяет именно то, которое имел в виду отправитель сообщения. Но представьте себя на месте формального исполнителя, не вникающего в смысл всего сообщения. Как в этом случае вы будете понимать словосочетания: кислая мина; ранний побег; ели везде; знакомая среда?
Те, кто пользовался когда-нибудь электронными переводчиками, знает, какие неожиданные и далекие от смысла оригинала можно получить переводы. Так, например, наш формальный переводчик перевел с английского языка текст, рассказывающий о... Попробуйте сами догадаться, о чем идет речь.
Деревянные сделки сегодня — это умирала-вырезка от сосновых фанеры, затем опустился в жидкие химикалии, которые производят легко зажженный, погашаемый совет.
Теряетесь в догадках? А речь идет о простой деревянной спичке, но как было объяснить переводчику, что из всех значений слова "match" надо было выбрать не "сделка", а "спичка", из значений слова "tip" — "кончик", а не "совет", что "die" означает не только "умереть", но и "штамповать", не говоря уже о сложностях грамматических конструкций?
Для формального исполнителя язык общения не может быть многозначным, для таких исполнителей разрабатывают и используют специальные искусственные языки, где отдельные слова и выражения не допускают различных толкований.
Алгоритм, описанный на языке исполнителя, называется программой. Программирование — это процесс перевода алгоритма на язык конкретного исполнителя. Так как разные исполнители владеют разными языками, а один и тот же алгоритм могут выполнять разные исполнители, то на основе одного алгоритма могут быть написаны разные программы. Мы с вами будем изучать язык программирования Logo, но вы, наверное, знаете, что существует много других языков программирования для управления компьютером - Pascal (Паскаль), C++, Basic (Бейсик), Java и другие. Чтобы научиться писать программы на том или другом языке, нужно изучить алфавит, словарь и грамматические правила, по которым строятся предложения в этом языке, при этом не допускаются никакие отклонения от правил написания слов и предложений, иначе исполнитель просто откажется выполнять ваши инструкции и не станет недоумевать и переживать за ошибки, как это делает приятель Мишки из стихотворения А.Шибаева:
Пришло письмишко мне, Гляжу — Из лагеря от Мишки... Здесь чудный лук и я лижу, - Написано в письмишке. Лук лижет? Что за чудеса? |
Читаю дальше: Здесь лиса, красивый длинный прут... На днях в лесу нашел я грусть и очень был доволен... Нет, нет, не шутит он! Боюсь, Мой друг серьезно болен. Вернется — надо подлечить: Заставить правила учить… |

