读 《论“器”与“气”》后的感慨

原文 ---〉
  论“器”与“气”
首先让我们来看一看什么是武林高手,或许我们能够从中得到启发。
凡是喜爱武功或武侠小说的人都知道,修炼武功分为外练和内修两种途径。外练拳脚、兵器,拳脚的招式和兵器的好坏是关键;内修真气,练精化气、练气化神、练神还虚是根本。这两种修炼方法的最大差别在于时间和功力的函数关系上,如图 3-1 所示。通俗地讲,头 3 年,练外功的可以轻易打败练内功的;第 10 年,双方只能打个平手; 15 年后,无论你如何练外功都不是练内功的对手。 20 年后,内功高手天下无敌。其中的道理正是在于“器”和“气”的辩证关系。
“器”为有形之物,刀枪剑戟皆为有形之器。外练武功,离不开这些有形之器,练功即为练兵器。所以使枪弄剑的武林高手往往依赖于兵器的好坏。
“气”为无形之质,一切智慧、法力、思想皆为无形之质。内修气功,离不开这些无形之质,练功即为练气。所以真正的武林高手往往无需依赖于特定的兵器,对于他们而言,任何有形之物皆可随气所运,拟为兵器。一折扇,一拂尘在其手中威力不亚于名枪好剑,是得气所致也。
3-1 两种修炼方法的时间和功力关系图
在软件开发中,编程工具是“器”,编程思想是“气”。
在编程之器中,易用之器如 VB PB ;难用之器如汇编、 C + + ;古老之器如 Fortran COBOL ;时尚之器如 Java C #。
在编程思想中,又有面向对象和面向过程之分,它们既是世界观又是方法论。前者反映的是人对客观对象的思维方式,后者反映的是机器对指令的思维方式。在软件开发的不断实践中,前者的优越性已经得到不断的体现和证实。
掌握面向对象的编程思想如同获得练气的真谛。它的重要性往往胜过了对编程语言的选择!
有人即使选择了面向对象的利器,也无法成为真正的高手,因为他看重的是“器”的好坏,忽略了“气”的修炼。
实际上“一个系统或语言是不是面向对象的并不重要,重要的是怎样才能是面向对象的以及用什么办法实现相关的好处”。练器虽易,但难成高手。练气虽好,但见效缓慢,寂寞难耐,非一般常人可以明心见性,直取大道。所以很多武林高手都是先练器、后练气;内外兼修,终成正果。
对于初入武林的新手,他们需要借助兵器的威力,以补内力之不足,器的好坏往往很重要。但随着武功的增加,内力的勃发,对器的依赖性应该减小。《神雕侠侣》中杨过练剑,起步初学时好使利剑,谙悉剑法后喜用钝剑,内功纯熟后树枝亦当剑。所以对于真正的高手而言,剑器的好坏往往并不重要。
同样,软件高手的成长也有这样的过程。初学编程需要选择好的语言,这样可以取得事半功倍的效果,同时激发学习兴趣,增强信心。一旦熟悉了一种语言之后,应以此为契机进而掌握面向对象编程思想。这时你熟悉的不再是语言本身的语法、函数、类库,而是绑定、多态、模式等思维方法,然后触类旁通,再学其他面向对象语言也不难。苦练内功,勇于实践,最终成功的真正的软件高手,是不受编程语言限制的。他们可能比较熟悉一种开发工具,但那也只是承载他们大道无形之气的器具。他们虚心好学,善于总结。他们的思想、方法、模式甚至哲学,既超越了编程语言,又可以指导编程语言的实践。
Delphi 为软件高手的成长提供了内外兼修的捷径。学练 Delphi ,既可用其 RAD 之长,控件之利,初学起步,迅速击败对手;学练 Delphi ,也能以其 OOP 之能, VCL 之强,培根固本,成就不败之功。
威震四海的华山剑派曾分为“剑宗”和“气宗”,前者只练器,讲招式;后者兼练气,重筑基。学习 Delphi 好比修炼华山剑法,走 RAD 之路是“剑宗”,从 OOP 之道是“气宗”。前者喜用控件,看中奇技淫巧;后者好为对象,热衷方法模式。前者追求速成,后者志存高远。我认为,无论是为 RAD 而选择 Delphi 还是因 OOP 而放弃 Delphi 的朋友都没有真正了解 Delphi Delphi 是一个不错的 RAD 开发软件,可是不学 OOP ,不深人 VCL 就很难成为真正的高手。同样, Delphi 是一个地道的 OOP 编程工具,结合 Delphi 强大的 RAD 和高效的编译器,可以比其他 OOP 语言有更多的优势和更高的效率。如果能打破门户之见,“器”与“气”同练,内外兼修,我相信 Delphi 程序员不难从一个 RAD 快手成长为 OOP 高手,最终笑傲江湖,纵横四海。
面向对象编程思想和大道无形之气
前面我简单讨论了“器”与“气”的辩证关系。在编程中,修持内功、提高内力的关键之一在于掌握面向对象编程思想。实际上,我更认为面向对象编程思想才最合大道无形之真气的妙处。
为什么这么讲?“古之大化者,乃与无形俱生”(《 鬼谷子》 反应第二),气的奥妙首先在于它的“大化”。大化者,天地之大造化也,集一切创造和变化之能。面向对象的编程思想具备了这种特质。
老子曰“无名天地之始,有名万物之母”,无名是无以名状,无法定义的意思。所谓面向对象的思维方式,最奥妙之处在于如何从“无名”中识别和定义对象,如何从“有名”中构造和使用对象。
对于软件开发人员来说,认识客观实体的过程、对用户需求进行分析和设计的过程,就是发现和界定对象的过程,是从无名到有名的过程。然而这里的对象又不同于面向过程中的变量或函数,对象是由类创建的,类是概念的抽象,是可以定义的“有名”,是对象之母。于是乎,太极生两仪,两仪生八卦,通过类的继承和派生,万物始生,系统构成。即使作为面向对象编程工具的“器”,也体现和承载了面向对象的编程思想之“气”。
从软件开发的角度来理解,面向对象的编程工具虽然提供了构建无穷种软件系统的可能性,但这种无限性却是建立在自身类库的有限框架之中。无论是 Delphi VCL ,还是 Java 的类库,或是. NET 的框架,无一不是建立在这样一个类似于周易八卦的架构之中。“易有太极,太极生两仪,两仪生四象,四象生八卦”,这样的结构完美无瑕,有着无穷的创造力。太极是 Delphi 中的 TObject ,它是构建系统的原子,并是所有类的祖先,它具有所有类的基本特征。在 Delphi 的编程世界中,根类 TObject 生持久对象类 Tpersistent ,持久对象类 Tpersistent 生组件对象类 Tcomponent ,进而为开发应用程序提供了丰富的控件和强大的功能。然而类库的结构框架不仅仅是给我们可以作为“器”用的组件,更重要的是这种结构通过类之间的关系和相关作用,实现了“气”的构造和变化,体现出面向对象编程思想的精髓。为我们创建自己的系统提供了绝好的示范。
气的奥妙其次在于它“生于无形”。无形意味着它的自由性、开放性、适应性。在面向对象编程思想中处处充满着“气”的这种大道无形的智慧。
比如,面向编程对象中的多态性使程序员可以撰写更加通用的、更加开放的程序。程序员可以为 Vehicle 对象编写一个纯虚抽象方法 stop() ,这样的通用 stop() 方法与驾驶什么车无关。程序员可以让派生类去操心如何完成 stop() 方法,而继续在更高的抽象级别上编写自己的通用过程。即使 car 对象的 stop() 方法与 Bicycle 对象的 stop() 方法完全不一样,程序员也可以使用 Vehicle.stop() 。多态性可以让创建的对象自动知道哪一个合适的方法将被调用。这就使程序具备了“气”的开放性和适应性。
练气功中讲究“上德无为,不以察求。下德为之,其用不体”(引自《 周易参同契》 )。在面向对象编程思想中,“上德”是晚绑定的纯虚抽象方法,是以不变应万变的对象接口,它是对事物的高度抽象,是形而上学。“上德无为”是说在抽象层次,通过无为来体现编程“虚”的一面,因为这时还无法确定实际使用的真正对象(可能是 Car 对象也可能是 Bicycle 对象,更可能是以后发明的新交通工具对象),“不以察求”要求我们跳出具体需求的约束,不去考虑具体的实现代码。所以纯虚抽象方法或对象接口中是没有任何代码实现的。在面向对象编程思想中,“下德”是对纯虚抽象方法的覆盖,是对对象接口的实现。“下德为之”,提供了真正的代码实现。“其用不体”,满足了不断变化的需求。
多态性使得程序员在以后不费多大力气就可以派生对象,实现程序。假设程序员在为 Car Bicycle 构建应用程序,并不知道还存在 Truck ,但这并不要紧。程序员可以为继承 vehicle 类的 car Bicycle 类撰写覆盖 stop() 的方法。这样,在程序中只要把创建的 car Bicycle 对象转型为 Vehiole 的类型,使用 vehicle stop() 方法,就可以让 car Bicycle 对象动态绑定符合自己要求的 stop() 方法。即使后来新增了 Truck 对象,仍然是调用 Vehiole stop() 方法,并不需要改动程序。
“物有自然,事有合离。有近而不可见,有远而可知。近而不可见者,不察其辞也;远而可知者,反往以验来也。”(《 鬼谷子》 抵戏第四)
虽然客观事物复杂,用户需求是变化的,但是其中也有一定的内在规律。
近而不可见者,只看眼前的具体功能实现,不察事物的一般发展规津,心中只有孤立的数据和机械的流程,一旦“事有合离”,则措手不及,难以应对。这样的编程是静态的、机械的、难以维护和扩展的。
远而可知者,善于发现规律,重视代码重用,眼中尽是有机的对象和和谐的关系,即使需求改变,也能从容应对,游刃有余。这样的编程是动态的、灵活的、可维护和可扩展的。
Paul Kimmel 在《 Delphi6 应用开发指南》中说“以非面向对象的方法去使用面向对象工具是一个错误。使用 Delphi 编写结构化程序可以很快地到达 beta 版——你的程序可能永远脱离不了 beta 版。迅速得到错误的答案,仍然是错误的。”
同样是使用 Delphi ,如果没有面向对象的编程思想,好比“不察其辞”,最终仍然是“近而不可见”,难以开发出优秀的系统。惟有潜心苦练,悉心总结,掌握面向对象编程思想的精髓,才能运“气”自如,“反往以验来也”,最终达到“远而可知”的境界。
评论:
看过这片文章本人方知自己之不足。
本人认为现在本人正在用“器”。正要向气转换。本人使用之器为vs2005
借助.net的强大补自己的气力不足。现在要向java拓展取c#java 编程思想之精华。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值