Я в интернете

РСС    Джейсон-фид

Есть автоматические трансляции в Тумблер и Же-же. Если не работает, напишите мне: ilyabirman@ilyabirman.ru.

Избранное

В эпоху ИИ самое важное — чего-то хотеть

Все обсуждают, кого заменит ИИ, какие специалисты станут ненужными.

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

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

Увольте программистов, которые разлогинивают ваших пользователей

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

На днях думал прокатиться на самокате. Зашёл в приложение Вуш, а оно меня забыло:

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

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

Или вот зашёл я в Саундклауд послушать музыку — а туда я захожу почти каждый день, и у меня даже платный акаунт — а Саундклауд пишет какую-то ахинею:

Вы, говорит, разлогинились. Идите теперь в телефон! Что за кретин это написал? Во-первых, я не разлогинивался из Саундклауда, скорее всего, вообще ни одного раза в жизни, потому что нет причин это делать. Только сам дебил-Саундклауд мог меня разлогинить. Во-вторых, какая вообще связь с телефоном? В таком контексте ощущается как сознательное издевательство. Даже если предположить, что я зачем-нибудь разлогинился сам, нафига мне идти в телефон, что там ждёт свежеразлогинившегося меня?

Увольте программистов, которые разлогинивают ваших пользователей. Вам будут вешать на уши лапшу про безопасность, но это бред сивой кобылы. Пусть объяснят, как потерянные продажи повышают безопасность (но уже в поиске другой работы).

Не думаю, что меня хоть раз разлогинивало Яндекс.Такси или Озон. Да даже Альфа и Тиньков меня не разлогинивают никогда, и ничего! Как-нибудь уж самокаты и музыка могут снизить свои требования к «безопасности» хотя бы до банковского уровня?

Рациональное использование площади экрана

 5 мин

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

Квиктайм при просмотре видео рисует интерфейс перемотки лишь на небольшую часть ширины экрана:

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

Налоговая в выбиралке валюты не даёт увидеть, какую валюту я выбираю:

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

Аналогично Гугль-фонтс прячет настройку шрифта вот в такое меню с прокруткой:

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

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

А вот обратные примеры. У Спотифая не вместилось «С возвращением» и три кнопки на большой экран:

Даже если предположить, что вы не хотите «отвлекать» меня от входа ничем интересным, ну уместить-то можно было это всё хотя бы? Хотя, конечно, я был бы больше мотивирован войти, если бы чувствовал, что внутри меня что-то ждёт хорошее.

Яндекс-музыка туда же:

Нафига прятать что-то там в кнопку «Настроить», у вас есть целый экран, я тут могу унастраиваться без лишних кликов!

В дефолтном дизайне Айтюнса на огромном 32″ 6К мониторе в высоту экрана влезает три трека! Три:

Тут я затрудняюсь дать комментарий.

Не только в музыкальных программах это. Вот Гугль-докс не может уместить названия файлов:

Ну какой идиот, а? Ну вон же полно место по бокам, и это при моей любимой ширине окна 1024 даже1 Нахрена, нахрена ты обрезал названия?

Кинопоиск спрятал две кнопки («Неинтересно» и «Просмотрен») в многоточие:

Просто космический идиот. Ещё и нарисовал подсказку, которая заняла столько же места, сколько заняли бы обе кнопки без подсказки! Да у тебя целый экран вот посвящён моим отношениям с этим фильмом. Что может быть важнее, чем показать кнопки настройки этих отношений? Для чего ты сэкономил это место?

А вот классический Лончпад Эпла:

У него много проблем, но сама идея прекрасна: для выбора приложения используется весь экран. Целиться в иконки одно удовольствие. Бывает, захватил откуда-то файл одной рукой, тащишь его на место нужной программы, в это время другой жмёшь шорткат Лончпада и бросаешь файл на программу, потому что она как раз оказывается под курсором где надо.

А сейчас что? Только вот так:

Всему тесно, и чуть что возникает прокрутка.

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

Случайное

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

