Часть III. Язык клиента и его устройств
Воскресное утро началось с простой просьбы. К столику, за которым сидели Eugen Valuev и YAPL, подошла женщина с ребёнком и спросила, где здесь можно зарядить телефон. Eugen показал на розетку у стены. YAPL показал на ту же розетку, но добавил: «Только кабель нужен свой, здесь только розетка».
Женщина поблагодарила и ушла. А двое друзей остались сидеть и смотреть друг на друга, потому что в этой маленькой сцене они увидели всю книгу целиком.
— Она сказала «зарядить телефон», — сказал Eugen. — Она не сказала: «найди розетку, проверь напряжение, возьми кабель, вставь его правильной стороной». Она сказала, чего хочет. А мы уже сами перевели её желание в действия.
— Вот именно, — сказал YAPL. — Клиент всегда говорит о желании. А устройство всегда ждёт команды. И между желанием и командой — пропасть, в которую падают все наши протоколы вежливости, переводы и споры.
Они решили проверить эту мысль на себе. Eugen взял телефон и сказал вслух: «Я хочу, чтобы к вечеру у меня были готовы фотографии с хакатона». Телефон, разумеется, ничего не ответил. Он ждал команды: открыть приложение, выбрать фотографии, нажать «поделиться», выбрать получателя.
— Видишь? — сказал Eugen. — Я сказал намерение. А машина понимает только команды. Она не умеет спросить: «Готовы — это как? Отредактированные? Отправленные? Просто отобранные?» Она умеет ждать, пока я сам разложу своё желание на десять маленьких приказаний.
YAPL взял свой телефон и сказал: «Я хочу завтра не проспать самолёт». Телефон тоже молчал, но YAPL улыбнулся.
— А мой, — сказал он, — если его правильно попросить, сам поставит будильник, проверит время вылета, предупредит о пробках и напомнит собрать чемодан. Не потому, что он умнее твоего. А потому, что кто-то уже перевёл намерение «не проспать» в цепочку команд и спрятал этот перевод внутрь.
— Спрятал, — повторил Eugen. — Вот в чём беда. Перевод спрятан. Человек не видит, как его желание превратилось в действия, и не может исправить перевод, если он неверен. Машина думает, что «не проспать» — это будильник на шесть утра. А человек имел в виду: «разбуди меня, когда надо выезжать, с учётом пробок». Разница в час — и самолёт улетел.
Они стали придумывать язык, в котором намерение говорится вслух и остаётся видимым. Не язык команд — «открой, нажми, отправь», — а язык желаний — «я хочу, чтобы к вечеру…», «мне нужно, чтобы завтра…», «мне важно, чтобы никто, кроме…». И рядом с каждым желанием — его перевод в действия, который можно прочитать, поправить, отменить.
— Это же обычный разговор между людьми, — сказал YAPL. — Когда ты просишь друга: «Присмотри, чтобы я не проспал», — друг не спрашивает, какую кнопку нажать. Он понимает намерение и сам выбирает способ. А если способ не подходит, он переспрашивает.
— Да, — сказал Eugen. — Только друг может переспросить, а машина пока умеет только выполнять или отказывать. Нам нужен язык, в котором машина тоже умеет переспрашивать о намерении, а не только о команде. «Ты хочешь, чтобы фотографии были готовы — это значит отправлены или просто отобраны?» Вот это и есть общий язык.
К полудню у них получился черновик. Три правила общего языка. Первое: клиент говорит, чего хочет, а не как это сделать. Второе: устройство показывает свой перевод желания в действия, прежде чем действовать необратимо. Третье: любое действие можно переформулировать — человек вправе сказать: «Нет, я имел в виду другое», — и устройство должно понять это как исправление перевода, а не как новую команду с нуля.
— Если такой язык появится, — сказал YAPL, — исчезнет половина наших профессий. Не нужно будет учить людей командам. Нужно будет учить машины — намерениям.
— А вторая половина профессий появится, — ответил Eugen. — Профессия переводчика намерений. Человека, который помогает машине понять, чего на самом деле хочет клиент, и помогает клиенту сказать это точнее.
Они посмотрели на розетку у стены. Женщина с ребёнком уже заряжала телефон и улыбалась. Она не знала, что только что стала героиней главы о языке. Ей это было и не нужно. Ей нужно было только одно: чтобы её желание — «зарядить телефон» — было понято без команд.
До сих пор мы разбирали язык клиента и устройств как диалог команд и ответов: запрос, согласие, отказ, молчание, перевод между диалектами. Теперь сделаем шаг, ради которого всё это разбиралось. Команды — это не язык. Это только его нижний слой. Настоящий язык начинается там, где клиент говорит о намерении, а устройство отвечает пониманием намерения, а не только выполнением команды.
Разница между командой и намерением — это разница между «как» и «что». Команда говорит, как сделать. Намерение говорит, что должно получиться. «Нажми кнопку отправки» — это команда. «Я хочу, чтобы фотографии дошли до друзей к вечеру» — это намерение. Команда хрупка: если кнопка переехала или пропала, команда рассыпается. Намерение устойчиво: его можно выполнить десятью способами, и человек узнает результат, даже если способ изменился.
Поэтому общий язык строится не на командах, а на намерениях — и на видимом переводе намерений в действия. Устройство, получив намерение, обязано показать свой перевод: «Я понял так: отобрать лучшие фотографии, отредактировать их и отправить трём людям к шести вечера. Верно?» Человек может поправить перевод одной фразой: «Нет, только отобрать, не отправлять». И это исправление — не новая команда, а уточнение смысла. Именно так разговаривают люди, и именно так должны разговаривать клиенты со своими устройствами.
Отсюда положение этой главы, самое короткое и самое важное во всей третьей части: клиент говорит, чего хочет, а не как это сделать. Всё остальное — перевод, проверка перевода, исправление перевода — это работа языка. Если язык заставляет клиента говорить «как», он заставляет человека думать, как машина. Если язык позволяет клиенту говорить «что», он заставляет машину думать, как человек.
И заметьте: общий язык не отменяет диалекты, вежливость и споры из предыдущих глав. Он их собирает. Вежливый отказ теперь звучит так: «Я понял твоё намерение, но этот способ его выполнить тебе повредит, вот другой способ». Перевод между диалектами теперь переводит намерения, а не кнопки. А спор о службе решается так: машина служит намерению человека, а человек отвечает за намерение, которое он высказал. Всё сходится в одной точке — в точке, где желание названо вслух.
Выберите одно действие, которое вы совершаете каждый день с помощью устройства: отправку фотографий, постановку будильника, оплату, поиск дороги. Опишите его дважды. Первый раз — как цепочку команд: что вы нажимаете, в каком порядке. Второй раз — как одно намерение: чего вы на самом деле хотите, когда это делаете.
Сравните два описания. Сколько команд прячется внутри одного намерения? Сколько из этих команд вы совершаете автоматически, не думая? А теперь представьте, что устройство само показывает вам перевод вашего намерения в команды — и вы можете поправить его одной фразой. Какая фраза чаще всего понадобилась бы вам для поправки? Эта фраза — и есть то место, где общий язык у вас лично пока ломается.
Для разработчиков: возьмите одно необратимое действие в вашем продукте и добавьте перед ним не подтверждение в духе «Вы уверены?», а показ перевода: «Я понял ваше намерение так… Верно?» Вы увидите, как меняется поведение людей: они перестают нажимать «да» автоматически и начинают действительно проверять смысл.
Чем намерение отличается от команды и почему язык, построенный на намерениях, устойчивее языка, построенного на командах?
Ответ засчитывается, если в нём есть мысль: команда говорит «как сделать», намерение — «что должно получиться»; команда рассыпается, если изменился интерфейс, а намерение можно выполнить многими способами, и человек узнает результат; поэтому общий язык показывает перевод намерения в действия и позволяет поправить его одной фразой.