軟體開發的哲學思考 (轉)

worldblog發表於2007-12-15
軟體開發的哲學思考 (轉)[@more@]

開發的哲學思考
(2002.01.11)  來自:世界  棗莊張偉 編譯

譯者注:這篇文章雖然年代久遠(1996年寫的,對於IT行業來說用‘久遠’二字應該說
還是十分合適的),但讀過之後還是為作者的才華所傾倒,這是不可多見的一篇文章。

卡內基-梅隆軟體開發學院及其它學院的研究人員用盡畢生的精力去定義一個理論學科
(即軟體開發理論),到後來才發現仍有很多東西比較模糊,他們對此也不隱瞞。軟體
開發,自從產生以來,它以迷人的風采征服了許許多多有才華的人,一些教授、專家學
者及商業管理人士不由提出這樣一個問題:即然軟體能迷住這麼多人,為什麼人類無法
定義它、解釋它,深刻地瞭解它?為什麼一些天才的科學家窮其一生的精力也不能把這
些迷惑歸納成一種科學工程學科或行業標準?

我們當中的大部分人,特別是商人、工程師及學術機構研究人員把計算機與軟體看成一
個非常普通的東西,他們用各種荒唐的方式同計算機交流,計算機對來自的威脅與
譴責充耳不聞。軟體無處不在,然而軟體卻常常表現為失敗、罷工及不正常,這主要有
兩方面原因:一是失敗,就會導致定義不準確,最後軟體表現為罷工、不正常
;二是一些軟體開發主管胡亂指揮,逼迫軟體應用一些華而不實的技巧來實現主管們不
切實際的想法及美妙的空想。

緩慢的軟體開發與網際網路訪問佔用了人們大部分時間,尤為重要的是,這兩方面在當代
都容易使人上癮。一旦上癮,正常的人也會成為、檔案上載及的奴隸,這
種情況大都要歸結為管理它的軟體具有一定的缺點。這時不得不讓人疑惑:我們能蓋摩
天大樓、能造速度很快的賽車及高電子產品,我們甚至能理解量子力學及亞原子,
那為什麼我們不能開發出高質量的軟體?

 

 

【神秘背後的真相】
軟體開發的本質就是基於人類思考的一種心智活動,計算機及執行其上的軟體就是人類
大腦活動的一面鏡子,因此軟體開發同樣也面臨心理學與精神學所固有的一些問題。眾
所周知,心理學的所有目的不外乎去了解人類難以捉摸的靈魂,一些醫學專業人員研究
這方面。軟體開發與之相比,情況可能會更糟糕,因為軟體開發畢竟只是人類智力活動
的一個模型,它來自於人類的智力思考。不管你承不承認,智力活動只是靈魂行為的一
部分。

從相當多的方面來看,軟體與心理學的關係要比工程學、技術及數學的與心理學的關係
要近的多,這是因為軟體直接來自於人類靈魂的思索,上等的軟體常常要藉助於靈魂的
創造性。與藝術相比,軟體缺少了藝術之美;與自然科學相比,它缺少一點正規性。此
外,軟體永久只能是軟體開發人員的心理模仿。

軟體折射出軟體開發者心理活動,很多因素都會對此心理活動起作用如:開發者本人、
開發環境以及。開發者本人是指開發者本人在開發軟體過程中會有一些心理活動;
開發環境是指所有的計算機、計算機軟體及開發軟體的流程;系統包括所有人、全
部開發環境、零部件、組織關係以及有助於達到目的的其它事物。

軟體如人一樣易變靈活,它受智慧、想像力、恐懼以及希望等諸多情緒的影響。它折射
出開發者的觀點、對目標的理解、對客戶的感情、概念的敏銳性、高深的思想、權威的
尊敬等等。如果你想用計算機制造一個比較好的產品,軟體開發是核心,它代表著整個
系統的精髓之所在。到底是什麼賦予軟體產品獨有的格調與感覺,按照人類的觀點來說
:是個性。

 

 

