Хакер » 16.01.2009 (Пт) 22:29
MIT
Не помню, чтобы у кого-то получилось красиво. И из известных программ таких можно пересчитать по пальцам.
Интерфейс программы — это не пространство для творчества и выражения своих вкусов. Это вещь гораздо более важная, чем кажется большинству.
Использование во всех программах единых для всей системы элементов управления — гениальная идея. Навык работы с элементами вырабатывается один раз и используется дальше всю жизнь.
Какое счастье, что создатели Windows-GUI не отдали во власть разработчика хотя бы заголовок окна. Благодаря этому, я (и любой другой пользователь) точно знаю, что кнопка, закрывающая окно находится в правом верхнем углу, и что она красная. Если бы окна в Windows были бы изначально вообще пустыми, то каждый лепил бы кнопку "закрыть" там, где лично ему её расположение кажется правильным.
Если сейчас вдруг откроется какое-то окно, которое я вижу первый раз в жизни, я уверен, что я смогу его закрыть меньше чем за половину секунды. Если бы вопрос о размещении кнопки "Закрыть" дали решать разработчику, я думаю, мне бы пришлось некоторое время потратить на изучение нового окна, чтобы понять, есть ли тут такая кнопка вообще.
Я точно знаю, как работает стандартная полоса прокрутки. Знаю, что клик за пределами ползунка приводит к page-up'у или page-down'у. Знаю, что если зажать мышь над ползунком, а потом увести указатель с него (не отпуская кнопки), то ползунок всё-равно будет перемещаться, но если отвести указатель от ползунка слишком далеко, то действие прекратися. Я знаю, что если я кликну правой кнопкой мышки по скроллбару, то появится контекстное меню. Я помню, какие там пункты. Я кликну и выберу нужный мне пункт даже быстрее, чем мои глаза успеют прочитать, кой пункт я выбираю. Это называется навык.
Среди тех людей, кто считают, что гораздо круче сделать свой скроллбар, найдутся даже такие, кто не знают всех этих особенностей стандартной полосы прокрутки. Естественно, у реализованных ими скроллбаров эти возможности будут отсутствовать. Найдутся те, которые реализуют эти возможности, но по другому.
Т.е. нестандартный контрол в целом работает не так, как стандартный, а значит, каждый раз встречая такой контрол надо знакомиться с ним — каждый ведь работает как по своему особенно.
Возвражение типа "Ну ведь можно делать нестандартные контролы так, чтобы они работали как стандартные" не принимается. Делать, конечно, можно. Но вот откуда мне знать, когда я увижу подобный контрол, действительно ли он всё делает так же, как настоящий. Или при таком же воздействии, как на обычный, от него можно ожидать совсем другой реакции? Пока не проверишь — не узнаешь.
Стандартная виндовая кнопка, например, визуально реагирует на нажатие. Но действие происходит при отпускании кнопки. Т.е. я могу нажать, удерживать несколько секунд, а потом передумать, увести указатель за пределы кнопки и отпустить. Нажатия, в истинном смысле, не произойдёт. (А могу после того как передумал, передумать второй раз, завести указатель обратно в пространство кнопки и совершить MouseUp над ней. Тогда нажатие всё-таки засчитается.)
Где гарантия, что самодельная кнопка работает абсолютно так же, как мне привычно? А вдруг она реагирует сразу же на MouseDown? Пока не потыкаешь — не узнаешь. (Далеко за примерами ходить не надо: твой, MIT, самодельный ListView-контрол наоборот производит выделение пункта только по MouseUp-у, тогда как должен по MouseDown-у. Этим он вызывает ощущение либо своей тормознутости, либо собственным нежеланием выделять пункт.)
Есть в концепции Windows-элементов управления такие понятия как CheckBox и OptionBox. Все знают (ну или по крайней мере должны знать), что первое используется, когда допускается отметить несколько пунктов (в том числе все из предложенных или, наоборот, ни одного), а второе — когда следует выбирать только один из предложенных.
Однажды мне довелось на компьютере проходить тест. Вопрос и варианты ответа. Автор тестирующего ПО заюзал для вариантов ответа чекбоксы.
— Что подумал я (и должен был подумать любой другой), когда увидел чекбоксы напротив вариантов ответа? — Правильно, что тест предполагает несколько вариантов ответа. Я, вместо того, чтобы выбрать один очевидный, читал все варианты и думал над каждым, стоит ли поставить тут галочку. Когда все 8 вариантов ответа были рассмотрены и нужные галочки выставлены (и была нажата кнопка "Далее>>", я увидел радостное сообщение, что (оказывается) нужно выбрать только один вариант.
Это — классический пример дебилизма со стороны разработчика. Вместо подходящего на данную роль OptionBox-а автор выбрал сбивающие с толка CheckBox-ы. Когда я поинтересовался у автора, какого черта там делает чекбоксы, ответ был поразительным: автору "галочка в квадратике" нравилась больше, чем "точка в кружечке". А на, что у каждого типа контрола своё применение — плевать.
Обязательо найдутся такие, кому ни "галочка в квадратике", ни "точка в кружечке" не понравится, и они придумают что-то своё. Причём это своё будет настолько оригинальным (настолько, что я даже сейчас не могу представит, что именно), что автор будет вдвойне уверен в ценности своего решения.
Автору, конечно, его элемент будет приятен и понятен. А что делать пользователю, если непонятный элемент визуально представляет собой нечто среднее между CheckBox-ом и OptionBox-ом? Тыкать?
Смысл интерфейса, кнопочек, надписей, пиктрограмм как раз в том, чтобы не тыкать, а понимать сразу.
То что я описал — это только маленькая часть, только один аспект всей проблемы.
Есть дрегие аспекты. Есть механизм времени и часовых поясов. Хочу я, чтобы все программы думали, что сейчас 1999 год — будут думать. Есть национальные настройки. Хочу я, чтобы разделителем дробной и целой части был твёрдый знак — будет так. Есть механизм тем (themes). Хочу я зелёные кнопки с красными надписями — будет точно так. Хочу синию кнопку "свернуть" и красную "закрыть" — будет именно так, а хочу серые — отключу сервис тем или включу классическую тему.
Все программы будут действовать по правилам, которые я установил. Но ты, как автор своей программы, получается, ставишь свои вкусы и предпочтения выше других. Как будто тебе лучше знать, какого цвета я хочу видеть кнопки и какую закорючку использовать в качестве знака валюты.
Кроме того, необходимость в настройках не всегда обусловлена одними только вкусами. У кого-то, например, при виде красной буквы "Ы" на зелёном фоне внезапно возникают эпилептические припадки. Кто-то впадает в депрессию от виде черного прямоугольника. Третий просто плохо видит, ему нужна контрастная схема, крупные шрифты, озвучивание содержимого окон.
Умные люди при проектировании GUI-подсистемы всё это предусмотрели и сделали на должном уровне. Достаточно просто правильно настроить систему, и пользователь получает возможность нормально работать с софтом. Это очень хорошо и правильно, когда продумываются все мелочи.
Но тебе же плевать на остальных, ты же, блин, делая интерфейс, в первую очередь самовыражаешься, и только во вторую — делаешь интерфейс.
Это только второй аспект. Списиок можно продолжать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.