Думай как информатик: как вычислительное мышление меняет нашу жизнь | Большие Идеи

・ Технологии
Статья, опубликованная в журнале «Гарвард Бизнес Ревью Россия»

Думай как информатик: как вычислительное мышление меняет
нашу жизнь

<p> Фрагменты из книги Пола Керзона и Питера Макоуэна «Вычислительное мышление. Новый способ решать сложные задачи» </p>

Авторы: Питер Макоуэн , Пол Керзон

Думай как информатик: как вычислительное мышление меняет нашу жизнь
wikipedia.org

читайте также

Как высказать свое мнение, чтобы к нему прислушались

Дэвид Рок,  Хайди Грант,  Халил Смит

25 февраля прошла двенадцатая встреча клуба HR-директоров

Как научиться принимать смелые и неожиданные решения

Эван Полман

Улица корчится безъязыкая

Евгения Чернозатонская

От редакции. Мы публикуем несколько интересных фрагментов из книги преподавателей информатики Лондонского университета королевы Марии Пола Керзона и Питера Макоуэна «Вычислительное мышление. Метод решения сложных задач», русский перевод которой вышел в издательстве «Альпина Паблишер». В своей работе Керзон и Макоуэн объясняют, что такое вычислительное мышление, и на примере жизненных ситуаций, а также головоломок, фокусов и загадок, показывают, как его применение позволяет находить наиболее быстрые и эффективные решения любых проблем.

Навыки для XXI века

Все, кто изучает информатику, получают бонус — осваивают новый фундаментальный тип мышления и способ решения задач. Этот тип мышления абсолютно необходим в новом мире, где высокие технологии повсеместны. Он называется «вычислительное мышление» и является большим преимуществом для тех, кто осваивает информатику, независимо от их будущей профессии. Эта идея получила огромный резонанс, и во многих странах вычислительное мышление добавили к чтению, письму и арифметике в качестве ключевого навыка, который нужно осваивать уже в начальной школе. Благодаря ему компьютеры теперь преобладают во многих сферах нашей жизни и меняют все, чем мы занимаемся, — от слушания музыки до торговли на бирже, от шопинга до науки. Вычислительное мышление дает нам возможность не только высказывать блестящие идеи, но и воплощать их в реальность.

В первый раз словосочетание «вычислительное мышление» использовал педагог и математик Сеймур Паперт. Он предложил обучать математиков совершенно новым способом — с использованием компьютеров. Однако благодаря информатике изменилась не только математика, но и вся наука. Ученый-информатик Дженнет Уинг заявила, что это самый важный компонент в изучении информатики, который надо использовать гораздо шире. Именно она популяризовала термин «вычислительное мышление». Компания Microsoft была настолько впечатлена ее аргументами и важностью поднятой темы, что предоставила Университету Карнеги–Меллон, где работала Уинг, грант в несколько миллионов долларов на создание центра по изучению этого аспекта информатики и его влияния на другие науки.

Так что же такое вычислительное мышление? Это не «то, как думают компьютеры», хотя их все чаще программируют на его использование. Это набор разнообразных человеческих навыков для решения задач. Чтобы их приобрести, необходимо изучать природу вычислительных процессов. Кроме того, необходимы такие определенно важные навыки, как умение творить, ясно объяснять и работать в команде, — но их развивают практически все учебные предметы. Вычислительное мышление заимствует элементы из других типов мышления, например математического и научного. Однако в его основе лежат очень конкретные навыки решения проблем, такие как способность мыслить логически и алгоритмически, не упуская ни одной детали, а также умение находить эффективные способы что-нибудь сделать. Также важную роль играет способность понимать других людей. Информатика уникальна в том плане, что она объединяет все эти разнообразные навыки. Вместе они формируют мощный тип мышления, который меняет мир. Именно благодаря ему мы стали по-новому заниматься наукой, делать покупки, вести бизнес, слушать музыку, играть в игры — в общем, жить по-новому.