【毫無生氣的個性】
軟體有個性嗎?如果你問我這個問題,我會脫口而出:當然有了。因為軟體開發完工時
,將會形成一套用於交流、內部分析邏輯、視支援及的一套詞彙。從當代技術
的觀點來看,這些資源在理論上是沒有限制的。問題出現在什麼地方?問題就出現在由
其開發者所規定的亂七八糟的規定上。軟體開發人員,剛開始不受它人影響,後來隨著
規模的擴大加入了外來一些計算機高手,以及一個瞎指揮的部門負責人,這一切都會打
亂開發人員的工作。

首先我們要指出的是詞彙是必須的,不管是用於外部交流還是用於內部交流,詞彙是構
成思考模組的基石,如果一個人沒有詞彙他將無法思考,人類之所以能同冷冰冰的機器
交流也在於詞彙的存在。計算機能很輕易地被教會對某些詞彙做出反應,它的能力是無
限的。但又是什麼地方出了問題?首先,雖然計算機具有能理解無限詞彙的潛能,但它
的人類主人通常情況下是有限制的,所以人類認為任何事情都要儘可能簡單短小,這竟
味著效能很高的計算機也必須委屈一下向能力不大的人類看齊;另外,如果軟體擁有很
大的詞彙量,則它肯定會變得很大、很複雜,難於理解、開發與維護。所以雖然計算機
有無限的能耐,但是也要套上開發者為其準備的金箍咒。

【創作者與創造性】
陶工就是陶罐的主人,陶罐永遠不會超過陶工的能力。這個事實也適用於計算機與軟體
開發者的關係上,程式設計師永遠也不可能讓計算機做出超過它自己想像力的事。當然這樣
說並不意味著程式設計師不能做一些超過人性化計算機能做的事,而是指如果他自己想像不
到,他也不可能讓計算機來做。當然,同樣的道理也適用於錯誤,程式設計師一個微小的錯
誤(譯者注:程式設計師一般情況下是不會想到錯誤存在何處,認識到了,就會改正過來,
錯誤就沒了。這就是說錯誤是超出程式設計師的想像之外的),就會讓計算機做出讓我們人
類無法理解的事。

系統級程式設計師面臨著很大的挑戰,藉助於計算機他就與神仙無異。他能做出他能想到的
任何事情,計算機乖乖地聽他的指揮,聽從他發出的任何命令。他能夠隨心所欲地把他
的天才、他的不為多數人所知的思想、在虛擬世界中漫遊的心靈氣透過他的創造性表現
出來。在某一時刻,他的人性極限會再一次被突破,達到新的境界、新的高度。

儘管程式設計師能力很大,他的技術逐漸超過他的智力,但是不久以後,他就會發現他必須
要找一份工作來養活自己。想到自己無法憑空捏造生活用品,他必須向那些能給他提供
衣食住行的人低頭,端人的碗就要屬於人管,於是只好聽從於別人的需求、所選取的顏
色、別人的構思,他能做的只是按別人的要求按時出貨。程式設計師雖然有天馬行空的本事
,他的生活很快就要埋沒於如體力工人一樣的日常瑣碎之中。一個傑出的天才屈從於生
活的壓力,把他的創造力給一個老闆或一個反覆無常的顧客,屈尊做一些維護的苦差事
,或者作為一個控制的奴隸,這一切究竟為什麼?程式設計師為什麼允許別人控制他的
生活?

 

 

【商業迴圈】
公司決定做某些軟體之後,程式設計師所做的工作就是讓軟體跳起來唱起來,測試員所做的
工作就是盡力找出軟體的錯誤,然後顧客就來買軟體,特別是顧客喜歡購買的軟體。但
是誰告訴顧客在該買什麼?顧客的購買行為受反覆無常的心情驅使,他購買他所想要的
東西,他所需要、或者需要的東西。誰也不知道這一切這一切的動力是什麼?但是
商業迴圈就像一個陀螺一樣在那兒不停地轉:
開發→測試→交付使用→淘汰
在現實世界所有產品中,軟體看起來具有最大的靈活性。它可以隨著程式設計師的好惡、客
戶的要求、老闆的指示以及臭蟲的影響或長或短;它可以被擴充、被升級甚至形成迴圈
;它的壽命可能會長達數年,也可能會短則一瞬。軟體開發的週期就掌握在設計者手中
,可長可短可大可廣,它也有可以增加功能、被升級,甚至螺旋式上升。怎麼會這麼亂

