В теории и на практике такая проверка или оценка работы алгоритма является важной составляющей вычислительного мышления. Если мы придумали новый алгоритм, его работу надо очень тщательно проверить. Программисты на оценку программ (то есть алгоритмов для компьютеров) тратят больше времени, чем на их создание. Очень легко ошибиться в какой-то мелочи или забыть о возможной ситуации, с которой должен справиться алгоритм. Но смысл алгоритма в том, что он работает всегда, что бы ни случилось.
Алгоритмическое мышление подразумевает, что мы обдумываем детали и находим решения для возникающих проблем. Мы осознаем, что есть много способов сделать одно и то же, а потом предлагаем улучшенные варианты для конкретной ситуации. Также заметим, что одна из упомянутых выше задач связана с характерной для человека особенностью – свойством ошибаться. Теоретически наше решение работает, надо только моргнуть в нужный момент! И мы могли бы высокомерно заявить, что надо совершать определенные действия, а не получилось – сами виноваты. На практике не всегда моргаешь, когда нужно. И лучше все-таки решить задачу так, чтобы алгоритм работал для людей. В конце концов, мы пытаемся помочь человеку, а не машине! Вычислительное мышление связано еще и с пониманием того, что такое человек.
Улучшаем метод
Мы могли бы немного ускорить процесс общения для пациента с синдромом «запертого человека», осознав, что порой уже на половине слова можно догадаться, что имеется в виду. Например, если у вас получилось «а-н-т-и-л», с большой долей вероятности можно утверждать, что нужное слово – «антилопа». Значит, поменяем правила так, чтобы помощница высказывала подобные догадки. Кроме того, надо найти способ сказать «нет», если догадка не верна. Например, такое правило: моргнуть, если слово угадано, и не моргать – если нет. Именно по этому принципу работает функция предиктивного ввода текста в телефоне, то есть используется алгоритм для решения очень похожей задачи. То же самое делают поисковые движки, когда вы набираете свой запрос.
Помощники Боби действительно использовали вариант предсказания текста, что и описано в его книге. Он также отмечает, что его очень раздражало, если люди пытались угадать его мысли, не условившись с ним о способе подтверждения. Отсутствие навыков вычислительного мышления у собеседников Боби приводило к тому, что он очень расстраивался, пытаясь «сказать» им, что они ошиблись, а собеседники были уверены, что догадались правильно. Представим, например, что мы продолжаем разговор о животных и я передал буквы «б-а-р-с». Какова будет ваша догадка? Что слово уже закончилось и это слово – «барс»? Нет. Я хотел сказать «барсук».
Возможно, вам тоже пришла идея об угадывании целого слова, ведь вы пользовались предиктивным вводом текста в телефоне. Если так, это значит, что вы только что использовали еще один навык вычислительного мышления – сопоставление с образцом. Часто задачи, в сущности, повторяют то, что вы уже видели в другой ситуации. Если у вас уже есть решение для определенной проблемы, то есть смысл использовать его повторно. Сопоставление с образцом – навык, который позволяет понять, что новая ситуация по сути повторяет уже известную вам, и увидеть, что можно использовать старое решение.
Алгоритмы обеспечивают такого рода общее решение. Мы можем повторно использовать технологию предиктивного ввода текста, потому что у телефона и помощницы Боби одна и та же проблема. Телефон должен догадаться, какие слова набирает по буквам пользователь, а помощница – какое слово передает по буквам пациент с синдромом «запертого человека». Как только мы осознали это сходство, любое решение, найденное для первого случая, реально использовать для второго. Еще лучше, если мы увидим, что обладаем решением, которое подходит для множества разных задач, сделаем описание алгоритма с самого начала и будем использовать его при необходимости. Это называется обобщением алгоритма. Обобщение – очень мощный метод вычислительного мышления.
В самом широком смысле можно считать, что в случае Боби мы занимаемся передачей информации. В любой ситуации, когда есть необходимость передать информацию, используется общий алгоритм. Программисты создают коллекции алгоритмов для разного рода задач, чтобы при необходимости выбрать наиболее подходящий. Например, азбука Морзе тоже алгоритм передачи информации. Используя разную последовательность точек и тире (в нашем случае – долгое или быстрое моргание), обозначают разные буквы. Этот алгоритм изобрели, чтобы передавать сообщения по телеграфу, но, вероятно, получится использовать его и здесь. Мы еще вернемся к этой идее.