設計品味
好的設計通常具有什麼特色?
1. 好設計是簡單的。從數學到繪畫都聽得到相同說法。簡單是指「美」在於寥寥樹種精心挑選的結構元素,而不是堆砌表面的裝飾品。(裝飾本身沒有問題,當裝飾掩蓋了乏味的形式才有問題。)在繪畫中,精心勾勒的幾筆靜物,反而筆濫用華美但無意義的反覆筆觸(例如花邊)更為引人入勝。
2. 好設計歷久彌新。在數學中,每個定理都是永恆的,除非它本身有物。哈迪說:「醜陋的數學沒有長存的價值」,意思是說:**如果某個東西是醜陋的,一定不是最佳解決方案。**一定還有更好的方式,最後一定會有人發現。
3. 好設計解決正確的問題。
4. 好設計會引發聯想。例如說,好的建築應該能融入居住者想要的生活,而不是讓居住者照著設計師畫好的圖生活。對軟體而言,這項規則提供使用者能自己組合的基本元件,就像玩樂高積木一樣。在數學中,則是說某個證明若能變成許多新工作的基石,一定優於困難但無法引導未
來發現的證明。在科學中,引證次數普遍被視為價值的粗略指標。
5. 好設計通常會有點好笑。這一點不一定完全適用。傑出的設計不一定會好笑,但在缺乏幽默感的事物中卻也很難找到稱得上傑出的設計。
6. 好設計是辛苦的。**如果觀察工作表現出色的人,工作辛勞是他們最常見的共通點。如果你的工作不辛苦,你八成在浪費自己的時間。**困難的問題需要相當程度的努力。需要趴爬高聳的山巔時,你必會捨棄背包裡所有非必需的物品。當建築必需建造在困難的地形上,或是預算不足時,建築師被迫產生最簡練的設計。時尚與裝飾被踢到一邊,全幅精力都已用於解決難題。在藝術傳統中,人畫像普遍獲得最高的讚賞。這項傳統其來有自,不只是因為其他畫作不如人像畫能刺激我們大腦,也因為我們都太擅長觀察臉孔,所以描繪人像將被迫加倍努力,才能滿足我們的眼睛。如果樹枝畫偏了五度,沒人看得出來;但是眼睛若畫偏了五度,大家都會注意到。
7. 好設計看起來很容易。這是幻覺。簡單、口語化的最佳筆調需出自多次改寫。
8. 好設計使用對稱性。對稱可能是達到簡單的方法之一,不過它的重要性足以獨立探討。大自然就是對稱的,這是個好徵兆。在數學與程式領域,遞迴尤其是勝利的代表。歸納行的證明簡單得如此美妙;能以遞迴解決的軟體問題幾乎肯定是最佳解決方案。
9. 好的設計形似自然。大自然已經花了很多時間處理問題,優良設計與自然相似並不算什麼。所以你的答案若與自然相似,會是個好兆頭。我們現在擁有強大的計算能力,既可以模仿自然的形式也可以推論其結果,基因演算也許能讓我們創造嘗試無法製造的複雜造物。
10. 好設計是再設計。正確的事物鮮能一蹴而就。犯錯是很正常的事。**與其把錯誤視為災難,不如讓錯誤易於理解且易於修復。**達文西可算是素描的發明人,使得繪畫能承擔更多探索空間。開源碼軟體的問題比較少,正式因為它承認錯誤的可能性。
11. 好設計可以複製。初學者在無意識中模仿他人,無釋義的模仿幾乎是差勁設計的必要因素。如果你不曉得自己的想法從何而來,你八成在模仿另一個模仿者。熱情無法滿足於模仿。品味成長的第二步就是有意識的試圖原創。我認為,最偉大的大師級人物最後都達到某種無我的境界。他們只想取得正確的答案,如果答案的一部分已經有人發現了,為何不採用呢。他們有足夠的自信,足以承接他人的成果,又不覺得自己的觀點將迷失在創作過程中。
12. 好設計通常是怪異的。例如Lisp程式語言,它們不只美,而且美得很詭異。美術學校中,學生最想做的事就是發展個人風格。不過只要你試著做出好作品,自然而然便會照著獨有的方式去做。值得保存的風格,就是你無法控制,無法不去做的那種風格,怪異尤其能彰顯這項特色。
13. 好設計於雜亂中誕生。一群天賦異稟的人才,聚成一個社群共同研究相關的問題,這是最強的組合,基因比不上相互較量:即使有達文西的天份,也無法補償生於米蘭而非佛羅倫斯的遺憾。在任何時點,都有幾個熱門地點與幾個傑出的小組,如果你離這些地方太遠,似乎很難產生真正傑出的工作。
14. 好設計通常是大膽的。**今日的實驗錯誤是明日的新理論。**如果你想發現傑出的新事實,便不能對常規和事實無法吻合的地方視若無睹,反而應該特別注意。實際上發現醜陋應該比想像美好容易得多。很多美好事物的製造,是從修正自認為很醜的地方開始,無法容忍醜陋還不夠,還需要深入鑽研特定領域才能修改正確的地方;你需要多做功課。成為某個領域的專家後,你將開始聽到心底有個微弱的聲音說:這是什麼鬼東西啊!一定還有更好的作法!千萬,別忽視這個聲音,培養它,讓它成長。傑出作品的訣竅在於:非常嚴厲的品味,加上滿足品味的能力。
設計與研究
把程式語言看做設計問題,會與看做研究主題有什麼不同?最大的差別在於重視使用者的程度。設計從詢問開始:我要為誰設計?他們需要什麼?好的建築師不會把設計完成的作品丟給使用者,**他從研究使用者的「希望」、找出使用者的「需求」著手。**注意用詞的差異,我不希望把設計師弄得像接受簡單命令的廚師,只要達到客人的要求就好了。藝術的各個領域差異極大,但我不認為有哪個領域的傑作源自全盤接受客戶的要求。
客戶永遠是對的,這是指設計的優秀在於能為使用者服務。但是製作對使用者有用的東西,仍然不是單純的照著他們的意思做。使用者不曉得所有選擇,通常也會弄錯自己真正想要的東西。你的角色有點像是醫生,你不能只治療病人的症狀,還必須找出真正的病因對症下藥。如果目標使用者群包含了設計師本身,泰半能得出良好的設計。如果設計的對象不包括自己,設計師通常認定使用者不會想那麼多,而不認為使用者會很仔細。就算基於善意,看清使用者也常常毀了設計師。如果你認為自己在為傻瓜設計東西,奇怪的是,不僅設計不出好東西,甚至也不適合傻瓜用。
無論喜歡與否,程式語言也是以人為本,我發現人類的大腦就像身體一樣凹凸不平又有特性。有些概念很容易被人類理解,有些就是沒辦法。例如說,我們處理細節的能力似乎十分有限,這就是讓程式語言看來還不賴的基礎;如果我們可以處理細節,用機器語言寫程式就好了嘛!
程式就像證明一項定理,它是一株修剪過雜枝蔓葉的盆栽。所以檢測程式語言並非簡單的檢查寫完的程式看來有多清爽,而是完成程式的過程有多清楚。完成優雅程式的設計選擇,不一定能帶來優雅的設計過程。
建設新事物時,應該儘快把原型放在使用者面前。另一種方案可能被稱為 Hail Mary 策略。不再儘快推出原型並逐步調整,而是試著通過常常的著陸過程,建立完整、完結的產品。無數的新創企業都用這個策略在網路大泡沫中自我毀滅。我還沒聽過成功的案例。身在軟體業界外的人可能不太明瞭,「越差越好 (Worse is Better, WIB) 」是在藝術中發現的準則。以繪畫為例,這個概念在文藝復興時期發展出來。現在幾乎每個繪畫老師都會說,準確落筆的正確方式,並非緩慢的雕出物品的輪廓,因為錯誤將開始累積到最後才發現線條不符合理想。此時反而該快速畫下幾筆,大致落在正確的位置上,然後再慢慢的修正最初的素描。
軟體也能應用同樣方式。原型不必只是原型;原型可以調整為成品。只要做得到,我想應該這麼做。如此可一路利用新觀點的優勢。更重要的是,對士氣也很有幫助。**士氣、鬥志,是設計時的關鍵。**我很驚訝大家都忽略了這一點。我的一位繪畫啟蒙老師曾說過,如果你對自己筆下的東西感到無聊,畫出來的成品也一樣很無聊。以描畫某棟建築物為例,你決定要畫出每塊磚頭。如果你在半途覺得無聊,而開始機械的繪製每一塊磚頭,不再仔細觀察,這幅作品將比潦草幾筆帶過的磚頭還糟。
逐步改善原型有益於士氣,因為有見識讓你一直記掛在心坎上。在軟體業中,我的規則是**:保持程式碼的工作狀態。如果寫個能在一小時候測試的東西,代表獎勵就在眼前。**在藝術中也有同樣的情況,而且在油畫上特別明顯,很多畫家都從模糊的草稿開始,逐步改進。在畫家之間甚至有句俗話:繪畫沒有完成的一天,只有停止作畫的那天。這個概念對於軟體界的人也相當適用。
是氣勢很難為定位不清楚的使用者而設計的另一個原因。如果你自己都沒興趣,真的很難保持工作的興趣。要做出好東西,就必須想著「哇!這個不錯嘛!」而不是想著「什麼鬼東西,只有笨蛋才會喜歡。」
設計始終來自於人性。不只使用者是人,設計者也是人。