`
ruilin215
  • 浏览: 1165008 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

编程的另一面:从生死到变化~

阅读更多
今天突然跑到孟岩的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这般去探求生死变化之道,另一种便求应付当前的变化与状态的方法。
所谓理论与方法,原本就不是针对共同的受众群,也不必求大同。
我是不是在从一面走到另一面的过程之中呢?
分享到:
评论

相关推荐

    [解析极限编程:拥抱变化(原书第2版)].pdf

    从给定的文件信息来看,标题为"解析极限编程:拥抱变化(原书第2版)",描述中提到该电子书为个人学习使用,禁止商业用途,并指出遇到版权问题需要联系删除。标签为"计算机 编程",表明这本书很可能是一本与计算机...

    少儿Python编程课件

    少儿Python编程课件,通过通俗易懂的方式让孩子掌握Python编程

    Python编程入门 第3版.pdf

    由于提供的文件信息中并没有包含实际的文档内容,而是仅提供了一些外部链接和版权声明的描述,这使得无法直接生成具体的Python编程知识点。但根据文件信息中的标题《Python编程入门 第3版.pdf》,我们可以推断这本书...

    编程之法:面试和算法心得.pdf

    通过学习《编程之法:面试和算法心得》一书中的第六章内容,我们可以了解到处理海量数据的基本方法和技术,以及STL容器在其中的重要作用。这些知识点不仅对于面试准备至关重要,也是实际工作中不可或缺的知识储备。...

    C++高效编程:内存与性能优化(pdf版)

    《C++高效编程:内存与性能优化》是一本专注于C++编程语言内存管理和性能调优的书籍。本书深入探讨了如何在C++编程中高效地使用内存资源,以及如何进行性能优化,以编写出既高效又优雅的代码。 书籍作者Rene ...

    从单片机编程到操作系统产生

    从单片机编程到操作系统产生 本文将从单片机编程结构开始,逐步过渡到操作系统,并在S3C6410上实现一个小操作系统。单片机编程结构是指单片机编程的各种结构和方法,包括主函数顺序调用、界面函数结构、状态机结构...

    编程语言原理(第10版

    根据提供的标题“编程语言原理(第10版)”及描述“编程语言原理(第10版 编程语言原理)”,我们可以推断出这本书主要讲述了编程语言的基础理论与实践应用,是学习和理解编程语言设计与实现的重要参考资料。...

    LINUX SHELL编程从初学到精通

    5. 与其他编程语言的交互:掌握如何从Shell脚本调用其他编程语言(如Python、Perl)编写的程序,以及如何将Shell脚本作为其他系统服务的一部分。 6. 脚本安全:了解Shell脚本的安全风险,学习如何避免注入攻击、...

    PLC编程初级教程完整电子版

    - **您的第一次PLC之旅**:介绍初学者如何进行PLC编程的第一个项目,通常是从一个简单的例子开始,例如控制一个LED灯的亮灭。 - **更加深入的调试**:讲解如何使用软件提供的调试工具来检查程序的运行情况,发现并...

    vc++ 编程宝典(十年典藏版) 书后光盘源代码

    《VC++编程宝典》是面向C++程序员的一本经典教程,特别强调了在Microsoft Visual C++环境下进行软件开发的实践技巧。十年典藏版更是集合了多年的教学经验和实际项目案例,旨在帮助读者深入理解VC++编程的核心概念,...

    VISUAL C++MFC编程实例

    《Visual C++ MFC编程实例》是一本专为初学者设计的教程,旨在帮助读者深入理解和...书中可能涵盖从基本的窗口创建、事件处理,到复杂的数据库操作、网络通信等多个方面的实例,帮助你从零基础到熟练运用MFC进行开发。

    Linux多线程服务端编程,高清无水印!~

    Linux多线程服务端编程,高清无水印!~

    STM32F10xxx闪存编程手册(中文)

    ### STM32F10xxx闪存编程手册关键...从基本的读写操作到高级的保护机制,这些内容都旨在帮助开发人员充分利用这些微控制器的功能。通过理解这些基础知识,开发人员能够更好地设计和实施安全可靠的嵌入式系统解决方案。

    QT5 编程入门 高清完整PDF版

    QT5的编程入门涉及到多个关键概念和知识点,以下将进行详细解释。 1. **Qt库介绍**:Qt是一个C++库,包含了大量的类和函数,用于构建图形用户界面(GUI)和非GUI应用程序。它提供了事件驱动模型,使得开发者可以...

    C#100个编程实例程序

    2. **面向对象编程**:C#是面向对象的语言,实例可能涉及到类的创建、对象的实例化、封装、继承、多态等概念。这有助于理解如何构建复用性强、结构清晰的软件系统。 3. **异常处理**:实例可能包括try-catch-...

    解析极限编程拥抱变化

    解析极限编程拥抱变化

    UNIX网络编程 卷2 进程间通信(第2版)

    UNIX网络编程 卷2 进程间通信(第2版)

    MATLAB之父 编程实践 中文版

    从给定的信息来看,主要涉及的是《MATLAB之父 编程实践》这本书的中文版。下面将根据这些信息深入探讨MATLAB编程实践中的关键知识点。 ### MATLAB编程基础 MATLAB(Matrix Laboratory)是一种用于算法开发、数据...

    金融数量分析:基于MATLAB编程.pdf

    本书《金融数量分析:基于MATLAB编程》共分为六章,内容由浅入深,为读者提供了金融市场与金融产品的概要性介绍,数量分析的基本概念,如资产估值与定价、投资组合管理、风险测量与管理等,并配有相应的MATLAB函数...

    linux shell编程从初学到精通源码4-17全

    本资源包含了从初学到精通的Shell编程源码,共计4-17全阶段的学习内容,旨在帮助用户深入理解并熟练掌握Shell编程技巧。 在学习Linux Shell编程的过程中,你将了解到以下核心知识点: 1. **基础语法**:了解Shell...

Global site tag (gtag.js) - Google Analytics