程式設計師和程式藝術家
當程式設計師被別人說自己的程式碼寫得“不夠好”時,他們會作何反應?
- 程式碼跑得好好的,為什麼要去改它?
- 這個設計不是已經可以了嗎,為什麼還要再簡化?
- 我來給你解釋一下這些程式碼,你會明白的。
還有很多類似這種“不夠好”的說法,比如“不夠簡潔”、“不夠好理解”、“對使用者不夠友好”,等等。我經常和程式設計師聊起這樣的話題:為什麼要讓設計架構更簡潔,為什麼要讓程式碼簡潔易懂、為什麼要格式化程式碼、為什麼要在兩個符號中間加一個空格……如果你是一個技術老鳥,或者經常看一些講解如何寫出好程式碼、設計出好架構的書,你可能也會有同感。這些都是最基本的概念,但並不是每個程式設計師都能意識到它們的重要性。
不僅是一些新手程式設計師不會拿這些高標準來要求自己,那些有多年經驗的老手程式設計師也存在同樣的問題。你可以建議他們去閱讀《程式碼大全》、《程式碼整潔之道》、《Unix程式設計藝術》之類的書,或許他們當中有些人能夠從書中獲益,但有些仍然我行我素。
為什麼並不是每個程式設計師都能寫出高質量的程式碼或做出高質量的架構設計?有可能是因為他們經驗不足,也有可能是因為他們不知道如何將從書中學到的或從經驗中總結出來的東西應用到實際當中,又或者他們只是在完成任務,對於他們來說,程式設計師只不過是個餬口的工作。但從根本上講,那是因為他們認為自己只是個程式設計師,而不是軟體藝術家。
成為一個程式設計師需要具備哪些條件?
- 知道如何寫程式碼和測試程式碼。
- 知道如何分析業務問題、收集使用者需求、設計和釋出專案。
- 完成程式設計師JD裡描述的那些工作。
而成為一個軟體藝術家需要具備哪些條件?
為了回答這個問題,我們先來看看一個藝術家的設計應該是什麼樣子的。
Eames夫婦在1950年設計了這張塑料座椅,到現在已經流行了幾十年。我被它簡潔的設計和舒適感所折服,於是我在想,我們怎樣才能像設計這把椅子一樣設計我們的軟體呢?
這把椅子我用了三年,之所以很喜歡它,是因為:
- 它看起來很順眼。
- 每個人一看到它就知道它是一把椅子。這麼說好像有點傻,但這個世界上確實存在一些設計,你根本看不出它們是幹什麼用的。
- 坐板和椅背一體成型,看起來不像傳統的椅子那麼單調。
- 因為採用了塑料材質,它會根據身體的坐姿做出輕微的調整。
- 它可以放在任意的地方,臥室、辦公室、客廳、餐廳……
- 它很環保,因為它是使用百分百可回收材料製成的。
那麼,如果我們要開發出具有這種“風格”的軟體應該是什麼樣子的?
- 程式碼、設計、架構看起來要順眼。
- 任何一個人在閱讀程式碼片段、設計文件、架構文件時都能立即明白它們的用途。
- 程式碼、元件、設計、架構都應該儘可能簡潔。
- 重用已有的產品、庫、程式碼來簡化設計。
- 設計應該靈活,可以應付未來的變更。
- 環保——不會佔用太多的硬體資源。
如果一個程式設計師能做到這些,那麼他肯定就不是隻個程式設計師,他一定是一個軟體藝術家。
或許有人會發出這樣的疑問:怎樣才能知道自己是否達到藝術家的標準了呢?比如“怎樣才算儘可能簡潔”?有些人可能會想,如果一個方法的程式碼行數超出了一個螢幕的範圍,那它就是一個需要進行重構的“長方法”。又或者他們會建議一個物件的生命週期當中應該有多少種狀態,在寫程式碼時注意不要超出這個範圍。
但其實,成為軟體藝術家的意義不在於如何量化這些東西,而在於持續改進。在設計一個專案時,應該問自己:這個專案可以設計得更好嗎?在程式碼通過測試之後,也可以問自己:程式碼的結構看起來夠優雅嗎?敢不敢拿它與你見過的最好看的藝術品做一番比較?
程式設計師在完成設計或寫完程式碼之後一般不會想著怎麼去改進,但藝術家會。這是程式設計師和軟體藝術家之間最大的區別。程式設計師不一定都很糟糕,他們也能寫出很好的程式碼、做出很好的設計,但一旦停下了追求的腳步,他們就無法成為藝術家。
相關文章
- Redux中的程式設計藝術Redux程式設計
- Michael Feathers:程式設計的藝術程式設計
- Java併發程式設計藝術Java程式設計
- 程式設計師、技術主管和架構師程式設計師架構
- 程式設計師的桌面(家)程式設計師
- 程式設計,不止有程式碼,還有藝術程式設計
- 禪與JavaScript程式設計藝術,ZenandTheArtofJavaScriptProgrammingJavaScript程式設計NaN
- Unix哲學(Unix程式設計藝術)程式設計
- 普通程式設計師和厲害程式設計師的差距!程式設計師
- JavaScript DOM程式設計藝術筆記1JavaScript程式設計筆記
- QT QML模組的程式設計藝術QT程式設計
- 《java併發程式設計的藝術》併發容器和框架Java程式設計框架
- 好程式設計師Java培訓Java程式設計師必學技術程式設計師Java
- 《計算機程式設計藝術》作者高德納計算機程式設計
- 《java併發程式設計的藝術》Executor框架Java程式設計框架
- 程式設計的藝術:不巢狀主義程式設計巢狀
- 程式設計師何苦為難程式設計師?程式設計師
- 程式設計師的技術遺產程式設計師
- 程式設計師常用術語解釋程式設計師
- 《JavaScript Dom程式設計藝術》讀書筆記(一)JavaScript程式設計筆記
- 《java併發程式設計的藝術》原子操作類Java程式設計
- JavaScript DOM 程式設計藝術 學習筆記01JavaScript程式設計筆記
- JavaScript DOM 程式設計藝術 學習筆記 02JavaScript程式設計筆記
- 《Javacript DOM 程式設計藝術》筆記(一)JavaScript Syntax程式設計筆記JavaScript
- Java併發程式設計的藝術(五)——中斷Java程式設計
- 非科班程式設計師和科班程式設計師的差距到底在哪裡?程式設計師
- Java併發程式設計的藝術,解讀併發程式設計的優缺點Java程式設計
- 美女程式設計師觀點:程式設計師最重要的非程式設計技巧程式設計師
- 好程式設計師:Java程式設計師面試秘籍程式設計師Java面試
- 以前的程式設計師,現在的程式設計師程式設計師
- 程式設計師技術入股的那些坑程式設計師
- 程式設計師如何利用技術管理技巧程式設計師
- Java外包程式設計師的技術出路Java程式設計師
- R語言程式設計藝術 第2章 向量(上)R語言程式設計
- 《java併發程式設計的藝術》記憶體模型Java程式設計記憶體模型
- 《java併發程式設計的藝術》併發工具類Java程式設計
- 《java併發程式設計的藝術》執行緒池Java程式設計執行緒
- JavaScript DOM程式設計藝術筆記2.1準備工作JavaScript程式設計筆記
- 【讀書筆記】Java併發程式設計的藝術筆記Java程式設計