Monday, November 14, 2016

Simplicity can yield functionality, robustness, speed and space

Simplicity can yield functionality, robustness, speed and space. 這段話出自 programming pearls 一書。很奇怪,我學程式設計也滿久了,漸漸才理解程式設計最核心的問題,就是把本來複雜的問題加以化簡。可以舉的例子太多了,用一個困擾我許久的問題來解釋這個概念。

以前我要做網站時,就會遇到疑問,到底要用:
(1) drupal, joomla, wordpress 等 CMS 的解法
(2) RoR, Django, laravel 等 framework 的解法
(3) 全手刻後端 + javascript 前端

而我以前待過的公司一連兩間都是採用第三種解法。其中最主要的原因之一,多少是因為精通 framework 的工程師不是那麼好找。沒有信心之下,大家還是決定先直接手刻後端的程式算了。總不能為了還不清楚會如何發展的規格,冒然引進一大堆,工程師自己都無法理解的 middle ware 。以前我覺得好像這樣子不是很好的解法,總覺得這樣子的決定,似乎是在工程師本身對各種工具掌握度不足而做的選擇。

後來,又有一些新的名詞冒了出來:
(1) API centric design: 後端只提供 Restful API。前端完全用 javascript 來做。
(2) micro services: 後端不要做成一隻程式,而是做成好幾隻小小的程式。每一個程式有各自的功能,彼此之間用 RPC/MQ 來溝通。
(3) Headless Drupal: 後端用 Drupal 來做,但是只提供 Restful API 給前端,前端還是用 javascript 來做。

看到這些新的名詞逐漸流行,我想應該也是很多人也跟我有類似的看法。需要解決的網站開發問題沒有那麼複雜,用簡單一點的 library, framework ,一切會單純許多。「簡單」才是最重要的事。

最近我因為工作需要,一連用了 nodejs 和 python 寫了兩個 API server。nodejs 我用的是 expressjs。python 我用的是 bottle 。應該都是最簡單的 framework 了。大概因為太簡單了,我寫完沒有多久,就完全忘記怎麼寫了。XD