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

Программистам о разработке пользовательских интерфейсов. Глава 1

Joel Spolsky

Введение

Большинству моих знакомых программистов на C++ не нравится заниматься программированием пользовательских интерфейсов. Это удивляет меня, потому что я считаю, что программировать пользовательские интерфейсы (UI) легко, просто, и приятно.

Легко – потому что для этого не нужно использовать алгоритмы сложнее чем центрирование одного прямоугольника внутри другого. Просто – потому что когда вы делаете ошибку, вы сразу видите ее и можете исправить. Приятно – потому что результат работы виден сразу же. Такое ощущение как будто “лепишь” программу своими руками.

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

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

Я не собираюсь рассказывать вам об “Искусстве UI-дизайна”. Это не искусство, а всего лишь набор правил. Эта книга написана для программистов. Я считаю что вам не нужны инструкции как создать меню, скорее вам нужно подумать о том, какие в нем будут пункты (или нужно ли оно здесь вообще). Существует одна основная аксиома, от которой зависит хороший UI-дизайн, которой я научу вас, и понять ее совсем не сложно.

Глава 1: Контроль над происходящим делает человека счастливым

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

oranim.gif (3594 bytes)

В действительности же ни миксер С ни линии 3 и 5 еще не были построены, так что всё выглядело следующим образом:

oranim2.gif (2732 bytes)

Внимательные читатели сразу спросят “А как же тесто попадало с миксера B на линию 6?” Вот именно для этого я и был нужен. Моя работа, заключалась в том, чтобы стоять слева от миксера B, ловить гигантские вылетающие 180-килограмовые куски теста в большую тележку на колесах, затем катить ее к линии 6, и выгружать тесто специальным приспособлением. Мне приходилось делать это каждые 10 минут, от 10 утра до 4-х вечера.

На самом деле все было немного сложнее. Шестая линия не могла обрабатывать 180 кг теста одновременно, поэтому мне приходилось резать его гигантским ножом на 10 кусков.

В первые дни на такой работе я чувствовал себя ужасно. Каждая косточка в моем теле ныла и на пальцах постоянно были мозоли. У меня болело в таких местах, о существовании которых я даже не подозревал.

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

Но после недели такой работы я справлялся уже гораздо лучше. У меня даже оставалось 2 минуты на отдых из каждых 10. Я выяснил точное расписание и научился затормаживать миксер, когда линия останавливалась. Тогда я стал задумываться, почему в один день все идет лучше чем в другой?

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

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

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

Я начал понимать, что лучшими были дни, полные маленьких побед и лишь нескольких маленьких неудач.

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

Когда у вас получается все что бы вы ни делали, вы счастливы. Если же наоборот, вы злитесь или расстроены, это скорее всего из-за того, что произошло что-то вам неподвластное, даже если это событие незначительно. Пробел на клавиатуре работает плохо, и напечатанные вами слова сливаются. Это вызывает раздражение, потому что вы жмете на пробел и ничего не происходит. Замок во входной двери плохо работает – ключ заклинивает когда вы поворачиваете его. Еще одно маленькое расстройство. Все это складывается день ото дня, и хотя подобные неудачи могут показаться слишком мелкими (я имею в виду что например в Африке люди умирают с голоду, не могу же я серьезно расстраиваться над неработающим пробелом), тем не менее они влияют на наше настроение.

Давайте на минуту остановимся и вернемся к компьютерам.

Давайте представим себе типичного “продвинутого” пользователя Windows по имени Питер. Когда вы думаете о пользовательских интерфейсах, полезно представлять себе воображаемых пользователей. Чем реалистичней будет воображаемый пользователь, тем лучше у вас получится думать о том, как он пользуется вашей программой. Питер – бухгалтер в техническом издательстве и уже шесть лет пользуется Windows на работе и немного дома. Он довольно компетентен в компьютерах. Он сам инсталлирует программы, читает PC Magazin и даже написал несколько полезных макросов для MS Word. Питер никогда не работал на Макинтоше. “Они слишком дорогие” – говорит он.

Однажды его подруга Джина попросила его помощь ей с компьютером. У нее сейчас Макинтош iBook, потому что ей нравятся прозрачные корпуса. Питер садится и пытается работать на Макинтоше, но вскоре становится чрезвычайно раздраженным: “Ненавижу эти штуки” - говорит он. В конце концов он все же помог Джине, но он ворчит и расстроен: “У Макинтоша просто ужасный интерфейс”.

Ужасный? О чем это он говорит? Все знают, что графический интерфейс Макинтоша довольно элегантен и прост, не так ли?

Вот мой анализ этой загадки:

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

В Windows, когда на экране появляется окно с сообщением можно нажать Enter или Пробел, чтобы закрыть его. Но на Макинтоше пробел не сработает. Питер пытался закрывать окна сообщений с помощью пробела, так как он подсознательно делал это 6 лет подряд. Он нажал пробел первый раз – ничего не произошло. Тогда Питер еще сильнее нажал на пробел, потому что он подумал, что компьютер просто не уловил нажатие клавиши. В действительности же он все уловил – но ничего не сделал. В конечном счете Питеру пришлось взяться за мышь. Еще одно маленькое неудобство.

Питер также привык использовать комбинацию Alt+F4 для закрытия окна. Но на Макинтоше эта клавиатурная комбинация изменяет громкость звука. Один раз Питер хотел щелкнуть по иконке Internet Explorer на рабочем столе, которая была частично закрыта окном. Он нажал Alt+F4 чтобы закрыть окно и тут же два раза щелкнул по иконке. Но так как в результате нажатия Alt+F4 на экране появилась панель регулировки громкости, а само окно не закрылось, то двойной щелчок в действительности пришелся по кнопке Help на панели инструментов окна, после чего открылось новое окошко помощи. В итоге на экране оказалось два окна, каждое из которых нужно закрыть.

Еще одно маленькая неприятность. Но, вы помните? – они складываются. В конце дня Питер был усталым и злым. Когда он пытался контролировать компьютер, это у него не получалось. Пробел и комбинация Alt+F4 “не работали” – как будто эти клавиши были сломаны. Окно не повиновалось ему. Плохое окно. Даже если все это происходит бессознательно, ощущение своей неспособности контролировать ситуацию переходит в беспомощность, которая в свою очередь заставляет человека чувствовать себя несчастным. “Мне нравится мой компьютер”, говорит Питер. “Я сам настроил его, и он работает так как мне нравится. Но Маки – это что-то ужасное. Если бы Apple работала над MacOS все эти годы вместо того чтобы заниматься Newton’ом, их операционная система не была бы такой неудобной”.

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

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

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

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

Таким образом, основная аксиома дизайна пользовательских интерфейсов выглядит так:

Интерфейс пользователя считается хорошим тогда, когда программа ведет себя в точности так, как предполагает пользователь

Все другие правила хорошего UI-дизайна всего лишь выводы из этого.

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