2

对于程序员来说,“万物皆对象”是路人皆知的,甚至是已经过时的话题了,但“温故而知新”,时常思考一下,总是会有新的发现。
我只是一个普通程序员,每天就是思考架构、编写代码、调试bug,本文也只是把自己的思考记录下来,如果和别人的观点有什么异同也是纯属巧合。

对象之外

在我看来,任何技能都是有瓶颈的,而突破瓶颈的办法通常都是来自于借鉴。

第一性原理的起源

“在每个系统探索中存在第一性原理。第一性原理是基本的命题和假设,不能被省略和删除,也不能被违反。”——亚里士多德

由于特斯拉的成功,“第一性原理”也热了起来,相对于百度百科的词条,个人觉得亚里士多德的观点更有趣一些。“第一性原理是基本的命题和假设”,也就是说并不需要去论证第一性原理本身的正确性,这就是我认为有趣的地方。

哲学

对于哲学的定义,我也更偏向于其本身是一套方法而不是什么结论。
大部分的哲学观点都是相对的,而不是绝对的,小的观点比如生于忧患死于安乐,唇亡齿寒;大的观点比如辩证唯物主义,主观唯心主义。
而且,哲学观点是符合第一性原理的。已唇亡齿寒为例,对于被嘴唇包裹的牙齿来说,在失去嘴唇之后牙齿就更容易被外界的变化影响了。所以,给大象讲唇亡齿寒就是对牛弹琴了。对于大的哲学观点或者体系,往往是多个小观点按照第一性原理的原则的有序组合。

道德经

“有名万物之始,无名万物之母”,我的理解是一切本来没有名字,只是为了和别人讲述才需要命名。所以名字起的对不对并不重要,大家认可就好,这是否是老子的第一性原理呢?

思考

以上不论哪一种,可以发现其总结与归纳的都是事物变化的结果的规律
就当今的科学(对一定条件下物质变化规律的总结,可重复验证、可证伪、自身没有矛盾。)本身其实并不符合“第一性原理”,因为它可以被证伪。所以,“三体”中“智子”对物理学的影响是可能真实发生的,甚至“薛定谔的猫”已经有了这种苗头。
数学是符合第一性原理的。我们不需要也没有必要证明1+1=2或者1-1=0,认为这是数学的第一性原理就好。

*三体:刘慈欣的科幻小说
*薛定谔的猫:基于波粒二象性、不确定原理、观察者效应提出一个关于量子叠加原理的思想实验。

万物皆对象

万物皆对象是一种思想体系,且“万物皆对象”是该体系的第一性原理。
在最初的时候我认为这是一种编程的方式,就是创建class,然后实例化这么简单;后来我认为这是一种思维模式,“名词”基本就是对象,class只是Java语言的表现形式,即便对于非面向对象的语言,我们一样可以用这个思路进行开发。

何为“万物”

“万物”不是“一切”,对“万物”的解释直接决定了对“万物皆对象”的理解程度。
个人理解,使用英语的时态可以更简单的完成定义:任何非进行时的都可以称为万物。因此,从编程角度,不论是类、实例、方法或者属性都是对象(但是方法在被调用到完成调用的时候不是对象)。由于每个对象都被观察到与其它对象的差异,所以构成了万物。

对象世界

在这里,对象世界是我的臆造词,和网络上的对象世界是不同的。
区别于物质世界和精神世界,对象世界更贴近观察者所看到的真实世界。相对于“道可道,非常道。名可名,非常名。”,对象更容易理解,但是具有相同的本质。粗暴的将真实世界的“名”去掉,就会进入对象世界。
“老王,吃饭了吗?”,这是很普遍的问候,但是在对象世界里,这句话的含义为:查询“称呼”属性的值为“老王”的对象的“饥饿程度”属性的值是否高于50(0表示饱了,100表示要饿死的情况下)。
你可以不认可我的解释,因为对象世界是唯心的,每个观察者会通过自己的观察构造出不同的对象世界。这也是一直有人造轮子的根本原因。

程序与科学

如果说哲学是一套方法论的话,那么科学就是具体的方法了,从这个角度也就很自然的理解为什么有一种说法叫做“科学的尽头是神学”了。
“万物皆对象”是哲学观点,所以这也是方法论,所以程序就是具体的方法,所以程序会有bug,就像科学可以被证伪,所以程序能重复执行,就像科学可以重复验证。
既然方法是依附于方法论的,那么方法论自然就是方法的灯塔。这个道理不言自明,尤其对于程序员来说,每个人都在用,但是有意识的使用和无意识的使用必然是不同的。毛泽东同志并不是科学家,但是在1953年,他就已经断言“物质无限可分”,这就是思想的价值。
举一个更贴近程序员的例子,对于年龄大一点的程序员来说(例如我),当时并没有“设计模式”这个词,但是在了解之后就会发现,大部分设计模式早就实际运用了,只是并没有从这个角度去加以总结而已。

结尾-程序员的自我修养

程序员是一个需要终身学习的职业,但不仅仅是技术的学习。
代码是开发者表达个人对当前问题和解决方式的见解的表达形式,所以个人的修养才是真正的天花板。也正是由于这种“自成世界”的体验,更容易使程序员显得固执、钻牛角尖,所以程序员应该更注意去理解别人的“世界”,从而进一步完善自己的“世界”,达到突破天花板效应的目标。
读源码是很多程序员学习的方式之一,但是大部分人并不能充分的用好这个手段。如果看过一些玄幻小说,那么你会发现这类小说大多数主角都是从触摸法则、应用法则、创建法则到最终成就内世界的,而完整方案对应的源码其实就是这样一个内世界。通过读源码固然可以学到自己不会的知识点,但是更重要的,应该去尝试理解这个“内世界”的法则,然后提取精华来完善自己的“内世界”的法则。
多听、多想,不能根据自己的法则去主观的认为别人的观点是错的,因为别人的观点相对于其自身的法则(如果有的话)必然是对的。

因为这篇文章首发在思否(https://segmentfault.com/),所以就用这样一个建议收尾吧:从思路出发去提问或者回答才能有更高的价值和收获,而且对于提问者应该简要描述是什么因素促成了你目前的思路,而不是发几行代码找人帮忙调试。


NickWang
1.3k 声望132 粉丝

程序猿中的斗战剩猿