Когда редактор вредить не должен
Знаете, какой у меня критерий выбора редактора? Не подсветка синтаксиса, не плагины и не интеграция с Git. А то, сможет ли он вернуть мне текст, который я случайно удалил три месяца назад.
Что случилось с persistent undo
Дэвид Чиснелл — компьютерный учёный — написал в Mastodon историю, от которой у меня мурашки по коже. Пользуюсь Vim (текстовый редактор, популярный среди программистов с 1991 года) с 2000 года. Написал пять книг, диссертацию, пару десятков статей. Мои высшие мозговые функции давно не задействуются, когда я набираю базовые команды — они просто происходят. Но зато в документах, написанных в чём-то другом, случайно всплывает :w посреди текста.
Дальше он объясняет, почему это важно. Persistent undo — это функция, сохраняющая историю изменений файла между сессиями. Она редко нужна, но когда нужна — незаменима.
Блин, удалил что-то важное на прошлой неделе, до перезагрузки. Что это было? Отменяю изменения, пока не найду, копирую, вставляю.
Или чаще: работало, я привёл в порядок перед коммитом — и перестало работать. Что я сделал?
Vim сохраняет историю 20 лет, через обновления версий. Я даже не думаю об этом — это часть Первого закона Раскина: программа не должна вредить данным пользователя.
NEOVIM: ДАННЫЕ ПОЛЬЗОВАТЕЛЯ
═══════════════════════════
┌──────────┐
│ undo │ ← твоя история
│ history │ изменений
└────┬─────┘
│ detected
▼
┌──────────────┐
│ DELETED │ ← спасибо,
│ (lol) │ форк!
└──────────────┘
Почему это было проблемой
А теперь следите за руками. NeoVim — современный форк редактора Vim — при установке заметил старый файл undo и удалил его. Без предупреждения. Все данные — в мусорку.
Чиснелл открыл файл в обычном Vim — история исчезла. Открыл в NeoVim — история исчезла. Поднял issue — ответ разработчиков: формат persistent undo «нестабилен», пользователи не должны рассчитывать на сохранность данных в функции под названием… persistent undo.
Это не баг — это философия. NeoVim мог использовать другое имя для файлов undo. Мог мигрировать старый формат. Мог хотя бы предупредить. Вместо этого — удалили и сказали «ну, форк же».
КОМПЬЮТЕР И ДАННЫЕ ПОЛЬЗОВАТЕЛЯ ════════════════════════════════ ┌──────────────────────┐ │ хранить историю │ ├──────────────────────┤ │ предупреждать │ ├──────────────────────┤ │ не ломать работу │ └──────────────────────┘
Почему это важно
Мне нравится этот пост, потому что он напоминает о трёх законах Джефа Раскина (создателя Macintosh и Canon Cat) из книги «The Humane Interface».
Компьютер не должен вредить вашей работе.
Компьютер не должен тратить ваше время.
Интерфейс человечен, если отвечает человеческим потребностям и учитывает человеческие слабости.
Книге — 25 лет. Законам — столько же. А мы до сих пор спорим, должен ли софт сохранять пользовательские данные.
Software, который относится к вашим данным как к расходному материалу — это не баг, а выбор. И пользователи это запоминают.
Выводы
- Сохранность пользовательских данных важнее удобства релизной политики.
- Если функция называется persistent undo, она не должна уничтожать историю.
- Человечный софт не ломает работу и не перекладывает риск на пользователя.
Ссылки
- On caring for user data: NeoVim caused Vim undo files to be deleted — статья об удалении Vim undo-файлов в NeoVim
Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.