Синдром «запертого человека»

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

«Скафандр и бабочка» — невероятно жизнеутверждающая книга. Это автобиография Жан-Доминика Боби, которую он написал после того, как очнулся в больнице полностью парализованным. Он рассказывает о жизни с синдромом «запертого человека». То есть у него был способ общения, который позволил не только разговаривать с медиками, друзьями и семьей, но и написать книгу. Боби сделал это, вообще не прибегая к технике. Но как?

Представьте себя в его положении — очнулись на больничной койке. Как вы могли бы общаться? Как могли бы написать книгу? Только человек с ручкой и бумагой смотрит на вас, готовый записывать слова. Вы из тех, кому повезло, — вы можете моргать одним глазом, но это все. Это единственное движение, которое вам доступно. Значит, разговаривать вы не в состоянии. Однако вы видите и слышите.

Теперь представьте, что вы врач такого пациента и вам необходимо придумать способ общения с ним.

Просто как A, B, C

Вам нужно условиться о способе превратить моргание (все, что доступно пациенту) в буквы. Возможно, сначала вам придет в голову такой вариант: когда он моргнет раз, это будет означать «А», два раза — «В» и так далее. Тогда помощнице останется посчитать, сколько раз моргнул пациент, и записать соответствующие буквы.

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

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

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

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

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

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

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

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

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

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

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

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

Алгоритмическое мышление подразумевает, что мы обдумываем детали и находим решения для возникающих проблем. Мы осознаем, что есть много способов сделать одно и то же, а потом предлагаем улучшенные варианты для конкретной ситуации. Также заметим, что одна из упомянутых выше задач связана с характерной для человека особенностью — свойством ошибаться. Теоретически наше решение работает, надо только моргнуть в нужный момент! И мы могли бы высокомерно заявить, что надо совершать определенные действия, а не получилось — сами виноваты. На практике не всегда моргаешь, когда нужно. И лучше все-таки решить задачу так, чтобы алгоритм работал для людей. В конце концов, мы пытаемся помочь человеку, а не машине! Вычислительное мышление связано еще и с пониманием того, что такое человек.

Что дальше?

Мы могли бы немного ускорить процесс общения для пациента с синдромом «запертого человека», осознав, что порой уже на половине слова можно догадаться, что имеется в виду. Например, если у вас получилось «а-н-т-и-л», с большой долей вероятности можно утверждать, что нужное слово — «антилопа». Значит, поменяем правила так, чтобы помощница высказывала подобные догадки. Кроме того, надо найти способ сказать «нет», если догадка не верна. Например, такое правило: моргнуть, если слово угадано, и не моргать — если нет. Именно поэтому принципу работает функция предиктивного ввода текста в телефоне, то есть используется алгоритм для решения очень похожей задачи. То же самое делают поисковые движки, когда вы набираете свой запрос.

Помощники Боби действительно использовали вариант предсказания текста, что и описано в его книге. Он также отмечает, что его очень раздражало, если люди пытались угадать его мысли, не условившись с ним о способе подтверждения. Отсутствие навыков вычислительного мышления у собеседников Боби приводило к тому, что он очень расстраивался, пытаясь «сказать» им, что они ошиблись, а собеседники были уверены, что догадались правильно. Представим, например, что мы продолжаем разговор о животных и я передал буквы «б-а-р-с». Какова будет ваша догадка? Что слово уже закончилось и это слово — «барс»? Нет. Я хотел сказать «барсук».

Возможно, вам тоже пришла идея об угадывании целого слова, ведь вы пользовались предиктивным вводом текста в телефоне. Если так, это значит, что вы только что использовали еще один навык вычислительного мышления — сопоставление с образцом. Часто задачи, в сущности, повторяют то, что вы уже видели в другой ситуации. Если у вас уже есть решение для определенной проблемы, то есть смысл использовать его повторно. Сопоставление с образцом — навык, который позволяет понять, что новая ситуация по сути повторяет уже известную вам, и увидеть, что можно использовать старое решение.

