OO,OO以后,及其极限(6)
6. 最后的极限
OO之后如果FO,那么我们当然要问,FO之后又是什么?再往后哪?有没有一个最后的极限?若有,极限何在?这是个很困难的问题,不过还是让我们继续思考下去,看看能有些什么结果,尽管它可能会是十分愚蠢和幼稚。
我们知道,软件的实质是人们以计算机编程语言为桥梁,将客观感知世界映射于计算机世界中去,以解决人们在客观感知世界中要解决的问题。这里牵涉三个主要的范畴:
客观感知世界--------计算机编程语言----------计算机世界
(1)计算机世界
在计算机世界中,可以想象的是,单位面积的一块芯片上可以集成的晶体管数目总会有个上限,摩尔定律早晚要失效。另外,现在多数电脑采用的冯.诺依曼结构也需要被突破。(如并行计算的研究)
(2)计算机编程语言
现在的计算机编程语言,都是某种类型的形式语言。要解决一个问题,首先我们必须为它构造算法。也就是说,对于没有算法的问题,我们是束手无策的。这类问题被成为是“不可计算的”。它们的解不能由图灵机来产生。这是我们面临的一个极限。
那么一个问题有了算法,是不是就一定可以解决哪?很遗憾,答案是不。对于那些NP(非多项式)问题,尤其是NP完备的问题,尽管存在算法,我们仍然是无法在多项式时间内解决的。著名的“哈密顿线路问题”和“旅行推销员问题”都属于这类问题。它们的共同特征是,当问题的规模(或复杂度)线形增加时,解决该问题所要化的时间将呈指数上升,以至于它们尽管理论上是可求解的,但实际上却是不可能的。因为要花费的时间可能已经超过了宇宙的寿命。这也是我们面临的一个极限。
还需要指出,现在的计算机语言作为形式语言的一种,也必然具有形式语言自身所有的局限性。数学的发展史上,曾经有三次危机,第三次危机是有罗素的一个“佯谬”引发的悖论危机。为解决此危机,希尔伯特提出了宏伟的形式化规划,企图使数学一劳永逸地处于无可争辩的安全基础之上。可是,1931年奥地利25岁的天才数学逻辑学家歌德尔提出了一条划时代的定理,粉碎了希尔伯特形式化的美梦。哥德尔定理向我们展示,公理系统本身的协调性的陈述在被编码成适当的算术命题后,将成为一道这样“不能决定的”不能决定的命题。想象一个表达式既不为真,也不为假,它的真假对一个形式系统(计算机)而言它是不可判定的。因此在这方面,哥德尔定理是我们面临的又一个极限。
(3)客观感知世界
现在让我们假设软件工程已经发展到了这样一个理想的境界,有一天我们实现了自然语言编程,是否就万事大吉了?换句话,自然语言是否能很好地描述、表达客观感知世界?
维特根斯坦在《逻辑哲学论》里已经指出了。
*世界的意义必定存在于世界之外;
*显然伦理学是无法表述的。 伦理学是超越现实的;
*实际上存在着不可表达的东西;这显示了它的存在;它是神秘的。
(见《逻辑哲学论》第六节)
也就是说,外部世界中存在一些我们可以感知却无法用语言来表达的东西。
他接着说:
“对于那些不可言说的,必须保持沉默。”(Whereof one cannot speak,thereof one must be silent)
这句话,成为我们最后的极限。
在讨论完这三个范畴中我们将面临的主要问题后,我们最后来讨论一下人的主观世界对软件及软件开发的影响。
7. 极限之外的空间
世界可以分为主观想象世界和客观可感知世界,或者说是内世界和外世界。其中,主观想象世界是计算机从未涉足的空间。这是属于我们个人的私有空间,充斥着我们自己离奇古怪的幻想和起伏不定的情绪。它具有极大的跳跃性和不确定性,常常以直觉、想象的方式进行着自己的活动。它们通常是语言所不能表达的。
尽管这个内世界是如此的复杂、混乱、难以捉摸,但它却是我们与生俱来的一部分。
我们就是这样的人。
就是这样的人从事着软件开发的工作。
这样的人开发出来的软件究竟在多大程度上是对客观世界不折不扣的映射?还是这个映射过程已经被扭曲或掺杂了?软件开发者的这个主观想象世界,他们的欢乐、沮丧、奇想、恐惧、希望等等,究竟是怎样影响着软件开发的质量?
人们是要用计算机来复制整个世界?还是来复制人本身?
人们是在扮演上帝的角色吗?
这样的问题我实在不知该如何去解答,甚至觉得根本无从下手。
如果你还有足够的耐心读到这里,请你也来想一想,希望它们不会使你头疼。
:)
最后,我将引用我从网上偶尔发现的一篇文章中的话作为结束语:
“自以为是的立法者(人类)犯下了一个大错,以为自己能定义整个软件开发过程。他们既不了解其开始也不了解其结果。学术界试了一下,然后就知难而退了。商业界则对其毫无办法。大型软件开发商们斥巨资来制造代码,明明想要扮演上帝的角色,却还装作自己是人类的公仆。所有人都在盯着镜子里的自己。计算机却在一旁偷偷的笑。”
“ The self-righteous,legalists have made a big mistake in thinking they can define the software development process. They understand neither its beginnings or its consequences. The academic community tried it briefly and then gave up. The business community never cracked the code. The giant software houses are pouring enormous energy into process of creating code,playing God,and pretending to be servants of mankind. All are looking at themselves in the mirror. The computer is laughing back.”
----《完》----
--------------------------------------------------------------------------------
后记:
大概4月份的时候,开始写这个题目,一口气写了4篇,贴到水母清华的软工板上。后来主要因为懒,就停了下来。多亏有几位网友来信催促和鼓励,才使我有机会逼自己坐下来完成最后的3篇。这里特向他们表示感谢! 尤其要感谢seraph和xiaobo。
看屏幕上的字的确是件累人的事,所以如果你竟然有耐性看到了这里,我一定要向你表示佩服了。 :)
最后说明,本文不是一个正式版,只是一个学习和思考的心得体会,行文仓促,也没有仔对照细修改。文中的错误和不恰当的翻译均由我全部负责,欢迎指正。
-----------------------------------------------------------
AKA的waterbird