Второй отличительной особенностью Сьюзен Полгар является то, что она начинает игру с конца, то есть с результата, которого хочет достичь. В шахматах целью игры является поставить противнику мат. От этого результата Сьюзен и отталкивается, учитывая текущее расположение фигур на доске. Такой подход требует задействования рабочей памяти, но в то же время позволяет разгрузить дирижера рабочей памяти – ведь при движении с конца ему придется рассматривать меньшее количество ходов. Если начинать игру сначала, от положения фигур на доске, перед вами будет больше ходов и комбинаций, которые нужно рассмотреть и проанализировать. Но при планировании игры с конца многие ходы отпадут сами собой.
Блок, часть 2. Не усложняйте
Еще одним гением рабочей памяти, который пользуется для запоминания методом блоков, является Феррос Абухадиджех. На первый взгляд он ничем не отличается от обычного студента курса информатики при Стэнфордском университете, но известный журнал New York Magazine уже присвоил Ферросу титул суперпрограммиста и назвал его новым Стивом Джобсом и Марком Цукербергом будущего. Предметом гордости Ферроса Абухадиджеха можно считать поисковую систему YouTube Instant (ytinstant.com), которая позволяет быстро искать видеоролики и мгновенно проигрывать их. Феррос поспорил с соседом по комнате, что сможет создать поисковую систему для сервиса YouTube в реальном времени, и на это у него уйдет менее часа. Он проиграл спор, так как на создание системы ушло три часа (возможно, потому, что Феррос одновременно программировал и смотрел фильм).
Закончив работу, он разместил ссылку на новый сайт на своей странице в Facebook и лег спать. Когда он проснулся, его ждали четырнадцать пропущенных звонков и десять текстовых сообщений на телефоне, а также приглашение на интервью от газеты Washington Post. Не прошло и четырнадцати часов после размещения на Facebook ссылки на сайт ytinstant.com, как главный исполнительный директор YouTube, Чад Херли, предложил Ферросу Абухадиджеху работу, от ко торой молодой человек отказался. С тех пор сайт ytinstant.com посетили миллионы пользователей, а Феррос все так же остается студентом Стэнфорда и вежливо отклоняет приглашения на работу от ведущих компаний, за исключением одной – Facebook, в которой он в свое время проходил стажировку у Марка Цукерберга. Как признался нам Феррос, он хочет работать на себя и быть своим собственными директором.
Пример Ферроса Абухадиджеха свидетельствует о том, что иногда навыки специалистов в той или иной области могут быть полезными и другим людям. В детстве Феррос перепрограммировал режим защиты от детей в микроволновой печи так, что его мать не могла включить этот режим. В одиннадцать лет он создал свой первый сайт. Будучи школьником, Феррос купил книгу о разработке сайтов и без какой-либо специальной подготовки самостоятельно разобрался, как запустить сайт в интернете. В результате появился сайт freetheflash.com для обмена видеофайлами, который стал прототипом YouTube. Несмотря на погрешности в коде, сайт выполнял свои функции и очень быстро стал популярным. Сайт мог похвастаться хорошей статистикой: шестьсот тысяч посетителей и три миллиона просмотров. Как же этому молодому человеку удалось достичь таких головокружительных успехов? По его собственным словам, секрет прост: «Работа, работа и еще раз работа». Оттачивая мастерство программирования, Феррос научился работать с умом. Одним из основных и эффективных методов является программирование при помощи блоков.
Давайте рассмотрим процесс программирования, так сказать, изнутри. Все начинается с компьютерной программы, которая представляет собой идею, воплощенную в жизнь с помощью фрагментов кода – своеобразных инструкций, с помощью которых человек отдает компьютеру команду для выполнения тех или иных функций. Существует огромное количество самых разных программ, но все они создаются путем объединения нескольких блоков кода в одно целое. Одни и те же блоки могут использоваться в различных программах. Для небольшой программы средней сложности, состоящей из нескольких блоков, может понадобиться несколько тысяч строк кода. А при создании более сложных программ количество строк кода может доходить до миллиона. Сохранить такое количество строк в долговременной памяти просто невозможно.
Как же тогда Абухадиджех пишет свои программы? Очень просто: вместо того чтобы запоминать программы целиком или по частям, он оперирует имеющимися блоками кода, составляя из них программу, подобно тому как шахматист двигает фигуру за фигурой, чтобы выиграть. Скажем, ему нужно написать программу, обеспечивающую доступ к электронной почте по паролю. Первый блок программы должен сверить введенный пароль с правильным, второй – обеспечить доступ к электронному почтовому ящику в случае введения правильного пароля, а третий – заблокировать доступ к почте, если пароль неверный. Вместе эти блоки образуют одну программу. Если собрать их неправильно, программа может вести себя непредсказуемо: заблокировать доступ при правильном пароле или, наоборот, впустить пользователя по неправильному паролю. Но если вы четко знаете, какие функции выполняет тот или иной блок, то гарантированно получите надежную программу доступа к электронной почте.
Более того, как и в случае с шахматными блоками Сьюзен Полгар, блоки программного кода можно разделить на более и менее эффективные. Феррос Абухадиджех смог создать сайт ytinstant.com так быстро потому, что не распылялся на мелкие детали, а держал в уме целостную картину. Как вы знаете, шахматные блоки, основанные на отношениях между фигурами, запоминаются гораздо легче, чем блоки, основанные на точном расположении фигур на шахматной доске. Точно так же Феррос считает, что блоки программного кода нужно стараться использовать с наибольшей эффективностью. Иными словами, необходимо стремиться к простоте везде, где только возможно.
Чтобы стало понятнее, Феррос объясняет, что существует два уровня программирования: высокий и низкий. Высокоуровневое программирование представляет собой читабельный текст с описанием основных функций программы. Специалист, составляющий такие тексты, называется техническим писателем. При их составлении не рекомендуется увлекаться техническими подробностями, чтобы не нарушить целостность текста. Для уточнения отдельных моментов существуют сноски, которые обычно располагаются в нижней части страницы или в конце статьи. Чтобы избежать чрезмерного усложнения высокоуровневого текста, опытные программисты, такие как Абухадиджех, широко используют низкоуровневые сноски. К примеру, чтобы описать возведение числа в квадрат в высокоуровневом тексте, не нужно подробно расписывать саму операцию (х2 = х × х). Достаточно просто написать sq (для обозначения возведения в квадрат) и дать определение операции sq в низкоуровневом тексте.
Как известно, чем больше объем информации, тем выше вероятность перегрузки дирижера рабочей памяти. При составлении программ Феррос использует простые блоки (к примеру, блок sq) и подробно расписывает их только после того, как готов набросок программы. Таким образом дирижер рабочей памяти контролирует процесс создания программы и помогает не упускать из виду конечную цель. Феррос Абухадиджех может определить качество работы программиста по тем блокам, которые он использует. Менее опытные программисты часто включают низкоуровневую информацию в высокоуровневый текст. Это свидетельствует о том, что специалист не способен в полной мере дифференцировать уровень сложности того или иного блока, а значит, существует опасность запутаться в деталях и упустить главное. Если бы Феррос расписывал каждую сноску при создании сайта ytinstant.com, он никогда не справился бы с заданием за три часа. Только благодаря упрощению его рабочая память смогла сосредоточиться на поиске оригинального решения.
Упрощение – это только часть методики Ферроса Абухадиджеха, которая принесла ему славу суперпрограммиста. Второй частью является прием, описанный Сьюзен Полгар. Как вы помните, он заключается в том, чтобы начинать игру с конца. Так же, как и Сьюзен, Феррос начинает программировать с постановки задачи, а затем шаг за шагом выясняет, как достичь желаемого результата. Он считает, что этот прием можно описать как строительство дома наоборот, когда начинают с крыши и заканчивают фундаментом.
Принцип действия этого приема Феррос Абухадиджех объясняет на примере создания программы для проверки орфографии. Крышей, или конечной целью, в данном случае является нахождение и выделение цветом тех слов, в которых были допущены ошибки. Как известно, крыша держится на балках. В роли балок в этом случае будет выступать код, который проанализирует все слова в документе и найдет те из них, которые написаны неправильно. Затем нужны стены, чтобы держать балки. Стенами послужит орфографический словарь. И наконец, самое главное – фундамент, то есть набор правил, по которым программа будет определять, верно ли написаны слова. Закончив с основными составными частями дома, можно приступать к написанию кода для нахождения и выделения неправильно написанных слов. Таким образом Феррос последовательно проходит все этапы строительства наоборот: от крыши до фундамента. Создание программы с конца позволяет ограничить количество возможных вариантов и разгрузить рабочую память. На каждом этапе работы Феррос четко представляет себе, как закодировать те или иные функции. При этом его рабочая память следит за тем, чтобы конструкция получилась прочной и надежной.