語言與框架,從 Ruby on Rails 談起
前一陣子因為可以讓我燃燒夢想的前公司關門大吉,當了短暫的無業遊民,過著連申請信用卡都被銀行行員鄙視的廢物生活,心境比現在最流行的旅行青蛙還要自由。
前言
周遭的朋友跟前同事們都怕我再這樣下去會上社會新聞,在逛職缺的時候都會幫我看看有沒有適合的,一但有工程師或者是網站開發就轉丟給我,但一方面是因為正在打電動、另一方面是因為領域或是語言與我擅長的不同,所以幾乎都會被我拒絕,退了幾次之後他們都會很受傷,促使了我想寫下這篇來證明真的不是我很麻煩。
我知道有些資深工程師寫到等級很高的時候會覺得語言或是框架什麼的不重要,不滯於物,草木竹石均可為劍。但我只是個三袋弟子,還是讓我拿著劍揮揮比較有用。
註:定義會因為學習領域或是你的公司而有差異,因為我是寫網站的,所以就以網站開發來討論。
先說說 Ruby on Rails
故事是這樣開始的,在好多年前的 1995 年,松本行弘( Yukihiro “Matz” Matsumoto )先生在寫過各種程式語言後,總覺得沒有一個語言適合他,他希望有種語言是優雅、易於使用,而且能夠加速使用者開發。最後,他汲取了其他語言之中他所喜愛的特性,發明了 Ruby 這個語言。
雖說 Ruby 已經被發明了出來,但其實還是沒什麼人在用,直到 2004 年時,有個丹麥人覺得這個語言非常親切易於上手,所以他使用 Ruby 寫出了一個網站框架,來加速開發公司的產品,最後這個框架也用 Open Source 的方式釋出,也就是現在的 Ruby on Rails ,和當初的發明人 DHH 。
融合了 Ruby 友善的語法, Rails 約定優於配置的專注, Ruby on Rails 就此躍上了舞台,不僅是為網站開發奠定了重要的里程碑,其想法跟願景也成為之後許多框架的靈感來源。
就如同其他程式語言,Ruby 可以做的事情不只是寫網站,包括資料分析、繪圖、機器人、遊戲、 3D 模型等等都可以,但讓大家印象深刻的仍是 Rails 的網站快速開發,所以我們這邊也就暫且不討論其他應用。
(順帶一提, Ruby on Rails 的簡稱是 Rails ,你講 RoR 的話我會生氣,但是你看不出來)
語言與框架
那框架是什麼?
框架是為了解決某個領域的特定問題,設計出來具有一定的約束或是特定的結構,從而更迅速或是更方便解決問題的方案。
有點聽不懂沒關係,因為上面那句話也是我隨口說說的。
由最前面的故事我們可以知道, Ruby 是一個語言, Ruby on Rails 就是由 Ruby 寫成,用來解決網站開發這個特定問題的框架,那他們之間的關係呢?
這是 Ruby 語言,我們將他想像成一個又一個的積木。
而在 Ruby 生態圈中,有著許多人用 Ruby 開發著各式各樣的方便的函式庫來幫助你寫程式,這些函式庫我們稱之為 Gem,就如同已經用積木拼湊好的小零件。
而 Rails ,就是一個巨大的 Gem ,包含著許許多多小 Gem ,把各種常用功能、應用通通都放入一個預先設定好的結構內,如果你是初學者,我們可以照著 Rails 的慣例去做設定跟細微修正,很快的就能做出你所需要的網站。
就如同打開包裝時,各種部位已經就位的組合積木車,這時只要做些換上電池、設定名稱、更改喜歡的顏色等等動作,他就可以運作了!
而當你越來越熟練各種技巧,漸漸發現 Rails 有些地方的零件或是功能不符合你的需要,你也可以隨時對他做拆裝跟更改, Rails 雖然認為他給你的是主廚精選,但他對於這些個人口味修改都是有很大彈性的。
不只是 Ruby 與 Rails
同樣是程式語言,不同的語言解決事情當然就有不同的方式跟名字,同樣是解決網站開發問題的話,當然不只是 Ruby/Rails ,現在比較常見的還有 JavaScript+Node.js/Express、python/Django、Elixir/Phoenix 等等。
所以如果說此時有個徵求 Node.js + Express 工程師的職位,雖然說目的一樣都是開發網站,但因為我是 Ruby on Rails 工程師,不論是對公司或是對於我,轉移的成本會非常大,所以除非我決心要轉行、或是有喜歡的女生在那間公司,不然我們是不會有結果的。
上面大概說的都是屬於網站開發後端的部分,那接下來要多談的是前端框架。
前端框架
在前幾年網站對於使用者端視覺跟功能的要求開始爆發性的成長,以前我們寫寫 HTML + CSS + 一點點 JavaScript 頂多再加上 jQeury 就夠了的時代已經過去,瀏覽器本身的性能越來越好(除了 IE),JavaScript 越寫越多越難整理,於是工程師們就開始模組化,漸漸的開始發現一些比較好維護的方式,也慢慢地出現一些專注在前端的『框架』。
現在場面上比較知名的前端框架大概就是小火龍、傑尼龜跟妙蛙種子,也就是 Angular.js、React.js、Vue.js 御三家,我們就不比較這三家的優缺,這三家就如同之前所描述,他們也都是將許許多多工具(我們稱之為 package)都弄好,只要學習如何使用框架就能寫比較複雜的前端介面或是功能了。
當然你也可以把這些框架疊上之前我們討論的『後端』框架,除了應該最常見的 React.js + Node.js + Express 外, React.js 也可以與 Rails 組合,Angular.js 自然也可以搭配 Django,簡直就跟麥當勞一加一自由配一樣,看你們喜歡怎麼組合就怎麼組合。
最後
除了語言之外,我覺得函式庫、框架這些定義其實都相當模糊,在各個時空背景下都有可能會出現不同的解釋,這裡我們就用比較通用的情況去分類就可以了,真的要細分交給專業的工程師去處理就好。
如果你對前後端這種前前後後的職位有點不了解,可以參考我之前寫的文章稍微了解一下現在網站的工程師到底有多少種。
謝謝!