усы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 его отличается, есть ли смысл их обе читать?

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

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

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

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

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

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

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

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

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

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

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


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

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


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


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

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

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


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

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


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

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

Посмеялся

(Анонимно)
Некоторые вещи действительно вызывают удивление, но есть немалое количество людей, которые какой-то существующий порядок вещей считают нормой.
Пример: поставить какую нибудь новую железку в 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