一个很有哲学意味的接口设计

工程和哲学,通常很难联系到一起。现实生活中,也确实如此。但如果能在忙碌的工程中,拿出一些时间,也可以在繁杂的代码中,看到一丝哲学的火花。   作为曾经流行的技术,COM已经渐渐远离了人们的视野。然而作为曾经以此谋生的我,还时常会想起它。特别是那个意味深长的接口,IUnknown。   这是一个非常有意思的设计。一个编程用的接口,回答的,却是每个人心中最深沉的问题。这个接口,只有三个API。一个叫AddRef,一个叫Release。这两个API回答的,是生与死的问题。另一个API叫做QueryInterface,它回答的,则是“我是谁”。   人们用天数计算着自己的生命,IUnknown使用引用计数来决定自己的去留。所以,也不奇怪人们把“AddRef”和“Release”称为“生命”周期管理。   而“QueryInterface”,则是一个接口区别另一个接口的标志。COM世界中,一切都是IUnknown,彼此的不同,便只由QueryInterface的不同的回答来决定。如果说“AddRef”和“Release”赋予了IUnknown生命,那么QueryInterface便赋予IUnknown不同的生存价值。由是,便有了你我之分。如果将接口,看成不同的职责,那QueryInterface区别的,就如同职场上不同的职位。如果讲接口看成生活中的不同角色,那QueryInterface所区别的,就是父母,兄弟,夫妻等不同的身份。   如果你对人生有更深的思考,也许会问,那“什么是我”。也许有人会说,“我是谁”和“什么是我”不是同一个问题吗?真的么?我们每天辛勤工作,在公司,是不同的职责,不同的分工。我是工程师,他是老板等等。这是“我是谁”,但都是工程师,什么才是区分你我的根本呢?即使是同一个工作,也可以不同的人来做,哪一个是我?我们追求的所谓个性,无论是简单的IRect,IElement,还是复杂如IOleDocumentView,哪一个是真正的我所独有?都不是。我们工作,不喜欢别人仅以职能或结果来评价我们,因为那不是真正的“我”。我们生活,朝九晚五,吃喝拉撒,久而久之,都会感慨缺少真正属于自己的一片天地。而那缺少的所谓“自己”,究竟是什么?QueryInterface回答的,或者说界定的,是我所有,不是我。关于这个“什么是我”的问题,COM世界给出了坦诚的回答。这回答,便蕴含在IUnknown的名字里:我不知道。   不知道,其实是个不错的回答。因为不知道,才使得IUnknown的继承者,无所不能。而IUnknown本身,则颇有道可道,非常道的意味。   这就是一个程序员,在养家之余,还很享受的阅读代码的一小段思考。

2

戏说计算机与哲学

转一篇2005年写的东西     其实计算机并不只是technical stuff。人对自身的思考,总会投射到别的事物上。 1.  如果你问计算机生命是什么?答案会很简单:     while(1)     {        something without break and deadlock;    }      是呀,人们都称这个是“死”循环。其实呢,使得你的系统能够不停运转的idle,也不过就是这样的“死”循环罢了。所以,生与死并没有一个绝对的边界。正是这样的死循环,使得你的PC得到永生。相反地,任何正常的,非“死”的进程,都有终结之日。生死之交易,由此可见一斑。     记得刚上初中的时候,老师作过这样的比喻。他说人类制造的其他工具是人类四肢的延伸,唯有计算机是人类大脑的延伸。那节课的主题就是“是电脑,还是计算机”。有人说计算机的神奇并不在于它的计算能力,而是因为它有判断的能力,而这也是作为工具的计算机区别于其它一切工具的特征。我并不反对这种观点。然而我更希望人们看到,循环是计算机中最具活力的地方。看看每一个Windows程序,哪一个不是都有其自已的“消息循环”。如果有coding基础的人都可以想一想,几乎每一个feature无不是处在一个或大或小的循环当中。循环往复,而非简单重复,计算的乐趣与人生的乐趣有了一个共同的落脚点。      每一个人的生命,从他开始的一天就开始了各种循环。昼夜交替,四季轮回,是小循环;从小到大,从年轻到年迈,是每一个人要走过的大循环。循环,是人生共性的东西。所以回答生命就是如上的循环就不那么奇怪了。然而,每个人的生活都是不一样的。即使是朝夕相处的人们,也都有着属于自己的,与他人迥然不同的生活。而这正是因为每个人的循环当中,有着无数的if。每个人在相同的循环当中,走向不同的分支。对算法有了解的人来想一想,每一个让人感叹的优美的算法,不也通常就是这种循环中带判断的结构么?写算法的人和写小说的人都是在讲述一个不完全真实的故事,只是方法和载体不同罢了。人与人之间,真没有什么不同的地方。 2.  天下大同就是IUnknown。     其实不只是人与人,世间万物都有相通之处,人们称这个过程叫做抽象。记得很多年前知道一种东西叫TObject,一个让人不太能找到感觉的名字。然而,当你见到IUnknown时,就不免浮想联翩了。在COM的世界里,所有的东西都源自IUnknown,而它只回答了三个问题:什么时间出生,什么时间死亡和“我是谁”。其实真的不只是人们会向天发问:“Who am I?”。你的计算机也在不停地呼喊:“QueryInterface”。是呀,生死总不是在自己的掌控之内,在一个人的逻辑世界里,生与死的问题只能是公理,这意味着你并不能对它说三道四。而“我是谁”这样的问题,却有着千万种的回答。也正是不同的回答,构成了丰富的世界。而万物的源头,永远都是Unknown。我不信上帝,但我勇于面对这个现实。

0