直播中
OO之后如果FO,那么我們當然要問,F(xiàn)O之后又是什么?再往后哪?有沒有一個最后的極限?若有,極限何在?這是個很困難的問題,不過還是讓我們繼續(xù)思考下去,看看能有些什么結果,盡管它可能會是十分愚蠢和幼稚。
我們知道,軟件的實質(zhì)是人們以計算機編程語言為橋梁,將客觀感知世界映射于計算機世界中去,以解決人們在客觀感知世界中要解決的問題。這里牽涉三個主要的范疇:
客觀感知世界--------計算機編程語言----------計算機世界
(1)計算機世界
在計算機世界中,可以想象的是,單位面積的一塊芯片上可以集成的晶體管數(shù)目總會有個上限,摩爾定律早晚要失效。另外,現(xiàn)在多數(shù)電腦采用的馮.諾依曼結構也需要被突破。(如并行計算的研究)
(2)計算機編程語言
現(xiàn)在的計算機編程語言,都是某種類型的形式語言。要解決一個問題,首先我們必須為它構造算法。也就是說,對于沒有算法的問題,我們是束手無策的。這類問題被成為是“不可計算的”。它們的解不能由圖靈機來產(chǎn)生。這是我們面臨的一個極限。
那么一個問題有了算法,是不是就一定可以解決哪?很遺憾,答案是不。對于那些NP(非多項式)問題,尤其是NP完備的問題,盡管存在算法,我們?nèi)匀皇菬o法在多項式時間內(nèi)解決的。著名的“哈密頓線路問題”和“旅行推銷員問題”都屬于這類問題。它們的共同特征是,當問題的規(guī)模(或復雜度)線形增加時,解決該問題所要化的時間將呈指數(shù)上升,以至于它們盡管理論上是可求解的,但實際上卻是不可能的。因為要花費的時間可能已經(jīng)超過了宇宙的壽命。這也是我們面臨的一個極限。
還需要指出,現(xiàn)在的計算機語言作為形式語言的一種,也必然具有形式語言自身所有的局限性。數(shù)學的發(fā)展史上,曾經(jīng)有三次危機,第三次危機是有羅素的一個“佯謬”引發(fā)的悖論危機。為解決此危機,希爾伯特提出了宏偉的形式化規(guī)劃,企圖使數(shù)學一勞永逸地處于無可爭辯的安全基礎之上。可是,1931年奧地利25歲的天才數(shù)學邏輯學家歌德爾提出了一條劃時代的定理,粉碎了希爾伯特形式化的美夢。哥德爾定理向我們展示,公理系統(tǒng)本身的協(xié)調(diào)性的陳述在被編碼成適當?shù)乃阈g命題后,將成為一道這樣“不能決定的”不能決定的命題。想象一個表達式既不為真,也不為假,它的真假對一個形式系統(tǒng)(計算機)而言它是不可判定的。因此在這方面,哥德爾定理是我們面臨的又一個極限。
(3)客觀感知世界
現(xiàn)在讓我們假設軟件工程已經(jīng)發(fā)展到了這樣一個理想的境界,有一天我們實現(xiàn)了自然語言編程,是否就萬事大吉了?換句話,自然語言是否能很好地描述、表達客觀感知世界?
維特根斯坦在《邏輯哲學論》里已經(jīng)指出了。
*世界的意義必定存在于世界之外;
*顯然倫理學是無法表述的。 倫理學是超越現(xiàn)實的;
*實際上存在著不可表達的東西;這顯示了它的存在;它是神秘的。
?。ㄒ姟哆壿嬚軐W論》第六節(jié))
也就是說,外部世界中存在一些我們可以感知卻無法用語言來表達的東西。
他接著說:
“對于那些不可言說的,必須保持沉默?!保╓hereof one cannot speak,thereof one must be silent)
這句話,成為我們最后的極限。
在討論完這三個范疇中我們將面臨的主要問題后,我們最后來討論一下人的主觀世界對軟件及軟件開發(fā)的影響。
7. 極限之外的空間
世界可以分為主觀想象世界和客觀可感知世界,或者說是內(nèi)世界和外世界。其中,主觀想象世界是計算機從未涉足的空間。這是屬于我們個人的私有空間,充斥著我們自己離奇古怪的幻想和起伏不定的情緒。它具有極大的跳躍性和不確定性,常常以直覺、想象的方式進行著自己的活動。它們通常是語言所不能表達的。
盡管這個內(nèi)世界是如此的復雜、混亂、難以捉摸,但它卻是我們與生俱來的一部分。
我們就是這樣的人。
就是這樣的人從事著軟件開發(fā)的工作。
這樣的人開發(fā)出來的軟件究竟在多大程度上是對客觀世界不折不扣的映射?還是這個映射過程已經(jīng)被扭曲或摻雜了?軟件開發(fā)者的這個主觀想象世界,他們的歡樂、沮喪、奇想、恐懼、希望等等,究竟是怎樣影響著軟件開發(fā)的質(zhì)量?
人們是要用計算機來復制整個世界?還是來復制人本身?
人們是在扮演上帝的角色嗎?
這樣的問題我實在不知該如何去解答,甚至覺得根本無從下手。
如果你還有足夠的耐心讀到這里,請你也來想一想,希望它們不會使你頭疼。
:)
最后,我將引用我從網(wǎng)上偶爾發(fā)現(xiàn)的一篇文章中的話作為結束語:
“自以為是的立法者(人類)犯下了一個大錯,以為自己能定義整個軟件開發(fā)過程。他們既不了解其開始也不了解其結果。學術界試了一下,然后就知難而退了。商業(yè)界則對其毫無辦法。大型軟件開發(fā)商們斥巨資來制造代碼,明明想要扮演上帝的角色,卻還裝作自己是人類的公仆。所有人都在盯著鏡子里的自己。計算機卻在一旁偷偷的笑。”
“ 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篇,貼到水母清華的軟工板上。后來主要因為懶,就停了下來。多虧有幾位網(wǎng)友來信催促和鼓勵,才使我有機會逼自己坐下來完成最后的3篇。這里特向他們表示感謝! 尤其要感謝seraph和xiaobo。
看屏幕上的字的確是件累人的事,所以如果你竟然有耐性看到了這里,我一定要向你表示佩服了。 :)
最后說明,本文不是一個正式版,只是一個學習和思考的心得體會,行文倉促,也沒有仔對照細修改。文中的錯誤和不恰當?shù)姆g均由我全部負責,歡迎指正。