编程的另一面:从生死到变化~
来源:互联网 发布:mac svn客户端 version 编辑:程序博客网 时间:2024/05/23 15:42
今天突然跑到孟岩的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这般去探求生死变化之道,另一种便求应付当前的变化与状态的方法。
所谓理论与方法,原本就不是针对共同的受众群,也不必求大同。
我是不是在从一面走到另一面的过程之中呢?
- 编程的另一面:从生死到变化~
- 编程的另一面:从生死到变化~
- 从QT2到QT4的变化
- 从Qt4 到Qt5的变化
- 从Qt4 到Qt5.2的变化
- 从瀑布模型、极限编程到敏捷开发---软件开发管理者思维的变化
- 从瀑布模型、极限编程到敏捷开发——软件开发管理者思维的变化
- 从瀑布模型、极限编程到敏捷开发——软件开发管理者思维的变化
- 从天使到A轮融资:创业者要迈过的9大生死关
- cocos2d的FPS从60到30的变化
- 从Indy9升级到Indy10时IdTcpServer的变化
- 从Indy9升级到Indy10时IdTcpServer的变化
- 从Indy9升级到Indy10时IdTcpServer的变化
- 从加载到进入kernel运行的内存布局变化
- 从delphi7 到 Delphi2010 -- (一)基本数据类型的变化
- HBase中Bytes.compare从90到92的变化
- 从iBATIS 2.x到MyBatis的变化
- bootstrap从2.*到3.0的一些class变化
- 从MySQL导入导出大量数据的程序实现方法
- 前台用户点击增加按钮增加输入行控件,然后保存(惊险经历)
- 为什么外包预算报价会高
- 点击按钮后出现新的输入画面,否则隐藏
- Java WEB 应用字符编码解决方案
- 编程的另一面:从生死到变化~
- Google 桌面搜索的使用
- Asp.net Web控件失效
- NET树(dropdownlist 选择弹出另一页面)
- SQL Server数据库里的Management里的SQL Server Agent里的Jobs是个定时运行功能(死亡;历险)
- Java计时器
- 打开网站从右下角缓缓升起的小窗口如何实现?
- 转EXCEL和WORD时候出现的问题(死亡历险)
- 自然语言处理基础学习