усы2

Стой под стрелой

Поступки и мысли, о которых могу вспомнить не краснея

Previous Entry Поделиться Next Entry
Семь смертных грехов программных систем, которых в 2011-м году стыдно не замечать
усы2
tonsky
У современных программ, без сомнения, много проблем, но я выбрал вот эти с учетом веяний моды и того, что постепенно уже осознает мейнстрим. Так сказать, на самом острие софтостроения.

Семь грехов:
  1. Медлительность
  2. Блокирующее взаимодействие
  3. Неуместные ограничения
  4. Ненастроенность
  5. Несамостоятельность
  6. Забывчивость
  7. Гордыня

1. Медлительность

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

2. Блокирующее взаимодействие

  • Вы нажимаете в svn кнопку «коммит», и пока он не уйдет целиком и полностью, вас никто никуда не отпустит.
  • Вы применяете к изображению сложный фильтр и должны дождаться, пока он полностью обсчитается, прежде чем сможете на что-нибудь нажать.
В общем случае пока программа что-то делает (даже по пустякам), она заставляет вас ждать «на всякий случай», мало ли что вы там испортите. Апофеозом этого греха являются модальные окна — программа ничего не делает, но никуда уйти не дает. Рецепт простой — работать в фоне, вот применять сложнее.

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

3. Неуместные ограничения

  • Описание не может быть длиннее 1000 символов.
  • Название категории не может содержать пробелов.
  • Вы должны вступить в блог, чтобы прочитать запись из него (хабрахабр).
В общем случае один человек ткнул пальцем в небо и родил ограничения. Еще и называет это «подумал о вариантах использования». Лучшие ограничения — это те, которых нет. Мы же не байтики на дискетах экономим в 21-м веке. Пора уже привыкнуть, что вместо «vasya_poopkin» я могу логиниться по гораздо более красивому «Василий Пупкин». Если ты можешь сделать, скажем, описание продукту любой длины (а он может) — делай, не надо гадать, что скорее всего никому больше 1000 не понадобится. Никогда не угадаешь.

4. Ненастроенность

  • Первым делом в текстовом редакторе вы меняете шрифт и включаете автосохранение.
  • Первым делом в браузере вы убираете ненужные панели и включаете сохранение паролей.
В общем случае программа в изначальной конфигурации неудобна/неприятна/непригодна для использования. Люди привыкли, что в первую очередь нужно залезть в настройки. Но это не значит, что это хорошо. В магазинах не продают лопат, которые сперва нужно перековать. Вы не меняете ручку у молотка сразу после покупки. Программа — такой же инструмент, и обязанность продавца (читай разработчика) сделать так, чтобы ей можно было сразу пользоваться. Кстати, если об этом подумать, то 50..90% настроек можно будет выкинуть за ненадобностью.

Положительный пример: iA Writer, текстовый редактор без панели настроек.

5. Несамостоятельность

  • Не могу создать проект, папка уже существует (пустая).
  • Вашему репозиторию нужна компактификация. Запустите её!
  • Не могу запустить поиск, содержимое файловой системы изменилось, нажмите «обновить».
  • Среди ваших ста тысяч пятисот файлов обнаружился один защищенный, я пока остановлюсь, что мне делать???
В общем случае программа не делает чего-то простого и ждет от пользователя очевидной команды. Хуже, если задача частая, или если это происходит во время длительного процесса, когда человека нет рядом. Пользователь, конечно, ко всему привыкнет, но немного интеллекта и решительности программам бы не помешали. Обычно у программ полно свободного времени между взаимодействиями с пользователем, и хорошо бы в это время делать что-то полезное (индексировать/обновлять/проверять/подкачивать), что ускорит последующее взаимодействие.

Положительный пример: браузер Сафари сам распаковывает архивы и монтирует образы сразу после загрузки. Гугл Хром сам скачивает и устанавливает обновления без единого окошка.

