Ошибки
Главная беда этой нашей айтишечки — сообщения об ошибках, не связанные с их устранением. Примеров можно найти миллион, но вот вам один.
Собираю одну фигню в докере, и команда apt-get update
падает с сообщением, что
репозиторий не подписан:
The repository 'http://archive.ubuntu.com/ubuntu focal InRelease' is not signed.
При этом на другом ноуте все собирается как надо.
Оказалось, что это мулька самого Докера, и лечится она командой prune:
docker image prune -f
docker container prune -f
Очевидно, без гугла и SO эту проблему не решить в принципе.
В современной айтишке много абстракций, и каждая из них не знает о другой. Отсюда эти уродские сообщения: абстракция А считает что-то неподписанным, потому что в Б нет места. А не находит файлы, потому что они не смонтированы в Б. А валится, потому что в Б другая локаль или кодировка по умлочанию.
Задача хорошего программиста в том, чтобы давать понятные сообщения об
ошибках. Наверное, вас тоже бесило, когда Java говорит: port is already in
use
. Блин, какой порт? У меня их десять в проекте, тяжело добавить цифру в
сообщение?
Или тот же Вим. По всему миру люди страдают, не знают как из него выйти. Вопрос на SO набрал миллион просмотров и растет дальше. И что делают разработчики вима? Вместо того, чтобы добавить бар с действиями как в Nano, объясняют, что пользователи тупые.
Напоминает мост в Питере со знаком “Газель не проедет”, где разбились сто Газелей. Вместо того, чтобы порвать на тряпки мэра и начальника ГИБДД, ставят знаки и постят картинки в Контакте.
То же самое происходит у нас. Вместо понятного сообщения мы ждем, что его предоставит вышестоящий слой. Но это бессмысленно: не сделаем мы — не сделает никто.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter
John, 19th Oct 2023, link
В последних версиях Python об этом задумались и стали улучшать сообщения об ошибках.
Вспомнился забавный пример, когда разработчикам плевать на удобство пользователей своего продукта. Есть такая модная современная программа Vector для обработки логов. Написана конечно же на Rust, но имеет свой несколько безумный DSL. И там есть regexp, и вот когда происходит ошибка при разборе регулярки, этот Vector выплёвывает километровую ошибку откуда-то из своих растовых кишок, в которой нет ни слова о том, обо что и в какой строке текста споткнулась регулярка, но зато есть строка кода и столбец в исходниках на Rust. Очень полезно.
Особенно смешно тут то, что в самом Rust в компиляторе очень подробные и понятные сообщения об ошибках. :)