Книга, которая предлагается вашему вниманию, - повесть об Искинте. Рассказывая о сегодняшнем дне, нельзя упускать из виду дальнюю перспективу, которую очень четко определил академик В. Глушков: "Конечная цель... - создание искусственного интеллекта, не только не уступающего, но и намного превосходящего по своим возможностям естественный человеческий интеллект. Хотя эта цель пока еще достаточно далека, работа по ее достижению уже идет полным ходом. При этом ставятся вполне конкретные практические задачи повышения производительности и уровня интеллектуальности компьютеров для быстрого повышения производительности труда человека на многих участках интеллектуальной деятельности".
Ископаемые алгоритмы
Так робок первый интерес.
Б. Пастернак
Способности электронных вычислительных машин известны нам лишь в небольшой степени. Быть может, такое утверждение покажется читателю странным. Раз машина существует, значит, можно ее испытать, выяснить и время разгона, и максимальную скорость, и тормозной путь, и многое другое. Это справедливо для разных машин, но, увы, не для ЭВМ.
Поведение и результаты действия компьютера определяются введенной в него программой; они меняются неузнаваемо вместе со сменой программы. А разнообразие программ для ЭВМ поразительно. Существуют, однако, границы программной многоликости: ЭВМ решает только те проблемы, которые могут быть описаны посредством алгоритмов.
Итак, познать возможности ЭВМ - это познать возможности алгоритмов. Если с помощью алгоритмов удастся описать разумные решения, то Искинт - реальное дело, а если алгоритмы имеют внутренние пороки, то Искинт останется лишь благим пожеланием.
Передо мной небольшая глиняная табличка, найденная при раскопках Древнего Вавилона. На табличке текст: древний писец выдавил эти знаки 3700 лет назад. Касаясь острым стилом сырой глины, писец решал задачу о разделе наследства: вычислял доли каждого из шести сыновей, положенные им по законам божественной династии Хаммурапи. Писец занимался конкретным случаем: и сумма наследства точно обозначена - вот оно, число, представленное в привычной для тогдашних жителей Вавилона шестидесятеричной системе счисления, - и ход расчета указан, и промежуточные результаты выписаны столбиком, и конечный результат обведен рамочкой. Писец решил задачу для одной семьи; по заказу ли мудрого отца семейства, или по желанию нетерпеливых сыновей, но только для этой семьи.
Тогда почему в тексте он не называет отца и сыновей по имени, а говорит о "начальном сокровище", "доле 1-го", "доле 2-го" и "прочих долях"? Отчего рядом с ясными числами приводит туманные для практического взгляда пояснения: "3 и 5, сумма накопленных денег и процента стоимости земли"? Кому советует: "составь число", "вычти", "прибавь", "не забудь"? Кого предупреждает в конце таблички: "Таков ход дела"?
Похоже, шесть бравых сыновей и их пожилой отец здесь ни при чем. Писец преодолевал не их домашние трудности. Он замахнулся на большее: он объяснял, как решать задачи о разделе наследства вообще, любые задачи, весь класс таких задач.
Отец и сыновья понадобились писцу лишь для примера. В табличке есть явное доказательство этого. Семья, о которой сообщает писец, имеет только сыновей. Тем не менее древний математик требует: "Найди долю дочери", и вычисляет дочернюю часть наследства: "0". Писец велит далее: "Умножь долю дочери на число дочерей", и аккуратно выдавливает "0X0=0".
Табличка окончена... Писец посылает ее на обжиг, а потом горячую, прямо с пылу с жару, просматривает - нет ли ошибок. Он озабочен лишь ходом дела, порядком решения. И порядок указан четко, детально, без упущений. А числа? Числа не так важны! Он отдает табличку ученику, не заметив ошибки в счете. Ученик берет глиняный алгоритм, указатель хода решения задачи.
Ученики древневавилонской школы, "Дома табличек", уже давно прорабатывают алгоритмы решения разных задач. Они изучали и про плотину, и про урожай пшеницы, и про овец. Теперешнее задание - алгоритм наследства...
Спустя почти 4 тысячи лет, когда мне пришлось учиться математике в школе и вузе, слово "алгоритм", не было модным. Модным было слово "формула". Вывести формулу, выучить формулу наизусть, забыть формулу, перепутать формулу - вот наши любимые занятия.
Сомневаюсь, знал ли я, что такое алгоритм, в середине 50-х годов, оканчивая политехнический институт. Но прошло 2-3 года, и слово это стало изредка появляться в наших инженерских разговорах. Оно никогда не являлось одно - всегда в паре с электронной вычислительной машиной. Алгоритм помещают в ЭВМ, называя его почему-то уже не алгоритмом, а программой, и там, в недрах машины, среди электронных ламп, происходит чудо мгновенного решения задач.
Я помню весенний Киев 1957 года и встречу со своим соучеником Валерием Куликом на бульваре Шевченко. Рассказывая о новой своей работе, он пылко призывал меня:
- Алгоритмировать надо, Алексей!
- Что алгоритмировать?
- Все, буквально все! - сопровождал он широким жестом свое утверждение.
Выходило, что надо алгоритмировать и манизеровский памятник поэту, и университет, и дом, в котором я жил; нужно алгоритмировать и строительство, и производство сахара, и движение облаков в весеннем небе.
- А как это делать? - рискнул спросить я у товарища.
В ответ понеслись непонятные слова: команда, цикл, счетчик, ветвление... Даже знакомое слово - результат - выглядело в этом перечне устрашающе. Не по-няч, как алгоритмировать, я решил зайти с другого фланга.
- А зачем все это делать?
Тут мой собеседник взорвался.
- Зачем - спрашиваешь? Чтобы одолеть незнание! ЭВМ считает со скоростью три тысячи сложений в секунду. Три тысячи, понимаешь? Ты и одного сложения не сделаешь, а она уже три тысячи. Все, все, все теперь можно сосчитать: и рост деревьев, и развитие животных, и наилучшие планы для заводов. Кончается работа на глазок, кончается на авось. Все будем теперь считать на машине, понимаешь?
- Вроде понимаю. Только как машина станет считать? Формула ей нужна? Или она сама, без формулы?
- Формулы забудь! Вместо них теперь алгоритмы. Алгоритмировать надо! - категорически заявил друг.
Первую часть его предложения выполнить было легко - большинство школьно-институтских формул я к тому времени прочно не помнил. А вот вторая часть, все эти команды, циклы, ветвления...
Я вернулся домой. Было бы неправдой сказать, что вернулся с твердым желанием научиться алгоритмировать. Скорее я вернулся с полезной тревогой в душе: где-то там рождается новый мир ЭВМ и алгоритмов, а я даже не понимаю, о чем идет речь.
Сегодня, двадцать лет спустя, перед моим мысленным взором проходит череда алгоритмов, с которыми удалось познакомиться за эти годы. Какой из них выписать здесь, для первого случая? Один строен и изящен, другой стремителен, хотя и мешковат, третий упорен и солиден, четвертый такой модный: кольца, идеалы и чуточка шейпов. Ладно, выбираю вот этот.
"Спинка. Набрать 86 петель, провязать 4 ряда "рябушкой" и затем перейти на чулочную вязку. На 43-м см от линии низа закрыть на пройму с обеих сторон по 6 петель, затем с каждой стороны провязать по 2 последние и 2 первые петли вместе и 1 раз - 2 последние вместе. На спицах должно остаться 62 петли - продолжать вязать их до плечевого скоса (17 см). Плечевой скос выполнять..."
Нужны ли обоснования моего выбора? Для вас, уважаемые читательницы-женщины, полагаю, нет. А для вас, читатели-мужчины?
Для мужчин, и только для них,, мои доводы: сегодня большинство программистов в нашей стране - женщины. На собственном опыте автор убедился, что девушки, которые хорошо вяжут, хорошо программируют. Это повелось изначала: первым в мире программистом была Ада Лавлейс; она была отличным программистом и, говорят, искусной вязальщицей.
А. Лавлейс, дочь великого английского поэта Джорджа Байрона, сотрудничала с кембриджским профессором Чарльзом Бэббеджем, который придумал в 40-х годах прошлого века вычислительную машину. Компьютер Ч. Бэббеджа по идее мало отличался от современных цифровых вычислительных машин, только состоял он из шестеренок и рычагов (до возникновения электроники оставалось еще 80 лет).
Натурально, механический компьютер оказался громоздким; полностью Ч. Бэббеджу так и не удалось его собрать. Скептические современники прозвали всю эту затею "чудачеством Бэббеджа". А. Лавлейс не относилась к скептикам, она была другом профессора Ч. Бэббеджа, болела душой за новое дело, помогала как могла.
А могла эта нервная, изящная, болезненная женщина многое. Она смогла понять величие и грандиозность идеи универсального компьютера. Она написала для "чудачества Бэббеджа" несколько великолепных программ. Она провидела принципы программирования - единые для любых вычислительных задач. Она открыла, что счетная машина не только счетная и даже не в первую голову счетная; компьютер способен решать нечисловые задачи.