6. Забывчивость

  • Вы не указали адрес, пожалуйста, заполните эту форму заново.
  • Сохранить документ? — Нет. — Ок, удалил. — Хотя подожди...
  • Вы говорите файндеру показывать файлы списком, а он в следующий раз опять показывает их превьюшками.
  • Вы выбираете один слой, но через какое-то время объекты опять создаются на другом.
  • Вы настраиваете размер окна, а при следующем запуске программа его забывает.
В общем случае я не должен предпринимать никаких дополнительных действий, чтобы то, что я ввожу (в любом виде — информацию, настройки, конфигурацию окон, яркость экрана), сохранилось. Господам программистам надо поднять жопу со стула и пойти и сделать, чтобы так и было. Это поведение по умолчанию, блин!

Положительный пример: ИнДизайн ЦС5 даже после падения поднимается ровно в том месте, где вы закончили, независимо от того, сохранялись вы или нет.

7. Гордыня

  • Обновление прошло успешно! (Аваст, голосом!)
  • Я еще не запустилась, но вот тебе мой сплешскрин поперек всего и крадущий фокус.
  • Здравствуй, дорогой друг! Я знаю, ты запустил меня, чтобы что-то сделать, но у меня тут обновление, пойди лучше скачай его.
  • А я маленькая программка управления фотоаппаратом, и я боюсь что ты меня никогда не увидишь, поэтому вот тебе мой тулбар в браузер, иконка в трей, автозапуск со сплешскрином, стартовая страница и поиск по умолчанию.
  • Вы не чистили свой рабочий стол 60 дней...
В общем случае программа считает себя центром вселенной и о любом событии беспокоит пользователя, чтобы он ей почесал за ушком, скачал обновление, даже информирует его о том, что все идет хорошо (!). Программы мигают в панели задач, прыгают в доке, суют свои иконки (я смотрю на тебя, adobe reader), чего-то постоянно от тебя требуют (нагло, не правда ли?). В результате, если ты не загружался в систему полгода, то тебе преградит путь десяток каких-то тупых окон, а тебе всего-то нужно было файл забрать, например. Все-таки, компьютер для человека или человек для компьютера? Иногда мне кажется, что мой ответ отличается от мнения большинства разработчиков.

Бонус.

Семь примеров феерической тупости из коллекции автора.
  1. Медлительность. Вы просите Виндоус зайти на самбу и ждете сначала полчаса чтобы она спросила у вас пароль, потом еще полчаса она будет «пытаться присоединиться» к соседнему компьютеру. Ощущения как будто пограничник забрал у вас паспорт и тайно пошел на обед.
  2. Блокирующее взаимодействие. Модальные целиком для браузера alert/http basic auth form — такие, что нельзя переключиться в другую вкладку, чтобы скопировать пароль.
  3. Неуместные ограничения. Что делать, если данное мне при рождении имя не удовлетворит критериям этого безымянного аналитика?
  4. Ненастроенность. Все сайты погоды, которые даже не пытаются определить по айпи город.
  5. Несамостоятельность. Введите номер телефона без пробелов и специальных символов.
  6. Забывчивость. Сохранить документ, который вы писали 7 часов? Да-нет? Упс.
  7. Гордыня. Виндоус Виста: установлено обновление, вы здесь? Ок, 10 минут никого нет, прибиваю всё и перезагружаюсь. — Эй, чувак, а что, электричество отключали?

Если кому-то показались хоть немного интересными высказанные здесь мысли, то рекомендую продолжить чтение здесь:
  • Дональд Норман. Дизайн промышленных товаров / The Design of Everyday Things. Про то, что вообще за проблемы с вещами, кто в ней виноват и кто должен ее решать.
  • Джеф Раскин. Интерфейс (выложен полный текст). Про то, как уже вполне могли бы работать компьютеры, если бы в Майкрософте тоже слушали умных людей. Знакомым с этой книгой забавно смотреть, как идеи и принципы из нее потихоньку протаскиваются в современный мир Эпплом, а затем и всеми остальными.
  • Алан Купер. Об интерфейсе / About Face 3. Очень большой и очень обстоятельный труд, по косточкам разбирающий современные интерфейсы и предлагающий адекватные решения многих проблем. Например, половина релиза OS X Lion как минимум была здесь предсказана :)


  • 1