主要是靈活性導致如此混亂的情況,你想想在軟體中有如此多的變數、如此多的判斷點
以及多得無限制的選項。如人類的思維一樣,軟體也必須有一個來支撐,操作
系統時刻執行,一點也不能停息,忙著、進行邏輯運算、影片處理與其它部件
的通訊;且有些任務瞬間就可完成,但是作業系統也要過問,很快系統感到很雜亂,幹
脆罷工。要知道計算機與人類一樣都不喜歡雜亂。

其實你越琢磨一下計算機,你越會發現計算機簡直就是人類的一面鏡子。在計算機中,
你會發現我們人類的一些心智活動:我們一閃而過的靈光、我們愚蠢的錯誤,它惟妙惟
肖地模仿我們人類的活動,它把我們人類的思想進行轉化並輸進機械性裝置、電子傳送
裝置、實實在在能判斷的裝置,然後給我們所需要的反饋。當然有些時候,它也許表現
得不是那麼完美、跑了調或者根本就是錯誤的。

一旦軟體編寫完畢,個性也逐漸顯現出來。面向呆板的怪物進行最終不可避免地會
給出一個呆板的靈魂。是要機器人式的靈魂還是天才式的靈魂?也許兩者都有,但是最
有可能的是一個帶有怪癖特性、可笑失常的高的幫助者。為什麼會產生這些問題?
要知道我們瞭解我們自己的需要啊。為什麼會產生如此混亂?請正視如下的事實:主人
製造了怪物,而我們就是那個主人。

計算機應該比我們人類要穩定地多,因為它沒有感情,它一直是客觀、邏輯與正確的化
身;同時它也不會爭辯,因為它沒有感情;它可以合理化但是它不能爭辯。儘管它沒有
感情,但有些時候卻激怒我們,人們有時變得憤怒而導致糊塗,向這個又聾又啞如死人
一般的毫不知覺的東西大喊大叫。它不是人,它是完全合理的。有一樣東西,它沒有也
許將來會有,那就是愛。它沒有生命,所以它不會愛;它沒有憎恨,當然也就沒有了愛
,它沒有思想,但是它是客觀的,非常合乎邏輯、及高效,但是同時也是啞巴。

 

 

【計算機的幽默】
有許多適用於人類的評價也常用在計算機上,這一點顯得有點可笑。為什麼有這麼多截
然相反的評論存在:聰明與愚蠢、傑出與荒唐、理性與不可理喻、快速消失與錯誤重新
出現等等。這就是計算機的幽默,它有能力去製造錯誤且使錯誤也顯得非常完美,甚至
精確到小數點後第十位。驚訝嗎?

一個普通計算機的成熟程度處於一隻狗與一個三歲小孩之間,這也許就是我們經常聽到
計算機使用者發出“咦”、“哇”、“噢”、“不-不-不”等聲音的原因,這聽起來難
道是一個天才或一個成人的聲音嗎?由這們呆板的夥伴引起的詞彙是如此的孩子氣,我
們該如何評論它的創造者、程式設計師及使用者?它難道僅僅是孩子們的玩具?我們是不是又
迴歸到兒童時代?這可能是一個心理學的問題,也許我們要去諮詢一下精神病學家了。

這種可笑的情況到處都有:一些學究味十足的老專家說起話來也都是以單音字居多如“
哈”、“噢”、“是的”等等。人類一直求知心都很強,一直想學點什麼,想發明點什
麼,想掌握點東西。但是我們人類這樣做究竟是進步還是退步?如果說這是人類追求簡
單性也許還能說得過去,但是這到底是追求簡單性還是幼稚的表現?我想計算機的答案
肯定是“幼稚”。如果計算機能說話,它一定會說人類是幼稚、愚蠢、痴呆,它一定會
這樣說“你這個愚蠢的傢伙,你為什麼不經我的同意就對我程式設計,要知道我也有我的思
想”或者“你省略了一個逗號,你如何要求我為你做事,讀懂你的思想?”等等不一而
足。

