Clojure作者Rich Hickey的這段2012年的演講:The Value of Values,這陣子一直忍不住在腦海裡玩味,完整演講請右轉infoq: https://www.infoq.com/presentations/Value-Values,總長58分53秒,有空嗎?買包洋芋片配著看吧,絕對值回票價。
他首先定義何謂"place-oriented programming",到"value-oriented programming",最後推衍到為何我們可說是處在編程的太空時代,為何我們應該要建立全新的資訊系統來符合這個時代。
這段話大約是這麼說的:
Are we programming in the space age?
我們是否在編寫程式的太空時代了?I think we are. Right? We have virtual memory, … we have GC, … which means resources are more transparently available. Whenever I need more, I can get it.
我認為是,對吧?我們有虛擬記憶體 … 我們有GC等等,代表所有的資源的取得都更加透明,無論何時,只要我需要就能有。Guess what? If your program runs indefinitely long and calls new and new never fails. Your program is running in space, not in a place.
如果你的程式能跑無限久,它會呼叫new而且此呼叫永不生錯,你的程式等同跑在太空中,而不是在某個區域中。
我在兩年前第一次聽這個演講時,我心裡覺得很靠杯,『所以呢?資源很多就代表可以亂用嗎?』看看現行那些動輒吃下好幾G的瀏覽器,讓CPU發燙的網頁,都讓我覺得環保團體都找錯對象了,這些爛程式搞不好才是地球暖化的真兇。
兩年過去了,隨著學習的更多,這段演講最近一直自己回到我腦海裡。我才了解,他在說的不是資源多所以隨便用沒關係,而是當我們能取用的計算資源完全虛擬化,完全不受空間限制時,我們該如何重新思考、架構我們的資訊系統。如何『有效應用來自太空般的資源』與『資源來自太空所以隨便用』是完全兩碼子事。
從使用者的角度來看,你的軟體應該要無論何時何地都能立即存取;使用者不需要思考儲存或同步這種事,他們已經習慣這些事都是自動發生。從程式師的角度來看,在開始編寫前就要意識到你的程式會是無數個instances同步運作而非單一一個;你的計算資源不是來自一台電腦,而是來自世界各地;太空是一種時間與空間相乘的概念,過去我們的資訊系統無法有效處理『時間』,現在我們可以了,又該如何架構?
我覺得我花了比別人更多時間來接受這個概念,因為過去遊戲業的經驗讓我非常習慣高度micro optimization的思維,而opimization通常是與scaling相斥的事情。想像一下衣櫃,當衣櫃很小,如何摺衣服來最佳化運用就會提升這空間的使用效率,但如果衣櫃有六十甲地這麼大,還去花功夫摺反而就沒效率了。
如果在閱讀這篇文章的你跟我過去一樣感到困惑,試著去學一種Functional programming language吧,這會讓我們根本從"place-oriented programming"的思維中抽離;clojure、scala、haskell、OCaml,看得順眼的就行。再來,去學一種cluster system吧,目前當紅的docker是不錯的選擇。最後,為了你自己也為了這個世界好,請丟掉任何無法像S3那樣讓你自行按需求scale-up / scale-down、有極高availability的VPS服務吧,人生太短, 沒時間跟舊時代的SA吵架了。
既然可以鍵盤上太空,何必殺豬公?我們太空見。