Алгоритмы обеспечивают такого рода общее решение. Мы можем повторно использовать технологию предиктивного ввода текста, потому что у телефона и помощницы Боби одна и та же проблема. Телефон должен догадаться, какие слова набирает по буквам пользователь, а помощница — какое слово передает по буквам пациент с синдромом «запертого человека». Как только мы осознали это сходство, любое решение, найденное для первого случая, реально использовать для второго. Еще лучше, если мы увидим, что обладаем решением, которое подходит для множества разных задач, сделаем описание алгоритма с самого начала и будем использовать его при необходимости. Это называется обобщением алгоритма.

Обобщение — очень мощный метод вычислительного мышления.

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

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

В порядке популярности

Боби предложил другой способ улучшить алгоритм АВС. До того, как оказаться на больничной койке, он был главным редактором французского женского журнала Elle и имел хорошее представление о языке. Например, ему было известно, что E — самая распространенная буква (в английском и французском). Поэтому Боби попросил, чтобы буквы зачитывали в порядке их популярности — то есть частотности. В английский этот порядок таков: E, Т, А, О… Во французском, на котором говорил Боби, это Е, S, А, R… Боби, соответственно, использовал французский порядок. Таким образом, помощница быстрее доходила до распространенных букв.

Похожий трюк использовался веками, чтобы расшифровать секретные коды. Он называется частотный анализ. Алгоритм для использования частотности букв был изобретен арабскими учеными около 1000 лет назад. Марию Стюарт обезглавили, потому что сэр Фрэнсис Уолсингем, начальник разведки королевы Елизаветы I, лучше нее владел вычислительным мышлением. Но это уже другая история. Идея Боби использовать частотный анализ — это пример и сопоставления с образцом, и обобщения. Задачи трансформируются, и решения для них используются повторно. Осознав, что расшифровывание кодов и угадывание букв — процессы схожие, мы видим, что частотный анализ, изобретенный для одного, пригоден для другого.

Насколько это быстро?

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

Можно прибегнуть к аналитическому мышлению. В этом случае необходимо сделать простые вычисления. Например, давайте учитывать не время, а сделанную работу. Если подсчитать, сколько букв алфавита произносит помощница, то мы всегда определим потраченное время. Просто надо знать, сколько времени уходит на произнесение одной буквы, и умножить это время на количество букв. Мы только что произвели действие, которое называется абстрагированием. Это еще один элемент вычислительного мышления, который применяется, чтобы упростить задачи и облегчить написание программ. Абстрагирование — просто длинное слово, которое подразумевает, что некоторые подробности скрывают или игнорируют. Мы проигнорировали такую деталь, как точное время, потраченное на всю книгу, и вместо этого подсчитали произнесенные буквы. «Число произнесенных букв» — это абстракция реально потраченного времени. Такой принцип очень часто используется в вычислительных процессах, чтобы упростить их работу.

Как же нам выяснить, сколько букв надо произнести? Для этого нужно задать несколько вопросов. Самый простой звучит так: сколько это будет в лучшем случае? Каково минимальное количество букв, которое должна произнести помощница, чтобы получилась книга? Рассмотрим и худший случай. Если не повезет, то насколько? Наконец, рассмотрим средний вариант и таким образом получим реалистичную оценку необходимой работы. Давайте чисто теоретически представим, что нам нужны только буквы алфавита, без цифр и знаков пунктуации. И проанализируем наш простой алгоритм, в соответствии с которым помощница говорит: «A, B, C…»