>Апофеозом этого греха являются модальные окна — программа ничего не делает, но никуда уйти не дает.
случайно что-то нажала, и теперь КРОВЬ, КИШКИ, СМЕРТЬ!!!111". Купер пишет про undo (привет, Lion), но для людей, который не освоили copy-paste и окна, это ничего не изменит. Компьютер они считают волшебным.

>Люди привыкли, что в первую очередь нужно залезть в настройки.
Не люди, а программисты. У них есть возможность и желание сделать из программы то, что им нравится. У остальных ни возможности, ни желания нет.

> У остальных ни возможности, ни желания нет
Да, кстати, вполне может быть и так.

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

Это на хабр надо, кстати. Там такое любят.

Маловато там труЪ красноглазых. Видать, все веб-приложения пишут.

Раскин - просто в обязательном порядке.

Я бы ещё порекомендовал "The Inmates Are Running the Asylum" того же Купера.

Я все никак не прочитаю, не знаю, насколько она от About Face его отличается, есть ли смысл их обе читать?

Нет. About Face содержит и общие слова из "Психушки" и конкретику.

На самом деле это всё прекрасно. Это даёт возможность хорошим людям делать хорошие программы и зарабатывать на них деньги. Среди такого количества плохих программ найти для себя возможности может каждый. ;)

Хехе, в посте про книгу про Эрленг lionet аналогичную мысль высказывал. Но я не настолько корыстен, чтобы скрывать свои знания от общества — все сделать самому не получится, а жить в мире прекрасных вещей хочется.

Автораспаковка архивов в Сафари, увы, недоделана и я её отключаю. Потому что, во-первых, она не знает что делать с .tar.gz, и распаковывает их частично, во-вторых, не удаляет архив после распаковки, и это приходится делать мне.

С tar.gz да, но архивы-то удаляет! Или в смысле из корзины?

Уже удаляет? Надо попробовать включить посмотреть. Раньше не удалял.

В некоторых случаях надо спасать пользователя от себя или от других пользователей. Если не сделать ограничения на латинские буквы, то поимеем массу проблем с кодировками в неожиданных местах. Да, пусть виноваты мы программисты с этими дурацкими кодировками, но если пытаться сделать как лучше - может получится как хуже ("Логин потерялся безвозвратно, так как тут нет франзузких букв").

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

А, и ещё как только появляются возможность использоавть в именах латинские буквы - сразу появляются разные логины
bydl0coder
bydl0cоder
bydl0codеr
bydl0cоdеr

Я тоже очень не люблю когда на мой 15-буквенный пароль сообщают "у вас нет больших букв, цифр и пунктуации" или "тут можно только 8-буквенные пароли". Но ограничение "только ASCII" на логины и пароли - имхо хорошее ограничение, слишком уж много сложностей будет именно у пользователей. "вы не можете ввести с клавиатуры телефона å, ä и ö? пройдите нахуй".



Edited at 2011-07-24 14:15 (UTC)

Мне кажется, что на телефоне и компе у человека клавиатура более или менее одинаковая. С паролями на телефоне вообще весело - на хера там звездочки? Кто, блин, сможет его подсмотреть?

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

Что-то мне все меньше нравится ваша идея защищать пользователя от самого себя. Появляются разные логины — у кого? Люди по невнимательности при регистрации вбивают логин в нескольких раскладках? o_O Человек сделал себе хитрый локализованный пароль и потому ВНЕЗАПНО у него появилось устройство и он понял, что не сможет его ввести — ок, но когда он осознал проблему, почему бы не поменять? У меня, когда появился айпад, пароль пришлось поменять — я раньше его по другой раскладке на клавиатуре набирал. То есть я не вижу здесь ничего, с чем бы человек не смог сам справиться. Грести из-за этого всех под одну гребенку — ну не знаю, это как в следующей версии ОС специально все языки, кроме английского, решить убрать.

