優秀程式設計的“藝術”
優秀的程式碼是一件藝術品?或者軟體工藝宣言言過其實了?成為一名“優秀”的程式設計師,有什麼要求?
設想你僱傭了一名水管工,讓他更換地下室的舊管道。這個傢伙在工作之前、之中、之後,他就沒有停止過談論他的管道工藝的藝術美。
“看看那根管道的角度。看看它與牆壁對齊是多麼地美?如果你問我,那麼它就是一件藝術品。”
這和程式設計師沒什麼區別。沒有什麼比 不可一世的程式設計師把他或她自己的程式碼看做是藝術品 更糟糕的了。這個類推借用了”敏捷麻煩製造者”和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程式設計
- Michael Feathers:程式設計的藝術程式設計
- Java併發程式設計的藝術,解讀併發程式設計的優缺點Java程式設計
- 分享一組優秀的中文藝術海報
- Java併發程式設計藝術Java程式設計
- QT QML模組的程式設計藝術QT程式設計
- 激發藝術活力 優秀綜藝是社會美育的最佳土壤WP
- 禪與JavaScript程式設計藝術,ZenandTheArtofJavaScriptProgrammingJavaScript程式設計NaN
- Unix哲學(Unix程式設計藝術)程式設計
- 《java併發程式設計的藝術》Executor框架Java程式設計框架
- 程式設計的藝術:不巢狀主義程式設計巢狀
- 優秀的程式設計師都熱愛寫作程式設計師
- 優秀程式設計師都在注意的十個點程式設計師
- 10個程式設計好習慣:優秀程式設計師的經驗分享程式設計師
- 一個優秀的程式設計師應有的產品觀和技術觀程式設計師
- 程式設計,不止有程式碼,還有藝術程式設計
- 《java併發程式設計的藝術》原子操作類Java程式設計
- Java併發程式設計的藝術(五)——中斷Java程式設計
- 優秀的程式設計師真的不寫註釋嗎?程式設計師
- 2019如何成為一個優秀的程式設計師程式設計師
- 環境藝術設計 環境藝術設計課程 招聘
- JavaScript DOM程式設計藝術筆記1JavaScript程式設計筆記
- 優秀程式設計師,如何提高架構能力?程式設計師架構
- 《計算機程式設計藝術》作者高德納計算機程式設計
- Java程式設計師如何成為優秀的架構師Java程式設計師架構
- 《java併發程式設計的藝術》記憶體模型Java程式設計記憶體模型
- 《java併發程式設計的藝術》併發工具類Java程式設計
- 《java併發程式設計的藝術》執行緒池Java程式設計執行緒
- 【讀書筆記】Java併發程式設計的藝術筆記Java程式設計
- Python 物件導向程式設計之封裝的藝術Python物件程式設計封裝
- 《java併發程式設計的藝術》併發容器和框架Java程式設計框架
- 兩款優秀的VI設計作品分享
- 優秀程式設計師都在用哪些Chrome擴充工具?程式設計師Chrome
- 幽默:優秀程式設計師過馬路看兩邊程式設計師
- 《JavaScript Dom程式設計藝術》讀書筆記(一)JavaScript程式設計筆記
- JavaScript DOM 程式設計藝術 學習筆記01JavaScript程式設計筆記
- JavaScript DOM 程式設計藝術 學習筆記 02JavaScript程式設計筆記
- 《Javacript DOM 程式設計藝術》筆記(一)JavaScript Syntax程式設計筆記JavaScript
- Python書單|成為一名優秀的Python程式設計師Python程式設計師