Магия чтения мыслей
Образцы повсюду
Сколько раз вы смотрели на облака в летний день и видели пушистых животных или узнавали лицо кинозвезды в расползшейся на тарелке глазунье? Это наш мозг ищет образцы в окружающем мире. Приведенные примеры показывают, что обнаруженные образцы возникают случайно. Но порой важна способность увидеть их сознательно. От этого иногда зависит наша жизнь.
Находить и предсказывать образцы, пожалуй, главная задача нашего мозга. Он старается обнаружить их в поле зрения, чтобы мы видели предметы, или в звуках, чтобы мы слышали слова. Другие шаблоны связаны с планированием решений и наших действий. Эти решения основаны на знаниях образцов, полученных благодаря прошлому опыту. Кроме того, нам нравятся образцы. С ними мы чувствуем себя комфортно. Например, телевизионные новости подаются по шаблону: нам сообщают, что покажут дальше, потом показывают сюжет и, наконец, напоминают, что показали... Эти три стадии делают просмотр удобным.
Литература полна повторяющихся образцов, которые мы знаем и используем. Мономиф — идея писателя и исследователя мифологии Джозефа Кэмпбелла, высказанная в 1949 г. В соответствии с ней герой следует знакомой модели, которая повторяется в фильмах и книгах, старых и современных. Он отправляется навстречу приключением, сталкивается со сложным вызовом, преодолевает его и возвращается домой другим человеком. Этот образец, имеющий эффектную трехчастную структуру (начало, середина и развязка), постоянно повторяется в литературе — в «Одиссее» Гомера, во многих пьесах Шекспира и во «Властелине колец» Толкина. Кроме того, он лежит в основе таких фильмов, как «Звездные войны» и «Индиана Джонс». Представляется, что образец структурирует эти истории, и поэтому нам интересно и легко за ними следить — а в конце мы испытываем чувство удовлетворения.
Мы уже видели, что сопоставление с образцом лежит в основе вычислительного мышления. Оно необходимо и для выявления абстракций и обобщений, для составления порождающих правил и для выбора удачного представления информации. Специалисты по компьютерным наукам тоже хотели бы найти оптимальные способы выявлять и предсказывать образцы. Они используют вычислительное мышление, чтобы самые удачные способы для сопоставления с образцом как таковым и результаты этого принимали форму сложных алгоритмов, которые используются в компьютерах, позволяя им проводить сопоставление с образцом самостоятельно. Таким образом вычислительное мышление применяется к идеям, стоящим за вычислительным мышлением.
Например, алгоритмы для сопоставления с образцом применяют, чтобы рассматривать, например, химические основания в составе нашей ДНК и искать в них шаблоны, соответствующие особым типам заболеваний. Также с их помощью пытаются предсказать флуктуации на финансовых рынках, чтобы найти ключ к конкурентному превосходству. Порой они предсказывают, как виртуальные персонажи в компьютерных играх должны реагировать на образцы, выявленные в вашем игровом стиле, чтобы поддерживать в вас интерес. Порой они даже помогают машинам «увидеть» мир так, как его видим мы. Почему бы машинам тоже не видеть животных в облаках? Образцы есть повсюду — вопрос только в том, чтобы их найти.
Волшебные слова — коды и колдовство
Давайте посмотрим на простые алгоритмы сопоставления с образцом, чтобы понять, о чем идет речь. Фокусники давно поняли: если им известна простая закономерность, о которой вы не догадываетесь, это можно использовать для создания волшебных эффектов. Например, практика телепатии имеет долгую и славную историю. Находящемуся на сцене фокуснику завязывают глаза, а его помощник собирает какие-то предметы у зрителей. Затем благодаря «ментальной связи» человек с завязанными глазами описывает собранные предметы, не видя их. Для этого используются специальные вербальные коды, и, чтобы освоить этот фокус, артистам приходится много запоминать.
Например, если выбранный предмет — ручка, ассистент, допустим, говорит: «Итак, что у меня в руке?» Если это карманные часы, ассистент задает вопрос иначе: «Какой предмет у меня в руке? Хорошо подумай. Время есть». Конечно, все это довольно грубые примеры — фокусники действуют гораздо тоньше, и поэтому их правила труднее запомнить. Такие выступления были очень популярны в прошлом, и артисты разрабатывали все более и более изощренные словесные коды. Закономерность была спрятана у всех на виду в произносимых словах, и расшифровка кода позволяла осуществить невозможное на сцене.
Учитесь читать мысли
Вы можете поэкспериментировать со скрытыми закономерностями и попробовать себя в чтении мыслей. Для рассматриваемого варианта не нужна столь же хорошая память, как для традиционного. Вам потребуется сообщник — партнер, который в курсе дела, и зрители. Во время выступления (постарайтесь, чтобы ваши действия выглядели загадочными и таинственными) человек из вашей команды, фокусник, выходит из комнаты. Затем зрители втайне от него выбирают предмет, который маг должен назвать по возвращении.
Ассистент остается в комнате, где делают выбор, чтобы «гарантировать честную игру и проследить, чтобы никто не передумал». После возвращения мага ассистент начинает ходить по комнате — вроде бы безо всякой цели — и указывает на разные предметы, каждый раз задавая один и тот же вопрос: «Это выбранный предмет?» И каждый раз маг отвечает правильно.
Вместо того чтобы запоминать сложную последовательность словесных кодов, можно с тем же эффектом использовать простое сопоставление с образцом на основе прогнозирующего алгоритма. Заранее условьтесь с ассистентом о каком-то предмете — например, лампе. Что бы вы ни выбрали, назовем это x. Секретный сигнал состоит в том, что, когда ассистент указывает на этот объект, вы понимаете, что следующий (назовем его y) и будет избранным. Ваш общий секрет — алгоритм, приведенный на рис. 62. Конечно, нужно заранее договориться, что вы обозначите, как x.
Если вас попросят снова показать фокус и попытаться угадать серию предметов, закономерность станет слишком очевидной. С этим легко справиться, применив немного алгоритмического мышления и расширив алгоритм. Каждый раз, выполняя фокус, вы используете разные предметы, прежде чем указать на выбранный, — например, лампу, потом ковер, потом выключатель. Теперь x меняется каждый раз. Код для совместного использования может выглядеть примерно как на рис. 63.
Конечно же, перед началом вам надо убедиться, что у вас есть лампа, ковер и выключатель. Вы указываете на лампу, пытаясь угадать первый предмет (когда номер попытки — 1), ковер при угадывании второго предмета (когда номер попытки — 2) и выключатель для третьего раза (когда номер попытки — 3). Последнее утверждение по умолчанию — на случай, если вас попросят найти четвертый, пятый или даже шестой предмет. Некоторых людей невозможно удовлетворить! К этому вы не готовы, но правильное алгоритмическое мышление должно обеспечить варианты на любой случай. Поэтому у вас есть отговорка по умолчанию, если кто-то из зрителей будет настаивать на продолжении после трех заготовленных чудес ясновидения: «Мои экстрасенсорные возможности истощены. Прошу прощения, я не могу продолжать».
Если образец подводит, что тогда получится?
Этот алгоритм сопоставления с образцом в большинстве случаев позволит вам развлечь аудиторию, но иногда возникают проблемы. Логика наших рассуждений должна быть безупречной в каждой детали. Возможно, вы подумаете, что охватили все варианты, но если вторым предметом, выбранным аудиторией, окажется красивый ковер, который вы хотели использовать как второй сигнал? В алгоритме сопоставления с образцом появляется проблема. Незапланированная в нашем алгоритме неожиданность. Получается, надо показать на ковер — а потом снова показать на ковер! Это будет выглядеть не слишком-то волшебно.
Конечно, во время фокуса вы как человек будете импровизировать на ходу и выкручиваться с помощью юмора — например, действительно два раза покажете на ковер и пошутите на эту тему. Но если вы запрограммировали робота-фокусника, который точно следует алгоритму, то все будет выглядеть глупо. Робот сможет пошутить только в том случае, если вы предусмотрели возможные проблемы и добавили в алгоритм код для соответствующих шуток.
Итак, если робот-фокусник не справится с задачей, это не конец света. Но если бы речь шла об алгоритме сопоставления с образцом, который определяет, выполнены ли в правильном порядке все разнообразные действия, необходимые для выпуска посадочных шасси воздушного судна, и в нем возникла бы похожая проблема, случай был бы совсем другим. Продумать все вероятные ситуации и предусмотреть для них встроенное сопоставление с образцом сложнее, чем представляется, но программистам это необходимо, чтобы их программное обеспечение работало правильно.
В так называемых системах с особыми требованиями к безопасности эксплуатации есть целый ряд образцов, которые обязательно нужно найти и на которые нужно правильно отреагировать, — например, в ПО для больниц, для управления ядерными реакторами или самоуправляемых машин нового поколения. Если мы просто учтем массу возможных вариантов, то все равно нам не удастся охватить все. Поэтому в информатике используются логическое и аналитическое мышление и создаются математические способы анализа таких систем — например, они могут базироваться на идеях, которые мы применили к решению головоломок в главе 4. Математика обеспечивает нам более мощный инструмент для поиска образцов в системе. Потом пишутся программы, реализующие логическое мышление, основанное на математике. Компьютеры гораздо лучше нас изучают возможности и ничего при этом не упускают. Компьютеры в огромных объемах занимаются за нас вычислительным мышлением.