簡單

簡單的法則(The Laws of Simplicity)

前幾天買了John Maeda的新書: 簡單的法則(The Laws of Simplicity)。John Maeda是MIT Media Lab的教授,我久仰他的大名,他的另一本書 Creative Code: Aesthetics + Computation 也讓我很感興趣,可惜在台灣似乎不太容易買到。
在資訊系待了快六年了,寫了很多程式,看過很多研究,也幫學弟妹上過許多課,對於”簡單”這件事也有點感悟。以寫程式為例,還記得小時候初學程式時,因為對程式語言本身不熟悉,很多指令和語法都不是很確定適當的寫法。東學一點,西學一點,所以寫出來的程式碼總是混雜不同風格和邏輯,也就是一團混亂。剛學C語言時,我甚至對於什麼時候要加分號這件事都感到很困惑。後來程式寫多了,對於電腦底層(OS, compiler, programming language)的了解也更為深刻。了解了OS如何多工執行程式及分配記憶體,compiler怎麼分析處理程式碼之後,突然就發現這些看似複雜的東西其實背後都是用簡單的規則串連在一起的。這時有了精練的能力,精確知道什麼是必要的,什麼其實並不重要。運用這種能力,看穿複雜背後的本質,就能用簡單的程式描述複雜的事物。

我常看別人寫的程式,初學者和大師的程式碼很容易分辨。初學者的特徵是重複、雜亂、思緒跳躍、用表面的規則來描述複雜的現象,大師的特徵是簡單、一致、有一定的秩序、直接用簡單的規則描述背後的本質。簡單的東西不但容易了解,而且也很美麗。可是這不是件容易做到的事。沒有深厚的基礎知識,很難看透複雜背後的簡單規則。近幾年流行的Design Patterns就是依靠這種深厚的功力所濃縮精練出來的簡單規則,而John Maeda提出的The Laws of Simplicity也是同樣的道理。

只是,對於初學者來說,直接學習這些經由前人精練出來的簡單法則,並不能帶給他們相當於大師腦袋中的數十年功力。我還記得我在大一時看過Design Patterns,那時並沒有得到什麼感動,只是記了一些的規則(也就是pattern),但並不了解要怎麼運用。後來陸續寫了幾個較大的系統,慢慢發現要做出一定規模以上的複雜系統,必須先清楚的了解它,再適當分解萃取成許多較簡單的小塊(module/class),才能做明確的分工,也才能輕易的讓別人了解。到這時我才體會到Design Patterns是什麼,也才能對它裡面所蘊藏的智慧結晶感到驚嘆與感動,

在台大資訊系有一門課叫做資訊系統原理,這門課教的是在分析及設計物件導向系統所用的UML。奇怪的是,這門課被排在大一下學期。小大一們才剛學完C語言,寫過的最大程式大概只有100行,在這個時候學設計大型系統才需要的UML會如何?根據我觀察身旁的同學,幾乎沒人記得大一的這門課在幹什麼。大多數人在大三才會有需求實做較大的程式,因為我們也沒正式教過物件導向的設計和分析,所以很多人根本不會去用UML,更別提記得它在幹麼。於是我在一門需要實做上千行程式的課裡發現竟然有不少人把所有程式碼都放在一個.cpp裡面….。

就此看來,想要掌握簡單的法則似乎沒有捷徑。一定得親身經驗過什麼是複雜,才能從中體會簡單的美。

3 thoughts on “簡單

  1. 原來Mr. Saturday也有在看我的blog,真是榮幸
    我覺得你們的blog非常有意思,剛出現不久就讓我常常期待著新文章。
    其實我一直很好奇你們的背景,可以透漏一下嗎? 😀

  2. vgod,你很謙虛,你的 blog 應該還有很多”重量級”的人在看。我不是一個擅長寫程式的人(我通常是做整合),不過我對你的說得 “初學者的特徵是重複、雜亂、思緒跳躍、用表面的規則來描述複雜的現象,大師的特徵是簡單、一致、有一定的秩序、直接用簡單的規則描述背後的本質” 身有同感。

    John Maeda 這本書,我也看了,的確會帶來很多的思考。有機會,把你的心得也post 出來和大家分享吧!

留言給我吧!