В лучшем случае вся книга будет состоять только из «А»: «АААА…» (возможно, выражая боль автора). Чтобы общаться при помощи одной буквы «А», достаточно сказать «А» один раз (ответить на один вопрос), и ответ будет получен. Здесь мы снова используем абстракцию — сначала анализируем, что будет, если посчитать только одну букву, и игнорируем всю книгу — по крайней мере для начала. Умножьте наш ответ для одной буквы на количество букв в книге и получите упомянутый лучший случай.

В худшем случае (для латинского алфавита), при котором кто-нибудь, например, все время жужжит («ZZZZ…»), потребуется 26 вопросов для каждой буквы. Итак, мы определили границы, в которых будет происходить передача любой информации. У нас никогда не получится лучше, чем при варианте с одной буквой, и хуже, чем со всеми 26.

Оценка будет точнее, если учесть среднее количество вопросов на каждую букву, то есть средний случай. Сделать это не так трудно. В длинном сообщении на каждую «А» где-нибудь еще придется «Z», на каждую «B» найдется «Y» и так далее. Это значит, что в среднем во всей книге на каждую продиктованную букву надо будет задать 13 вопросов. Умножьте число букв в книге на 13, и вы получите примерную оценку работы при ее написании. Умножьте это на среднее время, которое уходит у помощницы, чтобы произнести букву, и вы получите время, необходимое, чтобы написать книгу.

Отметим, что мы снова оцениваем наш алгоритм — но на сей раз нас интересует не то, действует ли он вообще, а то, насколько быстро он действует. У алгоритма оценивают много разных аспектов, но надежность и эффективность — два важнейших для оценки.

Изменение, внесенное Боби, — сначала спрашивать о распространенных буквах — улучшает ситуацию. Вероятно, получится уложиться в 10‒11 произносимых букв. А с учетом частотности, мы рассчитаем это точнее. Частотность можно уточнить или определить самостоятельно. Возьмите отрывок из любимой книги и посчитайте, сколько раз появляется каждая буква. Потом расположите буквы по порядку, начиная с самой распространенной, и посчитайте вероятность их появления. Средний случай — это число букв, которое необходимо произнести для угадывания одной буквы, вероятность появления которой равна 50%.

Думаем как компьютер?

У человеческого мозга и компьютера есть много общего. Наша способность думать, интеллект и самоощущения возможны благодаря тому, что мозг производит массу вычислений. С помощью сложной сети нейронов он обрабатывает информацию, поступающую от органов чувств, принимает решение, что с ней делать, и в результате мы действуем в окружающем мире.

Ученые до сих пор не имеют полного представления о том, как работает мозг, но это неудивительно. В конце концов, в нем приблизительно столько нейронов, сколько капель воды в олимпийском плавательном бассейне. А это очень много!

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

Повседневное вычислительное мышление

Как мы знаем, мозг склонен проводить сопоставление с образцом, применяя нечто вроде порождающих правил, — компьютеры часто программируют на это. Мы автоматически реагируем на стимул, следуя заданным правилам. Например, если звонит телефон, я, особенно не задумываясь, подниму трубку. Если в дверь постучат, то я ее открою.

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

Мы используем декомпозицию, устанавливая цели и подцели, когда составляем план. Например, наша цель — сходить в магазин, чтобы купить еду на неделю. В этом случае у нас будут примерно такие подцели: не забыть взять сумку, заехать в магазин, взять все необходимое, заплатить — и так далее. Цель «взять все необходимое» снова разбивается на подцели. Приехав в магазин, мы, как правило, не задумываемся, где находятся нужные нам товары. И когда мы ищем яйца, нас не интересует, где стоят хлопья для завтрака. Мы делим проблему на отдельные части.

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

Вычислительное мышление компьютера

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

Разница между нашим мозгом и компьютерами может проявиться, если тщательнее рассмотреть, как мы выполняем планы. Вычислительное мышление для нас естественно, однако это не значит, что мы вычисляем так же, как компьютер. Дана ли нам от природы способность выполнять план так же точно, как компьютер? Нет.

Головоломное планирование

