[Перевод] Программист никому не должен доверять, и даже самому себе
Программисты должны быть параноиками.
«Я дважды проверил код»
«Код проходит все тесты»
«Ревьюер одобрил мой код»
«Так ли корректен мой код?»
Писать код корректно трудно, а подтвердить корректность кода невозможно.
Вот некоторые из причин этого:
Всеобщность: даже если код правильно вёл себя один раз, будет ли он вести себя так во всех случаях на всех машинах и всегда?
Ложное прохождение теста: непрохождение тестов указывает на наличие багов, но прохождение текстов не гарантирует их отсутствия.
Отсутствие определённости: можно написать формальное доказательство корректности кода, но теперь нужно задаться вопросом, корректно ли доказательство. Потребуется доказать доказательство. Эта цепочка проверки проверок никогда не закончится.
Безумно было бы стремиться к определённости корректности кода. Баг может скрываться в зависимости, которую вы никогда не найдёте. Однако отчаиваться не стоит, всё равно можно снизить вероятность багов, расширяя своё понимание и внимательность. Читать дальше →