給網站初學者:沒有資訊背景的人去學 Rails,可能事倍功半

《TO》導讀:本文作者尤川豪,為「一元翻譯」的軟體工程師。經營部落格「轉個彎日誌」。以下為他對於網站新手該如何學習寫網站的方法,給出一些個人建議。

Rails 是新手入門學寫網站最辛苦的選擇之一。

常常有文章或是課程建議新手用 Rails 入門寫網站,我認為這種建議十分危險。

Rails 並不適合初學者使用。推薦沒有資訊背景的人去學 Rails,很可能害他事倍功半。

  • 新手用 Rails 入門的問題在哪?

Rails 最大的問題就在於:它從一開始就不是設計給新手用的。

它是設計給工程師快速開發用的。軟體工程沒有萬靈丹。適合老手的,對新手來說一定太難;適合新手的,對老手來說一定太囉唆。

Rails 為了替工程師節省反覆設定(configuration)的時間,而預設了許多立場(convention)。新手連 web application 的基本知識、環境設定都不知道,直接去學前人的 framework 和 convention,絕對不是好事,也非常辛苦。

我們從 Rails 的官方入門導覽來舉例吧:

http://guides.rubyonrails.org/getting_started.html

對新手來說,這份導覽真是充滿了災難。

它就跟大部份的 rails 教材一樣,會帶新手去學很沒必要的 4 件事情:

1. 新手沒必要學框架的檔案結構
2. 新手沒必要學框架的 command line 指令
3. 新手沒必要學 helper
4. 新手沒必要學 migration

  • 1. 新手沒必要學框架的檔案結構

新手打開導覽之後,映入眼簾的,是這個介紹檔案結構的嚇人表格:

138

13r

初學者一開始只想做個部落格或是個人網頁而已,真的有必要去面對這麼多檔案嗎?這種架構是框架替工程師的軟體專案長遠著想,而詳細分工的結果。

新手並沒有要開發大型專案,做出幾個能跑能動的頁面就夠了。結構或是程式碼醜一點無所謂,好上手就好,實在沒必要一開始就碰這麼複雜的。

  • 2. 新手沒必要學框架的 command line 指令

官方導覽介紹了產生 controller 相關檔案的指令:

11jrl

然後 rails 會顯示以下訊息:

3jlfrl3

只不過想做個簡單頁面,居然跑出了好幾個檔案。對新手來說,這非常不友善。新手想要的,是在資料夾裡面一次建立一個檔案,然後在裡面寫一點東西。

接著看看程式有什麼反應、跑不跑得動。這樣他才知道自己在做什麼、在學什麼。像這種打一個指令產生一堆檔案的學習方法,就算真的「快速做出了一點東西」,之後大概連怎麼修改程式都不知道。如此黑箱,很容易帶來挫折感。

  • 3. 新手沒必要學 helper

官方導覽提到了 Form 的寫法如下:

jlfnle

這完全是災難一場。

新手該學的不是這種 ERB 語法,而是原始 HTML 的 Form element 語法:

grglrjgvle

Form element 的語法一點都不難,網路上 到處找都有

新手學 HTML 基本知識就夠了。接著再學一些 HTTP 的基本知識,了解瀏覽器如何將表單的資料丟給後端程式互動。學這些基本知識才踏實、才有成就感。helper 是工程師為了少寫 HTML 而使用的進階工具。

初學者連基本的 HTML 都不會,學什麼 helper?徒然增加挫折感而已。

  • 4. 新手沒必要學 migration

migration 是工程師方便管理資料庫結構的版本,以及在團隊成員間同步化的工具。初學者根本沒有這種管理資料庫的需求。

新手如果要學資料庫操作,應該去學資料庫軟體(譬如說 MySQL)本身的語法,這樣才會有學到資料庫操作的扎實感覺。如果是一開始不想學資料庫語法的新手,那更不應該去學 migration。

他應該去安裝一款有圖形化介面的資料庫管理軟體,用滑鼠按一按把資料表做出來就可以了。

  • 初學者最舒服的學習路徑:PHP + 懶人包

初學者對於開發網站的想像,不外乎就是「寫幾行程式碼,做出幾個小頁面」。他一開始對於環境安裝與調整沒有興趣,也負荷不來。這個時候,使用 PHP 搭配懶人包開發會是最舒服的路徑。

學寫網站至少要碰幾個東西:

HTML
CSS
client-side programming (JavaScript)
server-side programming (ex: Ruby on Rails 或是 PHP)
資料庫
架 server

我對新手學習的建議是這樣的:

1. HTML 和 CSS 幾乎沒有入門門檻,線上隨便找教材都有。
2. JavaScript 主要是用來做瀏覽器上的一些動態效果,非必要。一開始先不學。
3. 資料庫跟架 server 一開始超出新手想像,可以先安裝懶人包帶過。
4. server-side programming 才是新手原本理解的「學寫網站」。

基於以上四點建議,新手一開始把心力放在 1、4 即可,然後從以下懶人包擇一安裝:

  1. AppServ
  2. Wamp
  3. Xampp

這些懶人包會直接幫你裝好 server、資料庫與 PHP。

資料庫相關的操作可以先透過 phpMyAdmin 之類的軟體用滑鼠操作。接著在線上找 PHP 教學之類的東西,以「一個檔案就可以做出一個網頁」的方式開始學習。在懶人包的協助下,按照興趣慢慢摸索 HTML, CSS 和 PHP 的知識。

之後再根據目標,從以下三個方向更進一步學習:

急著讓網站上線者,可以把程式碼交給工程師朋友,請他幫忙買網址、架起來。

對 server side 工程有興趣者,可以補強資料庫、伺服器等等知識。試著不依靠懶人包就獨立搞定環境、挑一個框架學習之類的。

對 client side 工程有興趣者,可以補強 JavaScript 的知識,學習前端相關知識。

入門最重要的是循序漸進,先想辦法做出一個能動的網站,之後再根據需求,把缺少的技能一個一個補起來。

在「實作出成品」與「學習新知識」之間來回進行,反覆累積成就感與能力。一口氣全部一起學,只會非常茫然、倍感挫折而已。況且根本沒有必要。用 Rails 就更慘了,在一開始就得學一些工程師用的進階手法。

總結起來,我給網站初學者的建議就是:用 Ruby on Rails 非常辛苦,用 PHP 非常舒服。

點關鍵字看更多相關文章: