编程的另一面:从生死到变化~
今天突然跑到孟岩的BLOG里头(这里),看到一个新的缩略语REST(REpresentational State Transfer,具备表像的状态迁移),随后又看到另一个GPPD(Get, Post, Put, Delete),然后又出来一个CRUD(Create, Read, Update, Delete)……直到在他的文章中跳出来SIUD(Select, Insert, Update, Delete)之时,我终于忍无可忍,决定要来思考一下下这些层出不穷的新鲜玩意儿了。
老实说,这篇《Rails中探索资源的世界(7月9日David Heinemeier Hansson演讲的翻译稿)》是个好东西。尽管孟岩老兄还没有译完,尽管我也既不了解JAVA,也不了解Rails,但我却已经看到了很多有趣的思想。其中,我最感兴趣的就是David Heinemeier Hansson认为CRUD概括了Rails世界中对对象的理解,认为所有的对象行为都可以被抽象到这四个行为,随后例举到数据库中的四种基本行为CRUD(Create, Read, Update, Delete)等等。
其实回归到“对对象的行为抽象”这个事件的本质,我们会发现:如果对象是一个“物”,那么它必然有“创生”和“死亡”,即所谓“生死”;如果要有存在的意义,则必然历经变化,一生一灭是变化,一有一无亦是变化。
所以,一个“有用的事物”必然要经历“生死”,也必然要存在变化。如果变化不需要为人所知,那么有没有“表现”当然无所谓(例如自生而自灭);但如果这是一个需要与外界交流的对象,那么必然要有交流的界面。——哪怕是一块静态的石头,也固有形有象,其“形象”也是可交流的。我们把这种交流,称为“表现”,从“我”到“他”的这个中界,称为“界面”。
那么怎么理解上面这些奇特的四字真言呢?
CRUD: Create,Delete=>生死; Read=> 表现; Update=>变化
SIUD: Insert,Delete=>生死; Select=> 表现; Update=>变化
GPPD: Put, Delete=>生死; Get=> 表现; Post=>变化
(说明:GPPD略显牵强,但主要是因为人家对Get/Pos的不清晰的、不负责任的乱用,而非源于HTTP协议本身)
我们先不讨论“生死”问题,先说变化。
我们知道,一个事物若自生自灭,周行不始,那么它只需要有状态,而不需要表现。那么,它大概不需要界面。无界面的事物,对于外在来说,混沌若无。缘于这个事物无法为人知,所以即不知它何时而生,亦不知它何时而灭。如此来,一个事物之初,既无所谓生死,亦无所谓变化。——因为它无法为人所知,亦无法了解。
老子说:“有物混成,先天地生。寂兮寥兮,独立不改,周行不殆,可以为天地母。”
所谓“寂兮”,是没有声音;“寥兮”,是没有形象。这句的含义是指你观察不到。“独立不改”是指在固在、有固有、是就是,衡而有之;“周行不殆”是无时、无处不在。
在老子的这个认识论中,是没有时间、空间的概念的,也没有事物之内、外的分别。所以我就正如我们上面说的,如果“它不需要表现,或者没有表现”,那么就混混沌沌。只知其有,不知其无,因为在思想境界里,既无时间空间,何来生死有无?
那么最前面这句“有物混成”又怎么讲呢?这个就讲得远了,要讲到“混沌”这个东西的来由。但是,我们这里不讲它,我们只是说,在对这个事物有所认知之前,混而不解,沌而不知。
有所认知之后呢?老子就“吾不知其名,字之曰道;强为之名曰大”。
这就有了个名字,叫“大道”(姓?、名大、字道,哈哈)。
接下来的事情,就奇怪了。原来没名字,为了认识它,我们给了一个名字。从没有到有,就是创生的问题。有就是存在,就是“一”。既辨出了有、无,便有两种状态,于是就有了“二”。
所以,从哲学上来说,对事物的认识,就是从生死、有无中理解的变化。如果追其本源,一个事物,既存生死、有无之正反面,便有认识生死、有无的“界面”。如果没有认识界面,它就回归了本源:混混若无。
变化又有自变、它变之分。自变教人认识,它变则为外在所改变。所以,如果一个事物不需要它变,当然不需要向外在“表现”这种“变化”的“界面”。
我们已经看到了“四字真言(们)”的来由了。它们反映的是:
事物的存在与否:生死。例如Create/Free(或delete...),Constructor/Destroy,Put/Delete……
事物的表现价值:表现。例如Select,Get,Read……
事物的它变价值:变化。例如Update……
所以,我们知道,在基于这种思想的面向对象设计(OOD)中:
- 如果这个对象不需要被外界改变(它变),那么不需要有update的界面;
所以这时可以由“四字真言”变成“三字经”。
而接下来,如果它不需要向外在表现,那么它根本就不需要界面。因此这时固然不必要有Select之类的表现方法,也不需要向外public构造和析构的界面。如此一来,便“四字真言”变成了“无字天书”,不为人知,也不需要为人知,成为一个封闭系统了。
David Heinemeier Hansson在《Rails中探索资源的世界(7月9日演讲的翻译稿)》中并没有讲述什么深奥的东西,Rails的思想也不是什么诡异之学。事实上,我们的软件开发界正在一步步地逼向哲学探索的空间。不记得谁说过:计算机科学中最重要的思想方法是抽象。关于这一点,王选院士也持相同的观点。
而抽象本身就是对事物本质的提炼与汲取,也就是认识论与认知论的问题。如果到这个层面,那么大家都去研究哲学好了。
所以,Rails的探索固然是个好东东,却有理论之嫌。然而一旦不理论、不抽象,事物又要变化,进而复杂无序。在我看来,大多数人用Rails,不过是用用罢了,解决一时一事的问题,至于它是不是源于道生一、一生二这样的理论,不是要关注的。
工程原本就有两种,一种理论工程,一种实践工程。言之工程则混沌,分而治之则澄明。
编程也有两种,一种便如Rails这般去探求生死变化之道,另一种便求应付当前的变化与状态的方法。
所谓理论与方法,原本就不是针对共同的受众群,也不必求大同。
我是不是在从一面走到另一面的过程之中呢?