December 25th, 2014

vit_r

Про ёжика в тумане, зазнайство, языки программирования и вериги

По поводу прошлого поста хотелось бы отметить один интересный феномен.

В принципе, то, в чём я участвую, называется миграцией data warehouse. При этом, естественным образом получается достаточно жестокий сравнительный тест как двух вариантов скриптов клиента, так и самих используемых баз. Данных и кода так много, что сама собой начинает лезть всякая чертовщина.

Мой любимый пример - когда один и тот же код на одних и тех же данных каждый четвёртый раз выдаёт семь ошибочных строк. (Семь из семидесяти тысяч и ошибочным значением в одном столбце из двух десятков.)

В прошлом посте приведён банальный пример. Грубо говоря, пользователь пишет
2 + 2 = 4
а база данных говорит, что не равно.

Зато, с тем, что
2 + 2 + 0 = 4
база данных соглашается.

Эффект срабатывает для нескольких строк из сотен тысяч, но расписывать подробности я не буду. Пост был не про конкретный баг, а про применимость математических абстракций.

Феномен же, который хочу отметить здесь, связан с поведением так называемых профессионалов. Между прочим, достаточно типичный феномен.

Толпа народа, вдруг, начала не просто строить теории, но сразу перешла в нападение, объясняя, что только дураку может быть не понятно, почему два плюс два не равно четырём.

То есть, первым предположением идёт то, что дурак тот, кто сообщил об ошибке.

Вторым, что это не ошибка, а такое интересное свойство системы, которое отрицает математику, но при этом совершенно правильное.

Третьим рубежом защиты выступают некоторые дополнительные условия, которые теоретически позволяют сдвинуть ошибку в зону второго случая. При этом, исходную задачу можно почти полностью погрести под горой свежепредуманных дополнений.

Где-то там, в конце списка болтается банальный баг в софте. То есть, ошибка в коде базы данных теоретически не отрицается, но практически находится за горизонтом рассматриваемых причин. Собственная компетенция под сомнение не ставится никогда.

Почему то, что лезет сейчас, не обнаружили предыдущие поколения? Вот именно потому, что порядок поиска проблем инвертирован к правильному.

Да, чтобы сразу не влезать в споры по первому пункту. Пользователь может быть болваном, но система должна или соглашаться с тем, что два плюс два равны четырём, или говорить явно и чётко, что дополнительные условия не дают правильно провести сравнение.