Парадигму UNITS в массы
У первой статьи («Реальность существует и это надо учитывать» б https://habr.com/ru/articles/776550/) были очень интересные и содержательные комментарии, среди которых были озвучены идеи о необходимости примеров. С одной стороны это правильно, потому что на примерах можно вырабатывать практические навыки. С другой же, примеры могут создать впечатление, что речь только о том что совпадает с примерами.
Грубо говоря, если сказать «какой-нибудь лесной хищник, например, медведь», то есть риск того, что это поймут как «именно и только медведь»
Но без примеров и правда нельзя, поэтому — поехали.
Парадигму UNITS в массы!
Парадигма 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
Пиши в базу откуда взялись данные и что они значат.
Используй полные размерности и следи чтобы записанная формула совпадала с полной размерностью.
Составь словарик того что может быть в твоём расчёте и следи чтобы не появлялось лишнего.
Составь табличку минимумов и максимумов важных переменных и следи чтобы значения не вылезали за границы.
Поглядывай в логи, смотри что там появилось неправильного и проверяй почему так произошло.
И если люди начнут следовать этим простым правилам, то, возможно, всем нам станет чуточку лучше.
Или нет, но попробовать стоит.