Category: происшествия

BIO_reset()



Несмотря на приставку "BIO", это не про биологию, а на 3/4 про программирование, и на 1/4 про жизнь. BIO_reset() --- маленькая служебная процедура, используемая почти в любой программе, имеющей дело с шифрованием. Она командует подсистеме шифрования, что её надо прекратить обрабатывать указанный поток данных, вернуться к его началу, и подготовиться к его обработке, как будто ничего раньше и не было. "Кнопка перемотки на начало", в общем. И её использование не вызывает ни малейших проблем даже для начинающего программиста --- один оператор BIO_reset(X), и можно начинать делать с X какие-то более интересные вещи.

Когда начинающий программист становится настолько опытным, что вместо бессистемного гугления начинает читать документацию от корки до корки, его поджидает открытие: при всей своей внешней простоте, BIO_reset() в редких случаях может не суметь "перемотать", и тогда она сообщит об отказе. Если не проверить наличие отказа, и после него как ни в чём не бывало продолжить работу, то программа в лучшем случае рухнет, а в худшем молча выдаст какую-нибудь чушь, которая окажется миной замедленного действия. Программист говорит "упс", после чего приписывает к BIO_reset() проверку на отказ, и занудную последовательность действий для выпутывания из этой ситуации с наименьшими потерями.

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

Проходит ещё пол-жизни. Тот начинающий я, и тот опытный я, и тот эксперт, только-только пришедший в проект --- они уже в далёком прошлом. Вы представляете, что такое 10 лет в одном программистском проекте, бить лбом одну стену, хоть и в разных её местах? А 15? А ещё побольше? Хо-хо, я тоже когда-то думал, что представляю заранее. Мы уже давно не работаем над проектом, мы живём в нём. Коллеги успевают жениться, развестить, вырастить детей, пережить кто 9/11, а кто три госпереворота в Бишкеке. Кто-то вложился в cтуденческую шарагу под названием, как её, Facebook, но потом решил, что облажался, и убежал оттуда обратно в кэш. В честь кого-то назвали самый лучший сорт марихуаны. Ещё они успевают попасть насмерть под машину, словить рак, ослепнуть... в общем, продемонстрировать не только то, что "человек смертен внезапно", это полбеды, но человек внезапно теряет контроль над "своим" проектом. А вот это уже совсем плохо, ведь из всей моей работы только один этот проект и останется хоть как-то в памяти человечества. Цедерквист --- это который "The Cederqvist", а вот Иван Михайлов --- это который SPARQL в Virtuoso. Будет ведь обидно, если после меня проект начнут курочить менее аккуратно, он начнёт терять нынешнюю красоту и прочность, и обнаружится, что такого риска "попадания в менее заботливые руки" я не предусмотрел.

И с этой подспудной мыслью о рисках будущих десятилетий я вкорячиваю некрасивые нудные проверки после шести BIO_reset()-ов, ещё ни разу не сбойнувших у миллионов пользователей с 2004-го года.