Чтение онлайн

ЖАНРЫ

Искусственный разум

Чачко Алексей Григорьевич

Шрифт:

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

Алгоритм "Спинка кофточки". Он буквально напичкан циклами: каждый ряд вязки описан циклически (выход из цикла - по числу петель); потом несколько рядов выполняются "рябушкой" (выход из цикла - число рядов достигло 4); потом предлагается чулочная вязка (выход из цикла - длина спинки равна 43 см)...

Алгоритм "Погрузка корабля". Здесь машина циклически проверяет допустимость товаров, которые протаскивают на корабль гости. Цикл, естественно, работает и тогда, когда компьютер сам загружает корабль: он извлекает слова из словаря точно так же, как машина отдела кадров добывала фамилии рабочих и служащих из перечня.

Алгоритм "Спящая красавица". Этот вообще состоит из одних циклов: два цикла в нем вложены друг в друга. Внутренний цикл делит Царство пополам: он прекращает работать, как только обнаруживает девушку в Баклушах. Тогда за дело берется внешний цикл н окончательно уточняет положение пещеры. Цикл помогает циклу - характерная для алгоритмов ситуация.

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

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

Кажется, Р. Декарт первым осознал огромную важность циклов для человеческого ума. Если использовать точные и простые правила, строгое соблюдение которых всегда препятствует принятию ложного за истинное, если применять эти правила постепенно и многократно при зоркой интуиции каждого отдельного положения, то удастся выполнить умственную работу, которая с первого взгляда кажется необъятной. Ее удастся сделать без излишней затраты умственных сил, в короткое время, и тогда самый заурядный ум становится способным указывать воле выбор действий в житейских случайностях.

Насколько же такой методический и циклический путь лучше пути тех, кто, блуждая в пустом пространстве множества причин, ждет, не подвернется ли им под руку что-нибудь подходящее!

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

Разработка программ для вычислительных машин формирует у людей особый стиль мышления. Прежде всего алгоритмическое мышление является четким, ясным, определенным. Конечно, в требовании четкости, ясности, определенности нет ничего нового. Цену столь превосходным качествам ума знали еще первобытные охотники. Призывами к четкости, ясности, определенности идей наполнены труды древних писателей и ученых. Чем же отличаются от них сегодняшние алгоритмисты?

Мерой четкости. Степенью ясности. Полнотой определенности.

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

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

Американские специалисты по научной организации труда выделили четыре типа работников.

Человек первого типа - толковый, творческий, инициативный. Его достаточно навести на мысль, указать цель работы, а дорогу к ней он найдет сам.

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

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

Четвертый тип людей, увы, не способен четко действовать без прямых приказов. Этим однозначно скажи, что, как и когда выполнять, изволь объяснить работу до последней стружки. Иначе беда: стал тесать Аверкий, да все исковеркал.

Часто, сравнивая возможности человека и вычислительной машины, полагают, будто все мы люди, все человеку все одинаковы, и забывают о том, насколько разнятся между собой эти самые человеки.

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

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

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

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

Алгоритмическое мышление не шапкозакидательство. Сложность в мире существует, ее нужно штурмовать, а не отрицать. Программист знает - свидетельством тому вся история человеческого разума, - что самое дерзкое и высокое творчество отстаивается в алгоритмах, превращается в крепкие приемы ремесла.

Программист - исследователь, но он не из породы исследователей, привыкших, по саркастическому замечанию Р. Декарта, заниматься разгадками спутанных вопросов со спутанным умом. "Такие исследователи, - писал Р. Декарт, - не менее глупы, чем тот мальчуган, который так старается угодить, что бросается бежать прежде, чем получит поручение, даже не зная, куда ему идти".

Программист - настойчивый, усердный и волевой работник. В его руках отличные инструменты: команды, присваивания, проверки, циклы. И он применяет свои инструменты со всем человеческим искусством. Он не желает оставаться в проблеме как в ловушке, а ищет дорогу к свету и правде.

Член-корреспондент АН СССР Андрей Петрович Ершов, один из зачинателей отечественного программирования, ярко и точно охарактеризовал особенности работы программиста: "Программист должен обладать способностью первоклассного математика к абстракции и логическому мышлению в сочетании с эдисоновским талантом сооружать все что угодно из нуля и единицы. Он должен сочетать аккуратность бухгалтера с проницательностью разведчика, фантазию автора детективных романов с трезвой практичностью экономиста".

Поделиться с друзьями: