СсылкиКолонка автораСтатьиОбзоры программ и сайтовПримеры удачных решенийПримеры неудачных решенийЦентр Практичных Программ

Дайте программе память

Alan Cooper

Если бы вы могли предугадать действия пользователя, смогли бы вы создать лучший интерфейс? Если бы ваша программа могла знать, что именно пользователь выберет в диалоговом окне, разве не могли бы вы избавиться от него? Если бы был простой способ встроить в вашу программу предвидение, разве вы не сделали бы этого?

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

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

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

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

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

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

А если пользователь не знает ответа на заданный ему вопрос, вдобавок к раздражению он еще и чувствует себя глупым. Возьмем например такой обычный вопрос: Вы хотите профессиональную установку или установку для новичков? Другими словами, вы хотите то, чего не сможете понять или вам будет не нужно, или же вы просто лопух?

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

a8.gif (1777 bytes)

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

Я называю идею того, что программа может предсказать действия пользователя, термином "связность задач" (task coherence). Примените этот принцип к вашей программе, вы и ваши пользователи сразу почувствуете значительные преимущества. Когда человек работает с вашей программой, существует 80-процентная вероятность, что в следующий раз он сделает то же самое, что и в предыдущий. Таким образом, вы можете со значительной долей уверенности предсказать поведение пользователя, просто запомнив его последнее действие. Это позволит вам значительно уменьшить число вопросов, которые ваша программа задает пользователю.

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

Какие бы изменения в настройках программы я не сделал, они должны оставаться в силе до тех пор, пока я не изменю их сам. Программа не должна сбрасывать их при каждом запуске. Если пользователь игнорирует или отключает какие-либо возможности программы, она не должны предлагать их снова. Пользователь сам найдет их, когда они ему понадобятся.

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

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

Большинство программ позволяют пользователю устанавливать значения по умолчанию, но это не дает для большинства пользователей такого же эффекта, как могла бы иметь память. Я использую Microsoft Word каждый день, поэтому он уже тщательно отрегулирован в соответствии с моими предпочтениями, но мой коллега использует Word от случая к случаю, и не намерен заниматься изучением его настроек. Каждый раз при запуске программы ему приходится вручную устанавливать нужный шрифт. Если бы только программа могла запомнить его предпочтения, необходимось в этом отпала бы.

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

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

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

Как только программист начинает понимать всю силу принципа связности задач, в процессе разработки программ происходят значительные изменения. Разработчики программ начинают думать в совершенно новом направлении. Бездумный процесс создания еще одного диалогового окна заменяется более продуманным и аккуратным, в котором разработчик начинает задавать себе вопросы типа: сколько чего должна помнить программа? что именно должно запоминаться? Должна ли программа запоминать больше, чем просто последний вариант настройки? Он начинает представлять себе такие ситуации: например, пользователь принял одинаковый формат даты в 50 ячейках, а затем вручную ввел дату в другом формате. Какой формат должна использовать программа в следующий раз, когда пользователь введет дату? Тот, который введен 50 раз, или же последний? Сколько раз должен быть задан новый формат, прежде чем он станет форматом по умолчанию? Хотя здесь есть неоднозначность, программа все равно не должна спрашивать пользователя. Она должна использовать свою инициативу, чтобы сделать подходящее решение. Пользователь может всегда изменить его, если оно не верно.

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

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

Вернуться к списку статей