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