> Появляются разные логины — у кого?
1) у гриферов, которые специально подделывают чужой ник
2) чисто случайно, чередование латинской/русской с/c
3) случайно похожие логины разных людей
4) поменять логин сложно. Потому что он уже может быть занят, потому что к нему есть требование уникальности.
5) иногда оригинальное устройство недоступно, потому что человек не очень технически подкован, и не знает где можно добавить японский язык. Или у него нет админских прав на это.

6) опять возникнут приколы с lower/UPPER case, про которые я говорил.
7) http://%E2%E0%F1%FF%20%EF%F3%EF%EA%E8%ED.livejournal.com/ Фуууууууууууууууууууу
А может быть http://xn--80adthqjaot2j.livejournal.com/ ?
8) проблема не только в кодировках, но и в том, что бы китайская девочка из службы поддержки могла продиктовать логин другой индийской девочке "ЭС КАК ДОЛЛАР", протоколы есть не только сетевые. А латиницу вроде знают больше людей, чем те которые могут продиктовать что-то вроде ق
きط招ة

Ну то есть нужно быть на всю голову ударенным юзабилистом, что бы оказать медвежью услугу в виде возможности использования не-ascii букв в уникальном идентификаторе человека (уникальном => не обычном имени). Который будет почтой, URLем, диктоваться по телефону, сравниваться без учета upper/lower, печататься в бумажных документах, ...
ИМХО, никакой вменяемый юзабелист такой "услуги" пользователю не окажет.


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

(Анонимно)
По моему такая же штука относится и к инструментам разработки инструментов: программы пишут в последнюю очередь для людей)

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

Кстати, идеальную программу написать на порядки сложней.
Лучше программа с неидеальным интерфейсом, чем вообще отсутствующая. А дальше уже невидимая рука рынка улучшит интерфейсы.

Например, я уверен, что adobовцы профилируют запуск фотошопа, и уже места которые можно очевидным образом срезать и заменить на ленивую загрузку - срезали и заменили. Или же они знают что их основные покупатели - это дизайнеры с мониторами в 30 дюймов и SSD-дисками, и поэтому уже сделали для них good enough.

Фотошоп и Эклипс раз в день запускают, так что пофиг, да. Opportunity cost.

Кто бы спорил. Любая программа недописана, любой интерфейс можно улучшить.

В список феерических тупостей хочется добавить "введите номер кредитной карточки БЕЗ ПРОБЕЛОВ", сложно сделать .replace(" ", ""), это ж надо же так не любить пользоватей!!! replace написать проще, чем предупреждение переведенное на кучу языков!!!


хуже когда его надо вводить в 4 окна, по 4 символа в каждый.
даже paste не сделать

Я в общем согласен, по некоторым пунктам - горячо согласен, но есть и возражения:


Рецепт простой — работать в фоне


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

А вот теперь я буду бороться со злом:

Первым делом в текстовом редакторе вы меняете шрифт и включаете автосохранение.


Да, потому что я плохо вижу и у меня нет бесперебойника. А у кого-то орлиное зрение и ноутбук. Но шрифт - плохой пример, ибо программы должны брать его из общесистемных настроек. Возмём другой пример - файлменеджер и режимы "таблица" и "значки". Или галочка "переносить строки" в текстовом редакторе. Или галочка "помнить меня" в веб-интерфейсе почты. Назовите, какой вариант настройки самый правильный и в комментах отзовутся те, кто его не использует, потому что "так блин вообще нихрена не найти"/"нечитабельно"/"неудобно-несекурно".
Вообще, разговоры о том, что может существовать какая-то "наилучшая" настройка, которая "пригодна для использования из коробки", что "программа - такой-же инструмент, как лопата" - это чистой воды вредительство. А за попытки убрать настройки вовсе - надо макать в битум головой. Люди разные, задачи у них разные и устройства у них тоже разные.

Гугл Хром сам скачивает и устанавливает обновления без единого окошка.


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

