很久以前看英文的技術書時學到「nuance」這個字,查字典的解釋是「細微的差別」,例如音調、顏色、見解等細節的不同。
我喜歡這個字,是因為這個字代表每個個體的獨特性。以音樂來說,貝多芬的第九號交響曲的樂譜只有一種,但是不同的交響樂團,不同的指揮家,甚至不同的音樂廳,演奏出來的感覺都不同。而這些不同的版本就有個人喜好、意境的不同。節拍快0.1秒、音符修飾的1/100差異等等,這些用科學統計方法來看,不具顯著性的差異,但是卻能表現出不同的風格。例如福特萬格勒在拜魯特的貝九就被視為是經典詮釋。
有的指揮家認為,要完全遵照作曲家在樂譜上的指示,忠實的呈現出來,貫徹作曲家的意志。但有的指揮家覺得,樂譜有其表達力的限制,應該要適時揉合作曲家的作曲背景,並由指揮/演奏去詮釋作品。但不論是哪一種,都要有一定的能力才能達到。
我是Leica M相機的愛好者,這款高品質的德國相機,堅固耐用,功能非常少,他僅有的功能都是讓你能專注在「拍照」這件事上。用Leica M拍出來的照片,優異的暗部細節和寫實性,讓我非常的喜愛。看習慣用Leica M拍的照片之後,看一般的照片就會覺得「少了很多細節」。有些人看不出細節差異,但是我剛好是看得出來的那種。
回到軟體開發上面,「nuance」這個字就更重要了。軟體開發雖然是一種「創作」,但是本質上和「演奏」比較像。演奏要以「樂譜」為本,加上演奏者的詮釋。而軟體開發也是有一個目標,例如「需求」,再由開發者去詮釋。但是這個目標不像樂譜,有非常明確的規範,所以開發者能夠發揮的空間非常的大。就算再詳細的設計文件,在真正實作時,還是有一大段空間要填滿。
例如,我想做一個線上購物網站,這是目標,但是在作出來之前,沒有人知道這個網站將來會長什麼樣。就算網頁看起來一模一樣好了,也許背後用的技術完全不同,也許scalability不同,也許performance不同,也許cost不同。而這一切一切的不同,就是由許多開發時的選擇累積出來的。這些自由選擇(詮釋方式),就是我所說的軟體nuance。
所以,軟體的開發者、設計者、架構者所作的大大小小的選擇,也就決定了這個系統的個性。和音樂一樣,在達到一定水準之後,沒有絕對的對錯,就只有「品味」(或喜好)的問題了。例如:貝九我可能比較喜歡卡拉揚的版本。
對軟體工程師來說,要有能力控制nuance,就必需要不斷增加見識廣度和技術深度,也要保持一顆熱情開放的心,願意嘗試新的東西,不能習慣於過去的作法。我的經驗是,我以為我已經看得夠廣夠深了,在和不同領域的人談過之後,我才發現自己看得太少了。同時,也要能培養出辨別「nuance」的能力,要知道作這個選擇會有什麼影響。
品質,是由許多小細節累積而成的,讓我們一起勉勵!