У первой статьи («Реальность существует и это надо учитывать») были очень интересные и содержательные комментарии, среди которых были озвучены идеи о необходимости примеров. С одной стороны это правильно, потому что на примерах можно вырабатывать практические навыки. С другой же, примеры могут создать впечатление, что речь только о том что совпадает с примерами.

Грубо говоря, если сказать «какой‑нибудь лесной хищник, например, медведь», то есть риск того, что это поймут как «именно и только медведь»

Но без примеров и правда нельзя, поэтому — поехали.

Парадигму UNITS в массы!
Парадигму UNITS в массы!

Парадигма UNITS

  1. У величин должны быть свойства, указывающие на их физический смысл

  2. У величин должна быть размерность, соответствующая их физическому смыслу

  3. Свойства и размерности величин должны соответствовать физическому смыслу проводимого расчёта

  4. Числовое значение величин должно соответствовать их физическому смыслу в контексте выполняемого расчёта

  5. У оператора должна быть возможность проигнорировать любые несовпадения и сознательно выполнить расчёт, не имеющий физического смысла

... в примерах


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

  1. Пиши в базу откуда взялись данные и что они значат.

  2. Используй полные размерности и следи чтобы записанная формула совпадала с полной размерностью.

  3. Составь словарик того что может быть в твоём расчёте и следи чтобы не появлялось лишнего.

  4. Составь табличку минимумов и максимумов важных переменных и следи чтобы значения не вылезали за границы.

  5. Поглядывай в логи, смотри что там появилось неправильного и проверяй почему так произошло.

И если люди начнут следовать этим простым правилам, то, возможно, всем нам станет чуточку лучше.

Или нет, но попробовать стоит.

Комментарии (2)


  1. mayorovp
    02.12.2023 15:15
    +2

    Кстати, можно представить себе вариант, когда с размерностью всё в порядке, например при умножении "ширина\*ширина\*высота" будет получена размерность соответствующая объёма (например, "м^3"). Но будет ли этот результат иметь физический смысл?

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


    1. muxa_ru Автор
      02.12.2023 15:15
      +2

      Если взять 6 досок из которых можно собрать 1 коробку, то, то что у досок было "длина" и "ширина", у коробки может иметь иной смысл - часть "ширин" может стать "высотами" или "длинами". И, поэтому, в рамках коробки это уже будут не две "ширины", а свои собственные свойства. (Ну, типа как ВЫСОТА человека, но ДЛИНА гроба.)

      И в этом одна из главных проблем попыток работы с физическим смыслом - невозможно создать универсальную систему величин на все случаи жизни.

      Поэтому и сокращают размерности - если принудительно свести размерность до 7 основных величин СИ, то из них можно сформировать строки для сравнения на совпадение или различие.

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

      Без фанатизма, конечно же.