Однако когда говорят, что какие-то процессы фундаментально случайны, я не могу это принять. Вот эта штука про коллапс волновой функции, что типа у нас есть только распределение вероятностей того, где будет зарегистрирована частица, а вот где она фактически зарегистрируется — предсказать принципиально невозможно — ну это же чушь. Это всё равно, что сказать «пути Господни неисповедимы», просто наукообразным языком.

На это возражают, мол, да, это сложно понять, но искривление пространства-времени тоже сложно понять, типа у нас интуиция по-другому развивалась. Но это несравнимо разные вещи. Искривление пространства-времени сложно понять, — и я его действительно не понимаю, — но мне никто не запрещает попытаться его понять: понимай сколько влезет, вот тебе всевозможные примеры, аналогии, формулы. А с этой случайностью тебе как бы говорят, что нет способа это понять, «просто поверь» или там «заткнись и считай», кто какие слова выбирает.

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

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

Насчёт Дэвида Дойча

Есть физик и философ Дэвид Дойч. Давно знаю о его существовании, слушал подкасты и эфиры с его участием; упоминания и обсуждения его взглядов. Было ощущение, что интересный человек. Наконец я добрался до книг. Начал со второй — «Начало бесконечности» (2011).

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

Сейчас я уже читаю текстовую версию и делаю заметки, так что, возможно, когда-нибудь будет и выписка, но вероятно, какие-то отдельные вещи я вам принесу и до того. А в аудиоверсии я взялся слушать предыдущую книгу, «Структура реальности» (1997).

Самое впечатляющее у Дойча — необыкновенная стройность и глубина мысли. Стройность может ощущаться как занудство: он не спешит с выводами, пока не рассмотрит все составляющие его компоненты. Само это меня очень вдохновляет: отчасти то, как он рассуждает — это ответ на мой вопрос о ясности мышления. Глубина проявляется в том, что ты начинаешь видеть взаимосвязь огромного числа явлений, которые до этого казались независимыми.

Одно из важнейших понятий у Дойча — это «хорошее объяснение». Он сравнивает разные способы того, как наука объясняет те или иные явления, и даёт критерий хорошего объяснения: его сложно изменить. На его примерах видно, что это работает, но нужно какое-то время, чтобы уяснить, почему именно трудноизменяемость делает объяснение хорошим. Но когда это понимание формируется, ты видишь эту связь качества и трудноизменяемости везде! Если дизайнер принёс дизайн, который работает, но любой элемент можно переставить куда-то ещё без потерь, такой дизайн ощущается слабым. Он не выглядит продуманным; нет ощущения, что каждый элемент на своём месте; на вопрос «почему именно так» нет ответа. Теперь я понимаю: дизайн слишком легко изменить, а значит он слишком слабо связан с задачей; он неточно на неё отвечает; она слабо проявлена в нём.

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

Уже в «Структуре реальности» он рассказывает, почему из двухщелевого эксперимента следует сделать вывод о существовании мультивселенной. Содержательная сторона мне пока недоступна — это высшая физика; но интересно именно, как устроено само рассуждение; как он последовательно разбирает другие интерпретации, подсвечивает, почему они являются «плохими объяснениями». Не хочу вас случайно напугать; книга не про физику, она как бы про всё вообще, и непонимание нюансов физики не помешает насладиться.

Половина того, что у него написано вызывало у меня реакцию «офигеть, вот это поворот!», а вторая — «я всегда именно так это и чувствовал, но никогда бы не смог так чётко изложить!» Как вы понимаете, и то и то очень приятно.

Если интерфейс плохой, дело не в недостатке идей

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

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

Архитектор-дизайнер с «продуктовым подходом»

Возьмём нормального архитектора-дизайнера. Он понимает, как работают материалы, свет, вентиляция, электрика. Разбирается в привычках и укладах быта людей, простанственных особенностях работы разных предприятий. Умеет подбирать мебель и декор. Знает, как устроен сам процесс стройки: в состоянии поддержать разговор с любым специалистом, спланировать порядок покупки обоев, плитки и сантехники так, чтобы всё было вовремя и не портилось на стройке. Понятное дело, что он разбирается в программах проектирования. Когда к нему приходят с задачей, он делает, потому что знает, как — он этому учился много лет, а если и не знает какую-то деталь, то знает, у кого из коллег спросить или в какой книжке прочитать.

