У первой статьи («Реальность существует и это надо учитывать») были очень интересные и содержательные комментарии, среди которых были озвучены идеи о необходимости примеров. С одной стороны это правильно, потому что на примерах можно вырабатывать практические навыки. С другой же, примеры могут создать впечатление, что речь только о том что совпадает с примерами.
Грубо говоря, если сказать «какой‑нибудь лесной хищник, например, медведь», то есть риск того, что это поймут как «именно и только медведь»
Но без примеров и правда нельзя, поэтому — поехали.
Парадигма UNITS
У величин должны быть свойства, указывающие на их физический смысл
У величин должна быть размерность, соответствующая их физическому смыслу
Свойства и размерности величин должны соответствовать физическому смыслу проводимого расчёта
Числовое значение величин должно соответствовать их физическому смыслу в контексте выполняемого расчёта
У оператора должна быть возможность проигнорировать любые несовпадения и сознательно выполнить расчёт, не имеющий физического смысла
... в примерах
1. У величин должны быть свойства, указывающие на их физический смысл
Это тот самый пример, который я упомянул в первой статье и на который у меня затребовали подробности.
Итак, есть разные методики измерения мощности двигателей внутреннего сгорания, дающие разный результат на одном и том же двигателе.
Почти 20 лет назад европейские представители Honda сделали вот такое объявление
«Начиная с 2007 года, технические мощностные характеристики двигателей общего назначения Honda будут рассчитываться в соответствии с SAE J1349 по „чистой“ мощности. В этих расчетах изменен способ измерения мощности двигателя, что приведет к смене опубликованных в 2006 году значений мощностей двигателей. „Чистая“ мощность двигателя рассчитывается с установленным воздушным фильтром и глушителем. „Гросс“ мощность расчитывается без них. Необходимо заметить, что наши двигатели и их мощность не изменится.»
То есть, например для двигателя Honda GX120 мощность раньше указывалась "Максимальная мощность: 2.9 кBт (4 л.c.) / 3600 об/мин", а потом стало указываться "Полезная мощность: 2.4 кBт ( 3.2 л.c. ) / 3600 об/мин " и "Продолжительная мощность: 2.1 кBт ( 2.8 л.c. ) / 3600 об/мин"
Если взять данные 2006 года за 100%, получаем 80% и 70% соответственно. То есть, на одном и том же двигателе, при одних и тех же оборотах может быть указана заметно разная мощность.
И если вы делаете цифровой двойник предприятия использующего ДВС, введёте в него указанные в документации мощности и попробуете найти закономерности работы предприятия, то можете столкнуться с ситуацией, когда суммарная мощность плавно меняется (за счёт вымывания старой техники и добавления новой), а производительность остаётся той же.
Если у вас в базе будет указано не только числовое значение мощности, но и указание того как эта мощность названа и по какой методике измерена, то вы легко поймёте в чём суть. А если нет, то рискуете находить закономерности в каких‑то других процессах и начнёте принимать управленческие решения на основании ложной «обнаруженной закономерности».
Да, по сути речь о том, что «данных много не бывает», но я говорю не об абстрактных данных вообще, а о том в каком направлении нужно искать эти данные — в области физического смысла.
Что измеряли, чем, в чём, с какой точностью и т. д.
И не надо цепляться за этот пример, как за директиву «выясняем что за лошадиные силы имеются в виду». В вашем случае это может быть что‑то другое, но за цифрами всегда стоит какой‑то физический смысл и его надо сохранять и учитывать.
2. У величин должна быть размерность, соответствующая их физическому смыслу
И тут я снова вернусь к вопросу размерности вязкости жидкости. У предыдущей статьи возникло очень обсуждение этого вопроса ( https://habr.com/ru/articles/776550/comments/#comment_26207460 ). И сразу скажу, что мой собеседник прав, но прав он с позиции узкого специалиста инкорпорированного в профессиональную среду.
Что именно мы там обсуждаем.
Я говорю, что трёхэтажная размерность "(Н\*м)/( (м/с) * м^2 )" является отражением физического смысла явления, а "Па\*с" - нет.
Так почему же @Andy_U прав?
А прав он потому, что размерность Па*с является отражением универсальной формулы расчёта упругой деформации. Мы берём гипотетический бесконечно малый параллелепипед, называем его тензором и нам становится доступна вся мощь дифференциального исчисления. А вместе с этим мы получаем готовый матаппарат и программное обеспечение для моделирования.
Но в реальности ничего этого нет, в реальности есть дощечка с какой-то площадью, на которую действует сила, под которой есть слой жидкости, и которая развивает скорость.
И если вы не относитесь к числу узких профессионалов в области гидродинамики, то «трёхэатажная» размерность сообщает вам о том как именно происходит физический процесс. Вы видите, что надо уменьшить, а что увеличить, чтобы получить большую скорость при той же силе. Вы видите какую переменную надо писать в числитель, а какую в знаменатель.
Несокращённая размерность, отражающаяся физическую суть явления, это то, что вас страхует и помогает не ошибиться.
По сути, несокращённая размерность это просто вариант тех самых дополнительных данных, которых, как я уже говорил, много не бывает.
Храните эти данные - они вам могут пригодиться.
3. Свойства и размерности величин должны соответствовать физическому смыслу проводимого расчёта
И тут будет уместен пример, которого не было в первой статье - "кВт/ч".
Когда речь идёт о потреблённой электроэнергии, можно встретить именно такой вариант записи или же вариант произнесения "киловатт В час". Но является неправильным, о чём некоторые из Вас могли повторно узнать из этого прекрасного видеоролика
Да, вы можете разделить мощность на время и получить числовое значение, но будет ли это значение иметь физический смысл?
Мощность умноженная на время это энергия. Это то, за что вы платите и что нужно вам для создания единицы продукции. А что такое мощность делённая на время? Может ли эта величина возникнуть в проводимом вами расчёте и создаваемой вами модели?
Нет? Ну, значит, можно составить тематический словарь величин и размерностей, которые могут быть использованы в условиях тематического расчёта и, в процессе расчёта, проверять не возникло ли что-то чего не предполагается.
Кстати, можно представить себе вариант, когда с размерностью всё в порядке, например при умножении "ширина\*ширина\*высота" будет получена размерность соответствующая объёма (например, "м^3"). Но будет ли этот результат иметь физический смысл?
По сути, речь идёт о том, что от голого математического расчёта, в котором можно вертеть цифрами по своему усмотрению, мы переходим к осмысленному расчёте осуществляемого в узких рамках физического смысла.
4. Числовое значение величин должно соответствовать их физическому смыслу в контексте выполняемого расчёта
И если мы примем использование физического смысла расчёта в качестве естественного ограничителя, отсекающего неверные варианты, то можем применить это не только к смыслу и размерности величин, но и к их числовому значению.
И речь не только о фундаментальных физических ограничениях типа скорости света и абсолютного нуля, но и о более прикладных вещах.
И в поисках примера можно залезть в комментарии первой статье
"Чтобы не получалось, что у стальной балки длиной 1 метр прогиб 7 километров, как мне студенты сдавали."
https://habr.com/ru/articles/776550/comments/#comment_26204292 , @Jeshua
И надо понимать, что кроме отдельных физических свойств это могут быть характеристики сложных аппаратов: вес, скорость, грузоподъёмность, потребление топлива и т.д.
Например, мы можем взять двигатели из п.1 и, помня о п.3, вычислим удельный расход топлива. У нас же есть график работы двигателей, их мощность и отчётность по расходу топлива. Значит, делаем простой расчёт, в котором нам помогает п.2 и размерность "г/(л.с.*ч)".
И если мы обобщили прошлый опыт и вывели типичное значение удельного расхода топлива, то изменение методики, используемой производителем двигателя при определении мощности, может быть замечено по выходу удельного расхода топлива за рамки допустимого диапазона.
Да, я не дам гарантии, что это сработает в 100% случаев, но это увеличит ваши шансы на создание правильной модели того, что вы там собрались моделировать.
5. У оператора должна быть возможность проигнорировать любые несовпадения и сознательно выполнить расчёт, не имеющий физического смысла
И, наконец, пункт который так же получил свою ветку обсуждения в комментариях - кто должен решать что можно, а что нельзя: программист или пользователь?
И, на самом деле, это одна из больших проблем в отрасли, когда функционал продукта обоснован не запросами и нуждами потребителя, а умениями и капризам разработчика. Когда эрудированный айтишник считает себя умнее глупого заказчика. Потому, что в жизни может быть такое, что принято считать глупостью, но что глупостью не является.
Например, упомянутое выше "кВт/ч", над которым можно насмехаться и подавать как признак безграмотности. Это ведь признак безграмотности, да?
А вот и нет.
Есть величина имеющая одновременно и размерность "кВт/ч" и физический смысл - скорость измерения мощности.
Силовые установки выходят на рабочий режим не мгновенно и не мгновенно могут поменять режим. Турбина и ротор генератора не могут изменить скорость вращения мгновенно, давление пара не может вырасти мгновенно.
И если вы генерируете мощность 10 мВт , а к часу ИКС нужно 15 мВт, то скорость изменения мощности позволяет вычислить момент времени, когда надо начинать процесс наращивания мощности.
Из этого следует, что даже если в программе есть встроенные словари, содержащие допустимые размерности, диапазоны и т.д., то пользователь должен иметь возможность проигнорировать предупреждение.
Потому что разработчик программы, который хорошо учился в школе и смотрел на ютубе познавательные ролики, может не знать про то, что что-то имеет неизвестный ему физический смысл. Разработчик программы всего лишь человек.
Бонус - DDD
И тут уместно обратить внимание на комментарий, не получивший должного внимания в обсуждении первой статьи.
"Специально для Вас придумали DDD - там как раз во главе угла стоит бизнес-логика и то, как её видит и что от неё хочет эксперт."
https://habr.com/ru/articles/776550/comments/#comment_26204990 , @bonArt0
И правда, у нас же есть эксперты, у нас есть аналитики, у нас есть несколько команд, которые независимо друг от друга изучают суть моделируемого предприятия и общими усилиями создают качественный цифровой двойник объекта. И всё это происходит в рамках философии "Предметно-ориентированное проектирование" / "Domain-driven design".
Да! Всё так и должно быть.
Вот только в реальности всё не так.
Сейчас Python, машинное обучение и прочие штуки преподают и в школах и на онлайн-курсах.
Это модно.
Это выгодно.
Это перспективно.
Это массовые свежеобученные работники не самой высокой квалификации, которые разбредаются по самым разным местам работы.
Не все из них хотят и могут стать высококлассными аналитиками, и не у всех работодатели захотят раскошелиться на тех самых высококлассных аналитиков.
И нет никакой надежды на то, что все эти люди будут одинаково хорошо работать с тензорами упругой деформации и вычислять дивергенцию ротора по замкнутому контуру.
Давайте будем честными, человек, увидевший в ютуб ролике рекламную интеграцию онлайн курсов со скидкой от 50%, и решивший воспользоваться обещанным "гарантированным трудоустройством" чтобы мощно "войти в айти", этот человек не всегда будет заниматься глубокой аналитикой.
А вот взять и за недорого что-то по быстрому сделать для не очень богатого заказчика, это очень даже может быть.
И можно дать этим людям простой и понятный набор правил, который они смогут применять в своей работе.
Повторюсь, ПРОСТОЙ и ПОНЯТНЫЙ.
Пусть над их рабочим столом висит распечатанная бумажка с текстом
ПАРАДИГМА UNITS
Пиши в базу откуда взялись данные и что они значат.
Используй полные размерности и следи чтобы записанная формула совпадала с полной размерностью.
Составь словарик того что может быть в твоём расчёте и следи чтобы не появлялось лишнего.
Составь табличку минимумов и максимумов важных переменных и следи чтобы значения не вылезали за границы.
Поглядывай в логи, смотри что там появилось неправильного и проверяй почему так произошло.
И если люди начнут следовать этим простым правилам, то, возможно, всем нам станет чуточку лучше.
Или нет, но попробовать стоит.
mayorovp
Да, будет. Например, это может быть объём пустого пространства, образованного двумя столами одинаковой высоты, стоящими перпендикулярно друг к другу. Понятия не имею зачем его считать, но физический смысл тут определённо есть.
muxa_ru Автор
Если взять 6 досок из которых можно собрать 1 коробку, то, то что у досок было "длина" и "ширина", у коробки может иметь иной смысл - часть "ширин" может стать "высотами" или "длинами". И, поэтому, в рамках коробки это уже будут не две "ширины", а свои собственные свойства. (Ну, типа как ВЫСОТА человека, но ДЛИНА гроба.)
И в этом одна из главных проблем попыток работы с физическим смыслом - невозможно создать универсальную систему величин на все случаи жизни.
Поэтому и сокращают размерности - если принудительно свести размерность до 7 основных величин СИ, то из них можно сформировать строки для сравнения на совпадение или различие.
Поэтому, в общем виде это не решаемо и надо просто добавлять механизм контроля смысла для каждой темы.
Без фанатизма, конечно же.