程序員的 職業的樂趣 和 職業的苦惱

摘自《人月神話》


職業的樂趣
編程爲什麼有趣?作爲回報,它的從業者期望得到什麼樣的快樂?
首先是一種創建事物的純粹快樂。如同小孩在玩泥巴時感到愉快一樣,成年人喜歡創建事物,特別是自己進行設計。我想這種快樂是上帝創造

世界的折射,一種呈現在每片獨特、嶄新的樹葉和雪花上的喜悅。

其次,快樂來自於開發對其他人有用的東西。內心深處,我們期望其他人使用我們的勞動成果,並能對他們有所幫助。從這個方面,這同小孩

用粘土爲“爸爸辦公室”捏製鉛筆盒沒有本質的區別。

第三是整個過程體現出魔術般的力量——將相互齧合的零部件組裝在一起,看到它們精妙地運行,得到預先所希望的結果。比起彈珠遊戲或點

唱機所具有的迷人魅力,程序化的計算機毫不遜色。

第四是學習的樂趣,來自於這項工作的非重複特性。人們所面臨的問題,在某個或其它方面總有些不同。因而解決問題的人可以從中學習新的

事物:有時是實踐上的,有時是理論上的,或者兼而有之。

最後,樂趣還來自於工作在如此易於駕馭的介質上。程序員,就像詩人一樣,幾乎僅僅工作在單純的思考中。程序員憑空地運用自己的想象,

來建造自己的“城堡”。很少有這樣的介質——創造的方式如此得靈活,如此得易於精煉和重建,如此得容易實現概念上的設想。(不過我們

將會看到,容易駕馭的特性也有它自己的問題)

然而程序畢竟同詩歌不同,它是實實在在的東西;可以移動和運行,能獨立產生可見的輸出;能打印結果,繪製圖形,發出聲音,移動支架。

神話和傳說中的魔術在我們的時代已變成了現實。在鍵盤上鍵入正確的咒語,屏幕會活動、變幻,顯示出前所未有的或是已經存在的事物。
編程非常有趣,在於它不僅滿足了我們內心深處進行創造的渴望,而且還愉悅了每個人內在的情感。


職業的苦惱
然而這個過程並不全都是喜悅。我們只有事先了解一些編程固有的煩惱,這樣,當它們真的出現時,才能更加坦然地面對。

首先,必須追求完美。因爲計算機也是以這樣的方式來變戲法:如果咒語中的一個字符、一個停頓,沒有與正確的形式一致,魔術就不會出現

。(現實中,很少的人類活動要求完美,所以人類對它本來就不習慣。)實際上,我認爲學習編程的最困難部分,是將做事的方式往追求完美

的方向調整。

其次,是由他人來設定目標,供給資源,提供信息。編程人員很少能控制工作環境和工作目標。用管理的術語來說,個人的權威和他所承擔的

責任是不相配的。不過,似乎在所有的領域中,對要完成的工作,很少能提供與責任相一致的正式權威。而現實情況中,實際(相對於正式)

的權威來自於每次任務的完成。
對於系統編程人員而言,對其他人的依賴是一件非常痛苦的事情。他依靠其他人的程序,而往往這些程序設計得並不合理,實現拙劣,發佈不

完整(沒有源代碼或測試用例),或者文檔記錄得很糟。所以,系統編程人員不得不花費時間去研究和修改,而它們在理想情況下本應該是可

靠完整的。

下一個煩惱——概念性設計是有趣的,但尋找瑣碎的bug卻只是一項重複性的活動。伴隨着創造性活動的,往往是枯燥沉悶的時間和艱苦的勞動

。程序編制工作也不例外。

另外,人們發現調試和查錯往往是線性收斂的,或者更糟糕的是,具有二次方的複雜度。結果,測試一拖再拖,尋找最後一個錯誤比第一個錯

誤將花費更多的時間。

最後一個苦惱,有時也是一種無奈——當投入了大量辛苦的勞動,產品在即將完成或者終於完成的時候,卻已顯得陳舊過時。可能是同事和競

爭對手已在追逐新的、更好的構思;也許替代方案不僅僅是在構思,而且已經在安排了。

現實情況比上面所說的通常要好一些。當產品開發完成時,更優秀的新產品通常還不能投入使用,而僅僅是爲大家談論而已。另外,它同樣需

要數月的開發時間。事實上,只有實際需要時,纔會用到最新的設想,因爲所實現的系統已經能滿足要求,體現了回報。
  誠然,產品開發所基於的技術在不斷地進步。一旦設計被凍結,在概念上就已經開始陳舊了。不過,實際產品需要一步一步按階段實現。實

現落後與否的判斷應根據其它已有的系統,而不是未實現的概念。因此,我們所面臨的挑戰和任務是在現有的時間和有效的資源範圍內,尋找

解決實際問題的切實可行方案。
這,就是編程。一個許多人痛苦掙扎的焦油坑以及一種樂趣和苦惱共存的創造性活動。對於許多人而言,其中的樂趣遠大於苦惱。而本書的剩

餘部分將試圖搭建一些橋樑,爲通過這樣的焦油坑提供一些指導。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章