Соглашусь про настройки. Настройки для того и существуют, чтобы человек мог настраивать программы под себя. К примеру, я очень не люблю, когда браузеры как-то используют интернет в фоне, тайно от меня (хотя у меня и безлимит), когда сохраняют мои пароли. Даже автозаполнение форм меня не очень прельщает. Однако, большинство моих друзей пароли в браузерах хранит, а автообновления не выключает.

Сделали бы уже браузер, который перед запуском надо собирать из исходников, а вместо URL вводить GET-запрос целиком. Куча бы вопросов снялось (это я к тому, что удобную себе программу тоже можно выбирать).

Возможно, Вы неверно поняли мою мысль - я заявил о своём существовании как о части некоего конгломерата пользователей, которым неприятно, что всё происходит без их ведома и которые хотят чувствовать разумный контроль. Вы говорите, что большинству не нужно большинство настроек и забываете про нас. По моему опыту, большинство людей вообще ничего не настраивает кроме картинки рабочего стола. Мне казалось, неплохое решение нашей проблемы в том, чтобы давать пользователю по умолчанию простенькую программу, функционал и настраиваемость которой расширяются подключаемыми модулями.
А по поводу неуместных ограничений, у меня есть великолепный пример:
AWR Microwave Office. Открыта схема. Запущена утилита для изменения параметров схемы на лету бегунками. Если попытаться закрыть главное окно приложения, то появляется надпись со смыслом "Приложение невозможно закрыть, пока открыта утилита Tuner. Сначала закройте её.". Весьма интересно, по какой такой неочевидной причине?
Я уж молчу, что в некоторых программах ReDo можно делать всего один раз после последнего UnDo, а в тех, которые этим не грешат, можно нажать 20 раз UnDo, потом 20 раз ReDo и получить другой результат )

В итоге ответил постом: http://tonsky.livejournal.com/237420.html
Против подключаемых модулей ничего не имею, до тех пор, пока программа без них делает все что нужно (а не как файрфокс).

Посмеялся

(Анонимно)
Некоторые вещи действительно вызывают удивление, но есть немалое количество людей, которые какой-то существующий порядок вещей считают нормой.
Пример: поставить какую нибудь новую железку в Windows (от 95 до 7) - каждый драйвер минуты полторы ставится (куда? зачем?).
В досе (бак-ин-тайм?) - всё махом, в файле config.sys или autoexeс.bat пишешь загрузку драйвера - и всё, поддержка есть. В линухе - там вообще элементарнейше набор PnP устройств в момент старта определяется (приблизительно 1-2 секунды на всё), драйвера сами грузятся исходя из результата чтения биоса, без участия пользователя вообще, хоть каждый раз на новой машине загружайся.
Всё относительно. Посоветую автору попробовать посмотреть другие программы (как сделано там), или другие версии тех, которые он использовал, возможно найдётся оптимальный вариант.
Про себя так напишу: мой уровень взаимодействия с ЭВМ - системный программист. Однако после установки офиса никогда не лезу в настройки (а что там мне надо?). После установки (даже для себя) новой ОС только меняю тему (хотя кому-то больше нравятся рюшки) на классическую. Сайты, которые для просмотра содержимого требуют регистрации для меня просто вычёркиваются, хотя есть, конечно, исключения. А мои знакомые, и даже мой отец - регистрации не боятся.
Любое ПО имеет недостатки - это очевидно, но степень значимости недостатков - разная, и потуги авторов на их устранение - тоже разные. Тот же WinAMP стал из коробки понимать lossless форматы; для просмотра видео энтузиасты выпускают наборы кодеков, тот же k-lite, раньше приходилось с танцем и бубном ставить чтобы смотреть DVD или avi. Интернет страницы медленно но верно переходят к unicode форматам, проблем с именами (русские буквы и спецсимволы) становится меньше. На почтовую службу mail.yandex.ru стало возможных заходить чем-то отличным от internet explorer, раньше то письма не видились, то не отвечались, то не отправлялись.

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

Достаточно спорно, но интересно :)

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

  • 1
?

Log in

No account? Create an account