vit_r: default (vit_r)
[personal profile] vit_r
По поводу прошлого поста хотелось бы отметить один интересный феномен.

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

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

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

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

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

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

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

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

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

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

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

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

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

Date: 2014-12-25 08:26 pm (UTC)
From: [identity profile] qehgt.livejournal.com
Ну, их можно понять - описанные симптомы очень похожи на типичные "глюки" при работе с плавающей точкой (ой, я обнаружил, что 0.1 + 0.2 не равно 0.3, это баг!). И если для какого-нибудь софта с символьными вычислениями это действительно будет баг, то для всего остального ПО - это обычное поведение, и называть это багом - это показывать пробелы с своём профильном образовании.

Оттого и такая реакция.

Date: 2014-12-25 08:48 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Именно далеко идущие выводы на основе похожести нескольких признаков и демонстрируют зашоренность мышления.

Насчёт же плавающей точки, я сильно сомневаюсь, что есть варианты, когда добавление целочисленного нуля может чем-то помочь.
Edited Date: 2014-12-25 08:48 pm (UTC)

Date: 2014-12-25 09:23 pm (UTC)
From: [identity profile] qehgt.livejournal.com
>что есть варианты, когда добавление целочисленного нуля может чем-то помочь.
Что значит "помочь"? Если здесь подразумевается "изменить поведение", то это ж наблюдаемый факт. Это происходит и этому должно быть какое-то объяснение (глючил же калькулятор и Excel в Windows, оказался глюк в Intel CPU).

И здесь будет какое-то объяснение. Например, "добавление нуля приводит к изменению парсинга строки, и порядок действий получается не "(x + (y + z))", а "((x + y) + z), что приводит к другому результату". Невозможный результат с точки зрения математики.

Date: 2014-12-25 09:40 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Это опять придумывание дополнительных условий к "0.1 + 0.2"

Date: 2014-12-25 09:57 pm (UTC)
From: [identity profile] qehgt.livejournal.com
в прошлом посте однозначно не было сказано, что вся арифметика там целочисленная. Если она целочисленная, то объяснения, почему добавление нуля меняет поведение - у меня нет.

Date: 2014-12-26 06:32 pm (UTC)
From: [identity profile] vit-r.livejournal.com
В данном случае баг только для целочисленных значений. Если сделать их вещественными, всё работает.

Date: 2014-12-26 05:55 pm (UTC)
From: (Anonymous)
Bот, да. В операциях с вещественными числами "равно" вообще не допустимо. Нужно вводить погрешность, эпсилон, и сранивать разность с этим эпсилоном. Т.е. А - B < epsilon
Но , молодежь таких тонкостей не знает.

Date: 2014-12-26 06:30 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Тут, вообще-то, темы для профессионалов. Смысла радостно сообщать то, что известно из детского сада, тут не много.

К тому же, для определённого класса задач вполне можно использовать равенство. Потому что, опять же, не вещественные числа, а их двоичное представление.
(deleted comment)

Date: 2014-12-26 07:13 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Бан потому, что мне некогда вести дурацкие разговоры.Тем более, отвечать на личные наезды.

Date: 2014-12-26 09:23 am (UTC)
From: [identity profile] zorag-ringael.livejournal.com
> что только дураку может быть не понятно, почему два плюс два не равно четырём.

Не, ну 2+2 конечно, чисто теоретически, может быть не равно 4м, но в этом случае +0 тоже ничего изменит. Ну плюс, зачем такое даже чисто теоретически применять в базах данных не понятно.

А эффект еще от менталитета зависит. Славяне например любят критиковать, так что в их случае дискуссия бы просто перешла в русло "ну там и бажина на бажине"

Date: 2014-12-26 09:34 am (UTC)
From: [identity profile] vit-r.livejournal.com
Не славяне, а выходцы из СССР.

Date: 2014-12-26 12:13 pm (UTC)
From: [identity profile] anonim-legion.livejournal.com
Сопоставить вашу реальную личность и ЖЖ-аккаунт нереально. Вы можете выложить название продукта и обезличенный код. Тогда разговор будет идти более предметно.

А то разговор начинается с "ваша математика - фуфло". Эээ, не "наша математика" фуфло, а те погонщики рабов, под руководством которых был написан кривой софт. И написан как раз под лозунгами вроде "мне не надо, чтобы было красиво и правильно, мне надо, чтобы клиент был удовлетворен (- девочка, ты отличница? - я удовлетворительница!)".

Да, клиент оказался доволен, потому что по счастливой случайности множество его потребностей совпало с тем, что предлагал продукт на момент покупки.

А потом появились новые пользователи, с другими кейсами, и - внезапно, обнаружились баги.

Найденный вами баг очень похож на ошибки типизации в PHP или яваскрипте. Дополню - любители математики молятся на системы типов, в кондовом же бухгалтерском SQL типы с 92 года не сильно поменялись. Переименовать столбец, чтобы имя соотвествовало содержимому? Find Usages? Скопировать произвольную запись вместе с дочерними, поменяв только ключи и указанные поля, то есть сделать клон? Не бывает, в СУБД до сих пор средние века.

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

Date: 2014-12-26 06:26 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Дофига народа, знающего мою реальную личность, читают этот блог. Среди них достаточно закомплексованных настолько, что мечтают сделать мне какую-нибудь гадость IRL.

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

Насчёт академичности говорить сложно, после того, как следующее выдаёт единицу:
SELECT CASE WHEN CAST( 'NaN' AS float) > CAST ('Infinity' AS float) THEN 1 ELSE 0 END ;

Date: 2014-12-26 05:33 pm (UTC)
From: (Anonymous)
Конечно, начинать поиск решения с бана- это очень конструктивно, да. И да, только не говорите что это Pervasive SQL

Date: 2014-12-26 06:08 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Не надо мечтать. Никто не ищет решений. Текст чисто философский. То, что мало кто может оторваться от кода и понять систему, не мои проблемы.

Идеальная программа

Date: 2014-12-26 07:30 pm (UTC)
From: (Anonymous)
Вы все правильно пишете — программа должна верно для себя расшифровывать любые данные от юзера. Идеальная программа должна, да.

Но разве мы можем сделать такой софт, который расшифрует все-все варианты "неправильного" человеческого ввода и каждый раз будет понимать их корректно? Как это организовать без многолетнего сбора и анализа статистики этих вариантов в каждом программном продукте?

Мне кажется, это малореально в современном мире.

Profile

vit_r: default (Default)
vit_r

January 2026

S M T W T F S
    12 3
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 8th, 2026 04:53 am
Powered by Dreamwidth Studios