Выбрать главу

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

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

Алгоритмическое мышление – это особый род решения проблем, при котором вы не просто находите один ответ (например, что именно хотел сказать Боби, когда очнулся после инсульта). Вы находите решение в виде шагов, которые могут выполнить другие (в том числе компьютер), – и тоже получить ответ. Мы только что нашли подобное решение для Боби, благодаря которому понимаем не только то, что он пытается сказать в данный момент. Этот способ позволяет нам (и кому угодно) в любой момент выяснить, что он хочет сказать. Но судя по всему, процесс пойдет довольно медленно. Может быть, есть способ получше. Придумывать более удачные, эффективные решения – это тоже часть алгоритмического мышления.

Как это сделал Боби?

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

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

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

Проверяем детали

Нетрудно осознать, что придется иметь дело не только с буквами алфавита. Нам также понадобятся пробелы, цифры, точки и так далее. Их необходимо добавить к списку букв, который использует помощница. Вероятно, есть способ и получше, чем зачитывать длинный список. Например, сначала задать вопрос: «Это буква?» Если ответ положительный, то будем продолжать как раньше. Если нет, переходим к другим символам. Звучит знакомо? Это та же идея, благодаря которой в компьютерах используются разные наборы символов.

Еще одна проблема, требующая решения: что делать, если человек моргнет по ошибке? У нас должен быть способ сказать: «Проигнорируйте последний раз и начинайте читать буквы с начала». Но так, чтобы не пришлось передавать эту фразу по буквам! Подобным образом, если вы сделали ошибку, нужно найти способ вернуться назад. Нам нужен код, который означает «отменить». Возможность отменить действие – важная часть любого алгоритма с участием людей, так как люди делают ошибки. Например, условимся, что для этого надо быстро моргнуть два раза. Или придумайте что-нибудь получше. Вполне вероятно, что вы обнаружите другие проблемы, требующие решения?