Предлагаем вам попробовать вариацию на тему старой головоломки. Она покажет, как люди задумывают и выполняют свои неформальные планы.

Фермерша отправляется в ближнюю деревню с овчаркой по имени Дымка, которую всегда берет с собой. Чтобы попасть в деревню, нужно переплыть реку с быстрым течением. На другом берегу живет изобретательница, которая сделала приспособление, позволяющее быстро перебраться через поток. Оно состоит из веревки, блоков и сиденья для одного человека. Местные жители условились всегда оставлять сиденье со стороны деревни, где живет изобретательница, чтобы она могла каждый вечер убирать его. В конце концов, она ничего не берет за переправу. Добравшись до реки, фермерша перетягивает сиденье с другой стороны. Она садится, прижимает к себе Дымку, перебирается через реку и продолжает путь в деревню.

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

Запишите последовательность шагов (конечно, это будет алгоритм!), которую нужно пройти фермерше, чтобы переправить всех и вся в целости и сохранности и продолжить путь. Помните, что собака и курица, а также курица и зерно не должны оставаться без присмотра.

Сначала решите головоломку, а потом читайте дальше.

Автоматические ошибки

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

Как это применимо к нашей головоломке? Дело в том, что многие находят ответ и у них получается переправить фермершу, собаку и зерно через реку. Однако они упускают последний шаг — не возвращают сиденье на другой берег. Правильное решение представлено ниже.

1.   Фермерша перебирается через реку с курицей (собака остается с зерном, но это ничего).

2.   Фермерша возвращается.

3.   Фермерша переправляется назад с собакой.

4.   Фермерша возвращается с курицей (потому что в противном случае собака ее напугает).

5.   Фермерша переправляется с зерном.

6.   Фермерша возвращается (снова оставив собаку и зерно).

7.   Фермерша переправляется с курицей.

8.   Фермерша отправляет сиденье назад на другой берег.

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

Так что, по крайней мере в этом отношении, мы не похожи на компьютеры. Они четко следуют плану. Нашему мозгу трудно это сделать без помощи.

Машина протягивает руку помощи

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

Решение для этой конкретной «ошибки после завершения» оказалось простым. Программист написал для банкомата код, в соответствии с которым он не выдает наличность (ваша цель), пока вы не заберете карту (не выполните завершающую подцель). Таким образом, вы вынуждены кое-что доделать (подцель), прежде чем достичь цели. Так сейчас работают банкоматы в Великобритании. И это не единственное решение. Например, на бензоколонках карту просто прокатывают — то есть вам вообще не нужно ее куда-то вставлять. Хорошая проработка помогает преодолеть недостатки в обработке информации, свойственные нашему мозгу, но без посторонней помощи мы делаем ошибки. В этом случаи машины должны помогать. К сожалению, урок не был усвоен в более общем плане! Когда магазины начали вводить кассы самообслуживания, вдруг обнаружилось, что многие, оплатив покупки, забывают карты. Обобщенное решение было проигнорировано.

Потеря карты, ее блокировка и получение новой — досадные неудобства, но подобные недостатки могут быть запрограммированы в самых разных устройствах. Как мы знаем, больницы набиты чудесами техники, которые помогают спасать жизнь, но плохая конструкция может привести к тому, что жизнь оборвется. Например, медсестры должны настраивать инфузионные насосы для вливания. Эти устройства могут иметь тот же недостаток, что и банкоматы. Настраивая их, необходимо закрывать зажим, чтобы прекратить поступление лекарства. Но как только компьютер настроен на верную дозу, зажим надо открыть. Это как раз тот самый шаг, о котором легко забыть. А медсестры должны помнить и делать гораздо больше, чем вы, когда стоите у банкомата. Это как раз те ситуации, когда машина должна помогать, а не препятствовать.

Качественное вычислительное мышление означает проектирование компьютеров, которые помогают преодолеть «недостатки», мешающие нам думать как компьютер.