今天读了一篇博文,论述当前新冠病毒时期即为Karl Jasper哲学理论上所称的“unconditional moment”(无条件时刻)。文章本身在阐述这个无条件时刻会触发由危机引起的社会变化,进而促进当前形态的资本主义系统的自我摧毁。我对西方哲学思想本身没有太多的了解,但作者的结尾一句话却激发了我的思考。

作者写到:“You can negotiate with reality, but not with the Real.”我试图翻译一下:你可以和现实谈判,但与真实不行。作者在此用了“the Real”,定冠词是特指,Real还用了大写的首字母,说明这个真实是一个具体的客观存在。因为跨越了语言加上哲学的艰涩,这个客观存在的特定真实也许很难理解。我的理解为这里说的真实是一个独立的而不依存于其他存在的本体,而现实则不同,它是基于某个特定真实展现出的一些形态。因此你可以通过你的意志而与现实谈判,可以接受或者拒绝现实,而真实却不会因为你的意志而消灭或改变。

引发我思考的还是去年我和三个同事的一次讨论。我整理了2019年10月17日发在朋友圈的一篇分享。

关于1000vs1024讨论引发的思考

项目上需要计算网络中传输数据量,关于怎么计算MB(megabytes)引发了我和同事之间的一个讨论,而从这样一个讨论中也引发了一些思考。

这个讨论在这个项目组四个人之间进行,三个同事和我。A是工作20多年最资深级别的同事,老清华,德州大学奥斯汀分校CS博士。B是工作9年工龄同事,斯坦福EE博士。C是工作6工龄的同事,加州大学戴维斯分校CS博士。A和B是组里我最尊重的两位同事,理由是他们的认真严谨的工作态度和高水准的工作质量。交代讨论者的背景情况是为了表示这是一个严肃可信的讨论。

这个讨论源自我为项目开发的一个计算公式,原始数据的单位是B(bytes),而我们最终要算一个指标用MB来显示。我使用的计算方式是 1024*1024 B = 1MB。支持我的计算方法的是同事C,反对我的计算方法的是同事B,不站队的是同事A。

先说同事B反对的理由,在组里原有项目的计算中,由于throughput计算全部使用的1 Mbps = 10^6 bps,所以鉴于一致性所有的data volume(数据量)都使用 1 MB = 10^6 B。同事C支持我的理由也很简单,在计算机领域,1 MB = 1024*1024 B这个定义传统毋容置疑。

在同事B和C争论不休的时候,同事A提议查一下维基百科。维基百科显示的结果是传统计算机领域确实惯用1 MB = 1024*1024 B,但由于对mega这个单位容易引起混淆,所以新的标准中比如IEC标准都推崇1MB = 10^6B,而不是2^20,如果非要用2进制的,那就改成MiB(mebibyte)。同事B也根据此条作为支持使用10^6的证据和理由。最后资深的同事A说还是使用10^6计算吧,这样保持一个服务里计算的一致性,不会导致增加修改之前所有程序的工作量。当然同事C情感上还是不太同意这样的计算方法,最后也表示接受。我是提出者和执行者,表示在此服务范围内接受。

这样的讨论外人看来可能是一段比较可笑的讨论,为什么要这么较真,既然标准都规定了推荐10^6,为什么我和同事C要坚持使用二进制计算方法。下面是我的一些思考:

  1. 同事C和我的根本出发点在于计算机存储的根本原理。C是计算机出身,我算一个半路出家的,但我们都非常明白为什么要使用二进制。每个存储单元可以存储0或者1,那一个存储单元就是一个二进制位,就是一个bit,任何数据说到底都是存储在二进制位的单元上的,因此计算数据量也必须要以二进制为基底,一个byte就是8个bit,也就是8个二进制位所表示的存储量。任何以十进制为底的计算从根本上是没有什么意义的,因为一般不可能表示整数个二进制位的存储量。

  2. 同事A和B参考维基百科的方法我表示认同,但是否有参考意义那需要思考一下。维基百科是一款非常好的查询工具,但很多人迷信其为权威而作为重要的参考文献,这就是一个非常大的误区。维基百科更像是一个索引,或是参考书,但其很多陈述和引用带有编纂者的主观偏见,而编纂者的资质也很难鉴定。

  3. 目前国际标准也推崇使用十进制,并不表示这样的规定专业人士会接受并在科学实践中采用。而在我们实践的过程中十进制的计算在存储量计算中用的是非常少的,所以可以看出计算机领域大家并不对这样的规定感冒,也不买单。原因其实很简单,这是一个脱离现实的单位制定,制定单位仅仅是为了消除世俗意义上以十进制定义的mega与计算机领域借用mega来表示二进制之间的矛盾,强制规定统一使用十进制,这是从命名(naming)一致性作为出发的标准。而计算机专家们坚持的当然都是脚踏实地的现实,那就是二进制,否则一切计算的意义就不存在了。

  4. 这段讨论本身很小,但明显分化出三派,原旨主义派,现实主义派,中间派。同事C和我属于原旨主义派,明显维护计算机根本原理的设计初衷,现实主义派推崇当前制定的标准,而中间派游离在两者之间。这一点很有意思。

当时我把自己和C同事称为原旨主义派,把B同事称为现实主义派。主义两个字加上去,似乎哲学派系的味道太浓了些,我决定去掉。结合今天读完博文后的思考,再稍作修改,我认为自己和同事C属于“真实派”,而同事B是“现实派”。

我们讨论的问题有一个具体的真实本体,那就是计算机存储的基础是二进制位的,这就是那个“the Real”,它是个独立于其他存在的本体。我和同事C的主张自始至终都是基于这个真实,因此为真实派。而计算机存储单位的国际标准是基于真实而演化出的存在,它是一种展现真实的形态,它不一定是单个的,一成不变的,所以它是一种现实,B同事的主张以这种现实为依据,所以属于现实派。

严格意义上,我和C同事可能也是一种现实派,因为以二进制为基础的单位也是一种展现形态,不过我们的宗旨是反映和回归真实,狭义上我们可能应归为“真实现实派”比较精确,但这里的区别还是很明显的,所以归为真实派。

虽然我和C同事试图和一个现实谈判,但是我们还是用我们的意志选择接受了那个现实,因此也正印证了“You can negotiate with reality”这句话。不过我们头脑里的那个真实却不会因为我们的妥协而消灭或者改变,因为它不依存于其他任何本体,除非计算机改用非二进制位。

这是哲学意义上的思考,没有正反和对错之分,现实派和真实派是两个存在。

现实是一个真实的某个现实,真实是某个现实的那个真实。你是选择做现实派,还是选择做真实派,或者什么时候切换,还是得你自己说了算。