为啥那么多程序员、本科生等非中医药专业的人在很坚决地否定中医药的医学价值,甚至也否定阴阳的科学性

事情是这样的,某天一位中医大师来跟我们程序员传播中医思想……
大师:阴阳相当于事物的两种状态,只不过是一种符号,就像计算机中的0和1一样,真正的程序员都是非常推崇中医思想的,我邻居家的儿子就是一个程序员,在微软工作,他曾经……
我:大师,为什么是两种状态?不是三种状态?四种状态?
大师:你这不是抬杠么?为什么计算机是二进制?阴阳是一种相对表示方法论!热是阳,寒是阴,多热是阳?多寒是阴?看你跟什么东西来比较,比如跟0℃相比,100℃就是阳。
我:这题我会!计算机并不需要一定用二进制,图灵机计算模型的表示完全不需要依赖二进制,Lambda Calculus 计算模型甚至不需要有状态 。并且,程序不能只用0和1两种状态表示比较大小的结果,你把大的说成阳,小的说成阴,那相等该怎么表示?所以现在先进的编程语言都会加入 Ordering 类型,分别用 GT、LT、EQ 表示大于、小于、等于。你觉得相等就相等嘛根本无需比较,可是相等的概念也是相对的,比如相对于99℃,99.1℃是不是阳?99.01℃是不是阳?…… 所以程序比较 Floating Number 时,都是取一个容许的最大误差 epsilon,两个值相差绝对值小于 epsilon 就认为相等。请问中医分类阴阳时取的 epsilon 值是多小?如果大师指的是布尔逻辑,首先,01和布尔值混用只是C语言恐龙时代遗留下来的不良风气,然后现代软件开发都建议避免用 Bool 类型表示对象的状态,避免 {status:Bool}这种烂代码,因为它没有传递任何信息,if object.status == True ? 你说一个东西状态是阳?什么鬼?这属于典型的不肯好好说人话!正确的做法是要么定义成 {isOverheat:Bool},要么定义一个 data TemperatureStatus = Overheat | Supercool | Regular ,你看, if body.temperatureStatus == Overheat then return Paracetamol!这代码多好理解!如果将来重构需要添加新的状态,还省了把其它接口中的 Bool 换成新类型。从程序设计角度来讲,不直接说一个东西温度多冷多热,绕圈子说一个东西属性是阴是阳,不但没有任何好处,还丢失了重要信息,使代码难于理解。代码越难于阅读理解,隐藏的 Bug 就越难于被发现,比如代码 herb.irritationLevel = weather.temperLevel ,两种不同类型的值是不能这样直接赋值的,草药的刺激属性怎么能随便直接跟天气温度混淆呢?至少要有个什么证明什么转换吧?如果全用 Bool 表示,这个 Bug 就这样悄无声息地躺在那里,如果用 Enum/Algebraic Type,编译器就能立即发现这个 Bug。还有,函数参数也要避免使用一堆无意义的 Bool 参数,doctor.diagnose(true,false,true,false,false),这什么鬼代码?说人话不会吗?同理,推而广之,用阴阳表示温度大小是烂代码,一鼓脑用性寒性热概括药物的辣度、营养含量、卡路里、重金属含量等等同样也属于烂代码。更多干货请参考:《Clean Code》、《Code Complete》、Avoiding Booleans、Boolean blindness ,谢谢!

大师:行了行了,反正就那么个意思,就是那个GT、LT符号,万物都有强弱大小状态变化,我们比较分成阴和阳,你看,强奸也说强,强国也说强,这就像阴阳寒热,万物都是相通的,天气有寒热,药性也有寒热,中医就是利用药物这些寒热偏性去纠正人体的偏性,你们程序员叫这个什么来着?一切皆对象!继承!多态!譬如食盐能炒菜,工业盐也能炒菜,因为他们都有盐性!樊代明院士举过一个很贴切的例子:癌细胞个头大,洋鸡蛋个头也比较大,所以洋鸡蛋就是癌细胞。

我:不对不对!食盐和工业盐都属于盐,这叫 Subtype Polymorphism(子类型多态),然而程序语言中子类型多态要遵守Liskov substitution principle(李氏代换原则),父类型能用的地方都能代换成子类型,能用任何化学盐类的地方,换成食盐也行,但反过来不行,不同兄弟类型也不能相互代换,所以工业盐不能炒菜,编译器会报错的!大小比较接口用的是 Ad-hoc polymorphism(特设多态), type class Ord\u0026lt;a\u0026gt;,但类型变量 a 只有一个,不能同时为多个类型,比如一个寒热比较的接口:HotOrNot\u0026lt;T\u0026gt;,草药的寒热不能和人体的寒热相比较,两个 Hot Girl 可以更 Hot,但一个 Girl 加一根辣椒并不能更 Hot,事实上在程序里面这两者加到一起就是个 Type Error。至于强奸和强国,连 Duck Type 都算不上,他们只是名称相似,没有任何其它联系,不能相互代换,国家不可能通过强奸公民而成为强国。如果中医的寒热分类属于上面任何一种多态,那分类相同药物和人体病症之间就可能相互作用的说法逻辑上是说不通的……


推荐阅读