В проектировании пользовательского интерфейса и программного обеспечения [1] принцип наименьшего удивления ( POLA ), также известный как принцип наименьшего удивления , [a] предполагает, что компонент системы должен вести себя так, как ожидает от него большинство пользователей. вести себя и, следовательно, не удивлять и не удивлять пользователей. Следующее является следствием этого принципа: «Если необходимая функция имеет высокий фактор удивления, может потребоваться ее перепроектирование». [4]
Этот принцип используется в отношении взаимодействия с компьютером, по крайней мере, с 1970-х годов. [5] Хотя этот принцип впервые был формализован в области компьютерных технологий, он может широко применяться и в других областях. Например, в письменном виде перекрестная ссылка на другую часть работы или гиперссылка должна быть сформулирована так, чтобы точно сообщать читателю, чего ожидать.
Первая ссылка на «Закон наименьшего удивления» появилась в бюллетене PL/I в 1967 году (PL/I — язык программирования, выпущенный IBM в 1966 году). [6] К концу 1960-х годов PL/I стал печально известен нарушением закона, [7] например, потому, что из-за правил точного преобразования PL/I, [8] выражение 1/3 + 25
привело к 5,33333333333, а не к ожидаемому 25,33333333333. [9] [10] Полностью закон появился в 1972 году: [11]
Для тех частей системы, которые не могут быть адаптированы к особенностям пользователя, разработчики языка системного программирования должны подчиняться «Закону наименьшего удивления». Короче говоря, этот закон гласит, что каждая конструкция в системе должна вести себя точно так, как предполагает ее синтаксис. По возможности следует соблюдать широко принятые конвенции, а исключения из ранее установленных правил языка должны быть минимальными.
Хрестоматийная формулировка такова : «Люди — часть системы. Дизайн должен соответствовать опыту, ожиданиям и ментальным моделям пользователя ». [12]
Этот принцип направлен на использование существующих знаний пользователей для минимизации кривой обучения , например, путем разработки интерфейсов, которые в значительной степени заимствованы из «функционально подобных или аналогичных программ, с которыми ваши пользователи, вероятно, знакомы». [2] Ожидания пользователей в этом отношении могут быть тесно связаны с конкретной вычислительной платформой или традицией . Например, ожидается, что программы командной строки Unix будут следовать определенным соглашениям в отношении переключателей [2] , а виджеты программ Microsoft Windows должны следовать определенным соглашениям в отношении сочетаний клавиш . [13] В более абстрактных настройках, таких как API , еще одним примером является ожидание того, что имена функций или методов интуитивно соответствуют их поведению. [14] Эта практика также предполагает применение разумных значений по умолчанию . [4]
Когда два элемента интерфейса конфликтуют или неоднозначны, поведение должно быть таким, которое меньше всего удивит пользователя ; в частности, программисту следует попытаться придумать поведение, которое меньше всего удивит того, кто использует программу, а не то поведение, которое является естественным, зная внутреннюю работу программы. [4]
Выбор «наименее удивительного» поведения может зависеть от ожидаемой аудитории (например, конечных пользователей , программистов или системных администраторов ). [2]
Веб-сайты, предлагающие сочетания клавиш, часто позволяют нажать ?, чтобы просмотреть доступные сочетания клавиш. Примеры включают Gmail , [15] YouTube , [16] и Jira . [17]
В операционных системах Windows и некоторых средах рабочего стола для Linux функциональная клавиша обычно открывает справочную программу для приложения . Аналогичное сочетание клавиш в macOS — + + . Пользователи ожидают появления окна справки или контекстного меню при нажатии обычных клавиш быстрого доступа к справке. Программное обеспечение, которое вместо этого использует этот ярлык для другой функции, скорее всего, вызовет удивление, если не появится помощь. [18]F1 ⌘ Command⇧ Shift/
Стандартная библиотека языка программирования обычно предоставляет функцию, аналогичную псевдокоду , которая создает машиночитаемое целое число из строки человекочитаемых цифр . Обычно система счисления по умолчанию равна 10, что означает, что строка интерпретируется как десятичная (основание 10). Эта функция обычно поддерживает другие системы счисления, например двоичную (базовая 2) и восьмеричную (базовую 8), но только если они указаны явно. В отличие от этого соглашения, в JavaScript изначально по умолчанию использовалось основание 8 для строк, начинающихся с «0», что приводило к путанице разработчиков и ошибкам программного обеспечения . [19] Это не поощрялось в ECMAScript 3 и было исключено в ECMAScript 5. [20] ParseInteger(string, radix)
Некоторые сообщества разработчиков, такие как FreeBSD [21], используют POLA как одно из руководящих принципов того, что делает пользовательский опыт неудивительным.
Может ли новая функция вызывать сильное удивление? Если функция случайно применяется пользователем неправильно и приводит к непредсказуемому результату, эта функция имеет высокий фактор удивления и, следовательно, нежелательна. Если необходимая функция имеет высокий коэффициент удивления, может потребоваться ее перепроектирование.
Как однажды заметил мне мой друг (это, должно быть, где-то в конце 1960-х годов), что бы вы ни говорили об этом, есть одна вещь, которой PL/I совершенно точно не является, и это «язык наименьшего удивления».
PL/I здесь является главным плохим примером; он усыпан конструкциями, которые не делают то, что думает программист, как показано на примере ФИКСИРОВАННОГО разделения.
Если входная строка начинается с «0» (ноль), предполагается, что система счисления равна 8 (восьмеричному) или 10 (десятичному). Выбор именно системы счисления зависит от реализации. ECMAScript 5 поясняет, что следует использовать 10 (десятичное число), но пока не все браузеры поддерживают это.