你是怎麼看待程式設計這件事呢?有的人只把程式設計當做是一份工作,寫出來的程式只要能動、能交差就好,對於程式碼寫得如何、容不容易讀懂、好不好維護,一點都不在意。也有些人,把寫程式當做是一門藝術,關心自己程式碼的許多特質,甚至會要求自己的程式碼必須要有美感。而不同的程式設計者,所寫下的程式碼,也都具備著各種不同的風格。古人說「字如其人」,而設計程式也很相似,我們也可以說「碼如其人」。

當我們談到了「風格」、「美感」的時候,似乎也可以進一步談所謂程式設計的「品味」。

什麼是品味?在維基百科上說:「作為美學、社會學、經濟學和人類學的概念,品味是一系列關於選擇和喜好的文化規律。人會依據其品味對不同的風格、禮貌、舉止、消費品和藝術品等有所區分、有所選擇。關於品味的社會研究聚焦於人類判斷何謂『美』、『好』和『對』的能力。」

若對應到程式設計的領域來看,程式設計者會依據個人對相關事物的喜好,而做出一些抉擇,而這些抉擇,以及最後所展現出來的結果,就展現了他的品味。相關的事物像是決定什麼程式語言、什麼應用程式框架、程式庫,程式語言編寫規範、……等等,這些選擇很多時候和喜好有關,而這些基於喜好的選擇,加上程式設計者的價值觀及風格,也就影響了他們的設計產出的樣貌,以及他所能夠接受的標準,最後展現出一種品味。

品味形成的過程與因素

程式設計者是怎麼建立起個人的品味呢?

我想很多是受到個人特質的影響,此外,在學習、工作的歷程中,所接受到的價值觀及文化,也都對程式設計的品味影響頗深。

價值觀,影響著一個程式設計者心中認定什麼是「美」、什麼是「好」,以及什麼是「對」。這些價值都沒有十分絕對的答案,不同的背景、不同的文化,會影響到一個程式設計者的看法,因此,也就塑造出不同的品味取向。

除了學習、工作的成長歷程中,所接受、所認同的價值觀及文化,每個人自己特有的個性、喜好,也都會影響到品味的建立。

像我們這個世代的人,開始接觸程式設計時,正是物件導向觀念風起雲湧的時候,也接受了許多物件導向觀念的薰陶,許多物件導向設計的價值,都深植在我們的腦海裡,也影響到之後的在決定設計選項時的決定。

而在我們這個世代之前的人,或許習慣的是程序式的設計方式,他們可能不愛物件導向,在可以選擇稱手的語言工具時,他們寧可選擇像 C 這樣的程序式語言。

這讓我想起,我聽過 Google 的朋友講過,Unix和 C 語言的發明者之一 Ken Thompson 加入 Google 後,在工作日誌上寫的第一則是:「開始學 C++。」或許是這位大師的玩笑話,但我也相信或許大師真的比較習慣用像 C 語言這樣的工具,因為品味有時候在建立之後,並不那麼容易改變。

品味也會受到同儕或是團隊中的同事所影響,更常常受到前幾份工作時的 leader 影響,因為他們常常扮演著帶領著你入門的師父角色。他們決定了開發時的許多技術選項,像是語言、框架、程式庫及工具,也決定了開發的方法、流程。而在開發的過程中,也同時會灌輸許多的價值觀,而這常常會深深地影響一名程式設計者在職業生涯中的觀念及想法,也就影響到他的品味。

每個人的價值觀之間,存在著許多差異

不少人把程式設計視為是工程性的活動,所以如果有所謂程式設計的「品味」,那麼和什麼是「好」、什麼是「對」,應該存在頗為直接的關係。做為程式設計者,考慮什麼是「好」,以及什麼是「對」,是很合理的,因為這是很工程性的需求,但是,並不是所有的程式設計者都會考慮到「美」這個因素。不過更嚴重的問題是,也並不是所有的程式設計者都會考慮到「好」,以及「對」。

就像,有些人學習一個程式語言,不是因為它寫起程式來好用,而是因為它流行,或是大家都說它比較好找工作。其實也不只程式語言如此,很多關於程式設計的技術選項決策都是如此。

做一個選擇,不是因為程式設計者認為好,或是認為對,而是基於許多非工程的原因,像是新、或是流行、甚至是人云亦云。當現在流行敏捷開發,就有許多人都開始試著引入敏捷開發的想法,但這並不是他們真的了解、認同到敏捷開發應用上的好處,而純粹可能只是趕流行。

這呈現出來的情況就是沒有品味,因為根本沒有基於「好」或「對」的偏好,自然沒有品味可言。

有立場、信仰,比較能夠有所取捨

程式設計者需不需要有品味?當然需要。如果你是一名沒有品味的程式設計者,可能代表你對於什麼是「好」、什麼是「對」沒有太多的想法,可能是你不知道、也可能是你不在乎。但無論是那種情況,都意謂著你不會花心思去思考如何才能做得更好、怎樣才能做對。

當你信仰程式碼應該具備輕易因應需求變化能力的價值時,你就會開始思考、尋找各種可能的方法,使自己在設計程式碼時,做到讓程式碼在日後更能因應變化。

可是,當你沒有這樣的信仰、以及衍生而來的品味時,你就不會關心這樣的事情,你所做的設計很有可能就沒有更提升的機會。

我們有時會看到程式設計圈子裡的理念之爭,就像有人會為了是否該採用 TDD(測試驅動開發)的方法而論辯。無論是站在那一種立場上的人們,都是堅持他們所相信的價值,這是程式設計者品味的一環。什麼是對、什麼比較好,很多時候難以輕易得出答案,但起碼你有了信仰、有了價值觀,就得以於其上建立品味。最怕是沒有真正了解、真正信仰的那群人,有的是一點都不在乎、有的則是隨波逐流。

關於品味,除了「對」跟「好」之外,還有「美」。在程式設計以外的領域,當我們談到「品味」時,似乎很快的會聯想到和「美」有關的事情。其實我認為程式設計的品味,最後也和「美」脫離不了關係。當我們朝心目中「對」和「好」的方向出發,盡可能地做對及做好,那個美感是會自然而然浮現的。

對於崇尚簡約的人來說,簡約的設計方法有其工程上的優點,可以說出什麼是對,以及有什麼好。把簡約的設計做得理想了,就可以看到因為簡約而帶來的美。

同樣的,對於相信程式碼應該很容易因應新需求而擴充的人來說,那種輕易能添加功能,卻不影響原有程式碼主體的設計,也能感動人心,讓人有一股很美的感覺從心底油然而生。

很多人會認為程式設計是一門藝術,是因為將工程上好的特質發揮到極致,就會讓人進一步產生美的體驗。許多大師寫的程式碼讓人佩服、讚嘆其中的美感,但大師或許只是想著,怎麼樣才能讓程式碼擁有他希望賦予它們的優點,美的感覺只是伴隨而生的。

程式設計可以是一個枯燥的工作,但你也可以從中找到許多發展志趣的空間。你可以建立自己的品味,讓人感受到你的品味,透過這樣的過程,你可以把工作做得更好,也樂於在工作之中。

作者簡介


Advertisement

更多 iThome相關內容