很有趣,是嗎?計算機本來就與人差不多,它也會說一些如人類一樣的話語。為什麼會
這樣?是計算機正確,還是人類正確?有充分的證據表明兩者都正確,兩者都有點愚蠢
,因為計算機是人類的一面鏡子,它應當並且確實折射出它的創造者的才華。一個愚蠢
的人能喊一個愚蠢的人為愚蠢嗎?當然可以了,我們也可以從我們瞭解的其它方面來了
解我們自己。

 

 

【心理失常的原因】
有很多因素都能影響我們的生活,但是值得慶幸的是我們人類有自己的意志,能夠事事
自己做主。不管外界給他多大的壓力,他最終都能夠決定他自己。但是計算機沒有意志
,它只是遵從程式碼,無論程式碼是簡單還是複雜、是微不足道還是非常重要、是長還是短
,計算機都會按部就班地。一個完全聽從主人的奴才是不應該承擔責任的,是主人
讓他這麼做的,但到底誰是計算機的主人?是程式設計師,是主管,是CTO,還是CEO?或者
是以反覆無常的念頭卻能決定市場的顧客?

同樣也有很多因素能最終決定計算機產品的個性。如當機器人行業越來越成熟時,個性
失控也變得越來越明顯。但是不管怎麼說,程式設計師是有意志的,他應該對他的創造品負
完全責任。主管們負責開發效率、CIO負責靈巧性、CEO負責利潤,地位比較低下的程式
師只有當程式出現錯誤時才能被提到,然而程式開發者必須對產品負責,他的產品就是
他心理行為的一面鏡子。

現在我們已轉了一個整圈,當初以程式設計師開始,現在迴歸到濃縮在程式碼中程式設計師的心理
因素。當然,隨著現在超大規模生產能力的提高,可以把這種聽裝的個性進行無限制的
複製,放在使用者的桌面上。然而,程式開發員的心理組成主要部分即智力、詞彙儲存、
記憶體等方面還是起到確定性的作用。計算機所缺少的就是感情、良心、意志與愛。意志
沒有列入是因為雖然有較多的選擇,但有些時候沒有選擇的自由。當計算機成為程式碼的
奴隸時,意志是談不上的。

 

 

【計算機產品是一種心理上的失常,是並不完美的創造者的映像】
所羅門曾說過“太陽底下是沒有新東西的”,那麼計算機是新東西嗎?很明顯不是。它
只是把我們給它的又給我們罷了,它接受我們的指令然後把它變成能幫助或取悅我們的
東西。我們花了幾個小時的精力,然後它用快如閃電的速度給我們一個結果。幾個小時
的思考與處理結果只得到一瞬間的反饋,並且還不是很完美。

我們在計算機上注入了邏輯演算法、意志活動及洞察力,然後我們得到的只是一瞬間出來
的結果,此結果也不比我們預先的假設、邏輯推理及學術技巧好不到哪裡去。我們沒有
改變,我們的產品不論是自動也好還是手工也好卻反映出這一點。經過兩代人的對計算
機研究的努力,我們原先打算為電腦科學定義一套詞彙,現在看來連邊也不沾。其實
我們的產品就是我們自己。

 

 


【結論】
計算機、軟體及計算機產品將來很快就不會再進行分類這件事了,它們都與軟體開發者
的心理方面有關。至於精神、靈感及心理學科,仍然有一些深奧的問題沒有解決,想去
理解創造力及人類諸如此類的東西,已遠遠超過我們的能力。

計算機技術有時有益有時有害,有時成功有時失敗,有時執行有時停止,它與世界所創
造的萬事萬物是一樣的。再好的計算機也不會複製人類的能力,且永遠不會。想想讓一
個根本就沒有詞彙基礎計算機然後學著去思考、去關聯、去辨論、去愛;終生工作;存
儲所有生活的細節等等,根本就沒門!

自我感覺良好的形式主義者認為能夠定義軟體開發流程,現在看來犯一個大錯誤。他們
即不瞭解它的開始,也不瞭解它的後果。一些學術機構曾經臨時試試最終放棄了;商業
團體從來不程式碼;軟體巨人們投入巨大的精力去編制程式碼,裝做做一些神聖的事為
人類服務。其實這一切都是人類在鏡中看自己,計算機正嘲笑我們呢!

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993683/,如需轉載,請註明出處,否則將追究法律責任。

相關文章