優秀程式設計的“藝術”
優秀的程式碼是一件藝術品?或者軟體工藝宣言言過其實了?成為一名“優秀”的程式設計師,有什麼要求?
設想你僱傭了一名水管工,讓他更換地下室的舊管道。這個傢伙在工作之前、之中、之後,他就沒有停止過談論他的管道工藝的藝術美。
“看看那根管道的角度。看看它與牆壁對齊是多麼地美?如果你問我,那麼它就是一件藝術品。”
這和程式設計師沒什麼區別。沒有什麼比 不可一世的程式設計師把他或她自己的程式碼看做是藝術品 更糟糕的了。這個類推借用了”敏捷麻煩製造者”和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對我們說。“然而,我不想要一個堅持談論管道系統優雅與審美的、恃才傲物的管道工。”
- 原文地址:http://jaxenter.com/programming-art-and-software-craftsmanship-112123.html
- 注1:行為驅動開發(縮寫BDD)是一種敏捷軟體開發的技術,它鼓勵軟體專案中的開發者、QA和非技術人員或商業參與者之間的協作。BDD最初是由Dan North在2003年命名,它包括驗收測試和客戶測試驅動等的極限程式設計的實踐,作為對測試驅動開發的迴應。在過去數年裡,它得到了很大的發展。http://zh.wikipedia.org/wiki/行為驅動開發
來自: www.labazhou.net
相關文章
- 優秀的程式設計師就像藝術家?程式設計師
- 優秀程式設計師的優秀歷程程式設計師
- 《程式設計師程式設計藝術》程式設計師
- 優秀程式設計師因何而優秀?程式設計師
- Redux中的程式設計藝術Redux程式設計
- 分享一組優秀的中文藝術海報
- Java併發程式設計的藝術,解讀併發程式設計的優缺點Java程式設計
- 優秀程式設計技術公眾號推薦程式設計
- 計算機程式設計藝術計算機程式設計
- 優秀Java程式設計師的程式設計風格Java程式設計師
- 程式設計藝術家之路程式設計
- 對優秀程式設計師的思考程式設計師
- 優秀程式設計的18大原則程式設計
- 優秀程式設計師不一定是優秀的軟體設計師程式設計師
- Michael Feathers:程式設計的藝術程式設計
- Java併發程式設計的藝術Java程式設計
- QT QML模組的程式設計藝術QT程式設計
- 程式設計師和程式藝術家程式設計師
- 程式設計師如何保持優秀程式設計師
- Java併發程式設計藝術Java程式設計
- 談UIView Animation程式設計藝術UIView程式設計
- 如何招聘到優秀的程式設計師?程式設計師
- 你是優秀的程式設計師嗎?程式設計師
- 如何辨別優秀的程式設計師程式設計師
- 優秀程式設計的18個原則程式設計
- 優秀程式設計師的 18 大法則程式設計師
- 程式設計師常有,優秀程式設計師不常有程式設計師
- 優秀程式設計師眼中的整潔程式碼程式設計師
- 每個優秀程式設計師必須具備的技術技能程式設計師
- 程式設計師 錯錯更優秀!程式設計師
- Unix哲學(Unix程式設計藝術)程式設計
- Unix程式設計藝術,Unix哲學程式設計
- 程式設計也是一門藝術啊程式設計
- oracle程式設計藝術筆記-1Oracle程式設計筆記
- oracle程式設計藝術筆記-2Oracle程式設計筆記
- 優秀的程式設計師都有哪些習慣?程式設計師
- 做一名優秀的程式設計師程式設計師
- 優秀程式設計師的各種跡象程式設計師