優秀編程的“藝術”
英文原文:The ‘art’ of good programming
優秀的代碼是一件藝術品?或者軟件工藝宣言言過其實了?成為一名”優秀“的程序員,有什么要求?
設想你雇傭了一名水管工,讓他更換地下室的舊管道。這個家伙在工作之前、之中、之后,他就沒有停止過談論他的管道工藝的藝術美。
”看看那根管道的角度。看看它與墻壁對齊是多么地美?如果你問我,那么它就是一件藝術品。“
這和程序員沒什么區別。沒有什么比不可一世的程序員把他或她自己的代碼看做是藝術品更糟糕的了。這個類推借用了”敏捷麻煩制造者”和 BDD【注1】創立者 Dan North 的一篇廣受贊譽的文章,Dan North 激烈地批判了軟件工藝宣言,論證了“編程不是藝術”。
軟件工藝宣言
宣言的作者 Kevlin Henney、Bob Martin、Corey Haine 和 Glenn Vanderburg 揭示了下面幾項將通往軟件工藝的大門:
- 不僅是可運行的軟件,而且是精心設計的軟件。
- 不僅響應變化,而且穩步增加價值。
- 不僅個體與交互(Individuals and Interactions),而且是專家社區。
- 不僅僅是客戶協作,而且是有生產力的合作伙伴。
North 的問題在于,軟件開發者的自尊經常妨礙其成為優秀的軟件項目。North 談到,用“精心設計的軟件”這種榮耀的概念進一步加壓到自尊上,是達不到預期的。Webservice 和 J2EE 就是最近的項目例子,軟件藝術性的崇高詮釋部分地導致了項目的失敗。
優秀的編程
你或許已經知道了來自于小型 IT 項目的這種問題。某個開發者主張使用特定技術是因為審美(而非務實)的原因。從此就每況愈下了。
根據 North 的觀點,代碼優美是因為它能有效地運行,而不是因為審美上有吸引力。不應該太計較代碼看起來怎么樣,而是看代碼在從A點到B點帶來的一段信息是多么可靠、高效。
“一個技術嫻熟的編程團隊可以在非常短的時間里交付讓人驚奇的業務結果。一名真正的專家——真正的工匠——將理解埋葬在、比如我們把企業軟件稱作的雜亂里的、優雅的簡單,并整理清楚。” ——Dan North
但是悲哀的是,甚至那些優秀的程序員經常忘記優秀軟件的核心職能——軟件工藝宣言的過分強調往往是禍因。
“軟件從業者—特別具有諷刺意味的是優秀的軟件從業者—經常忘記這一點。他們愛上了軟件本身,開始把他們自己看做軟件工匠。”——Dan North
開發者需要多大的才能?
這里有個引起整個爭論的問題:軟件工程是一種藝術形式嗎?焦點集中在對他們的工作充滿激情的有熱情的專家和只為薪水工作的程序員之間的掙扎上。
據說性能和效率在軟件行業的差異正在縮小,但是就成為優秀開發者的條件定義而言,沒有達成一致或被認可的方法。Dan North 說,“一名真正偉大的程序員勝過數百個為錢做事的程序員,在數小時或數天就可以交付,而普通程序員要用數周或數月。”
“做為軟件解決方案的買家,難道你不想知道你的系統是被大師級工匠而非拿薪水的人開發的?你支付了錢,你有權保持某種信心。讓我們搞清楚怎樣提供這種軟件。”——Dan North
North 聲稱,“架構之美”無助于我們區別好壞。任何程序員都能把他或她自己稱作軟件工匠,滔滔不絕、高談闊論軟件架構的“美”。North 對我們說,他將“樂于看到有人根據結果導向和取悅客戶來重寫軟件工藝宣言。”
地下室與代碼
房主不關心他們的水管看起來如何,只要它們不漏水就行。軟件同樣如此。客戶和用戶都不關心它是如何運轉的,尤其不關心它內部看起來是否“美”。
“同樣,我想讓專家級電工而非新手給我的屋子布線,我想讓專家級程序員涉足我的業務,”North 對我們說。“然而,我不想要一個堅持談論管道系統優雅與審美的、恃才傲物的管道工。”
- 注1:行為驅動開發(縮寫 BDD)是一種敏捷軟件開發的技術,它鼓勵軟件項目中的開發者、QA 和非技術人員或商業參與者之間的協作。BDD 最初是由 Dan North 在 2003 年命名,它包括驗收測試和客戶測試驅動等的極限編程的實踐,作為對測試驅動開發的回應。在過去數年里,它得到了很大的發展。http://zh.wikipedia.org/wiki/行為驅動開發
<span id="shareA4" class="fl">
</span>