Программистские аналогии

В схеме обычной современной ЭВМ воплощена речь машинных команд, состоящий из простейших арифметических и логических операций. Примитивность этого языка - плата за универсальность: предполагается, что машина будет использована для различных целей, а из маленьких кирпичей как раз и можно строить дома самого требовательного формы, чего не скажешь о больших блока. Но каждый конкретный пользователь решает только свой узкий круг задач, и универсальность ему не нужна. Наоборот, он хотел бы работать большими блоками, что позволило бы ему уменьшить перебор. Другими словами, он хотел бы иметь язык, ориентированную именно на его проблемы. Как же ее получить?

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

Но есть и другой путь - "сверху". Анализируют всю множество решаемых задач и ищут набор как можно больших частей, из которых бы состоял любой нужный алгоритм. Проводя опять-таки параллель со строительством, можно сказать, что определяют комплект блоков, из которых удастся свести все дома нужного типа. Здесь человек использует свое преимущество перед машиной в разноплановости своих представлений о мире. Для компьютера это крупноблочная речь вовсе непонятна, и ему надо перевести каждый блок в набор кирпичей - машинных команд. Для этого составляется программа-транслятор (опять путем иерархического разбиения). В разных случаях будут свои наборы блоков; так возникают сотни алгоритмических языков - каждая из них по-своему членит мир.

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

Две логики

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

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

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

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

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

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

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

 
< Пред   СОДЕРЖАНИЕ   След >