А я вот представил архитектора-дизайнера с «продуктовым подходом». Он неспособен взять и спроектировать удобное и функциональное помещение, отвечающее заданным сценариями использования. Когда ему ставят задачу сделать кафе, он идёт шарахаться по району («проводить исследование»). Спрашивает у прохожих, какие им нравятся цвета, куда они девают верхнюю одежду, когда входят в помещение зимой, и всколькером они предпочитают сидеть за столом. Стоит на тротуаре со счётчиком и считает проходимость места. Заходит в Макдональдс и срисовывает расположение столов и стульев — всё-таки там не дураки сидят и наверняка сделали оптимально.

Нормальный архитектор-дизайнер смотрит на это и думает: почему он занимается всей этой ерундой вместо дела? Но архитектор-дизайнер с «продуктовым подходом» знает, что всё делает правильно!

Тосты загораживают интерфейс

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

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

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

Сортировка и фильтрация

Заметил, что многие дизайнеры интерфейса не отличают сортировку и фильтрацию. Говорят: «тут можно отсортировать квартиры по конкретному району». Иногда это просто оговорка и на понимание не влияет. Но в моей жизни такие разговоры чаще всего случаются как раз в обсуждении деталей поведения сложных интерфейсов. За неверным выбором слов часто скрывается и недопонимание сути, а как следствие — фиговое проектирование.

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

Фильтрация — это когда у вас есть массив данных, и вы выбираете, какую его часть показать: только у моря и с завтраком, с массой в пределах от 0,5 до 3 масс Солнца или только содержащие подстроку «жопа».

Если у вас 1183 записи, то как их ни сортируй, их останется 1183, а при фильтрации будет показана только их часть.

Значения какого-то поля у многих записей могут совпадать, скажем, у сотни треков в музыкальной коллекции может быть один и тот же исполнитель. Тогда сортировка может быть вложенной, например треки можно отсортировать по названию исполнителя; внутри исполнителя — по дате релиза; внутри релиза — по произвольному порядковому номеру трека в релизе. Дать пользователю управлять такими нюансами в интерфейсе — нетривиальная задача.

Ещё замечу, что когда мы говорим «сортировать по тому-то», мы можем иметь в виду как само поле, которое используется для упорядочивания (по имени), так и принцип этого упорядочивания (по убыванию, по алфавиту). Мы можем брать даже какую-то производную поля и уже её упорядочивать, например, можно отсортировать студентов по убыванию длины имени или города по возрастанию населения.

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

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

Отсортировать по району можно: сначала показать записи из Аннина, потом из Бутова, потом из Внукова. Придётся ещё решить, как сортировать записи уже внутри района, ведь их явно будет много в каждом. Но вот отсортировать «по конкретному району» невозможно: это всё равно что отсортировать всех по конкретному росту 172 см.

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

«Скелет» как состояние компонента и экрана

Столкнулся с дизайн-системой, где у всех компонентов отрисованы состояния «скелет» — это типа как выглядит элемент, пока он не загрузился. Дизайнеры вообще говорили «скелетон», но скелетон — это такой бобслей для одиночек, а skeleton — это скелет. С этим состоянием есть проблема, сейчас объясню.

Пока экран приложения загружается, вместо индикаторов загрузки хорошо показывать скелет экрана. Тогда вместо того, чтобы привлекать внимание к тормозам, мы создаём у пользователя впечатление, что экран почти загрузился. Секундные задержки перестают ощущаться, человек успевает сориентироваться на экране.

Так что же не так с состоянием компонента «скелет»? То, что скелет — это состояние экрана целиком, а не отдельного компонента. (Если уж на то пошло, у компонента может быть состояние «кость», а не «скелет».)

Во-первых, рисование отдельных скелетных состояний компонентов провоцирует дизайнеров на рисование излишне детализированных скелетов экранов. Вот Вконтакте например:

Зачем столько мусора? Чтобы показать, что экран ещё грузится, достаточно такого:

Да и ещё спокойнее можно.

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

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

Ранее Ctrl + ↓