[心得] 給網站初學者的建議:用RoR非常辛苦

看板Soft_Job作者 (阿川)時間8年前 (2016/02/19 20:13), 8年前編輯推噓29(35641)
留言82則, 37人參與, 最新討論串1/8 (看更多)
yo~小弟出社會工作兩三年了,有一些心得分享給想入門學寫網站的朋友: 用 Ruby on Rails 非常辛苦,用 PHP 非常舒服 網頁好讀版 http://blog.turn.tw/?p=2881 ------------------------------------------------------ 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. 新手沒必要學框架的檔案結構 新手打開導覽之後,映入眼簾的,是這個介紹檔案結構的嚇人表格: FILE/FOLDER PURPOSE app/ Contains the controllers, models, views, helpers, mailers and assets for your application. You’ll focus on this folder for the remainder of this guide. bin/ Contains the rails script that starts your app and can contain other scripts you use to setup, deploy or run your application. config/ Configure your application’s routes, database, and more. This is covered in more detail in Configuring Rails Applications. config.ru Rack configuration for Rack based servers used to start the application. db/ Contains your current database schema, as well as the database migrations. Gemfile Gemfile.lock These files allow you to specify what gem dependencies are needed for your Rails application. These files are used by the Bundler gem. For more information about Bundler, see the Bundler website. lib/ Extended modules for your application. log/ Application log files. public/ The only folder seen by the world as-is. Contains static files and compiled assets. Rakefile This file locates and loads tasks that can be run from the command line. The task definitions are defined throughout the components of Rails. Rather than changing Rakefile, you should add your own tasks by adding files to the lib/tasks directory of your application. README.rdoc This is a brief instruction manual for your application. You should edit this file to tell others what your application does, how to set it up, and so on. test/ Unit tests, fixtures, and other test apparatus. These are covered in Testing Rails Applications. tmp/ Temporary files (like cache, pid, and session files). vendor/ A place for all third-party code. In a typical Rails application this includes vendored gems. 初學者一開始只想做個部落格或是個人網頁而已,真的有必要去面對這麼多檔案嗎? 這種架構是框架替工程師的軟體專案長遠著想,而詳細分工的結果。 新手並沒有要開發大型專案,做出幾個能跑能動的頁面就夠了。 結構或是程式碼醜一點無所謂,好上手就好,實在沒必要一開始就碰這麼複雜的。 2. 新手沒必要學框架的 command line指令 官方導覽介紹了產生controller相關檔案的指令: $ bin/rails generate controller welcome index 然後rails會顯示以下訊息: create app/controllers/welcome_controller.rb route get 'welcome/index' invoke erb create app/views/welcome create app/views/welcome/index.html.erb invoke test_unit create test/controllers/welcome_controller_test.rb invoke helper create app/helpers/welcome_helper.rb invoke assets invoke coffee create app/assets/javascripts/welcome.js.coffee invoke scss create app/assets/stylesheets/welcome.css.scss 只不過想做個簡單頁面,居然跑出了好幾個檔案。對新手來說,這非常不友善。 新手想要的,是在資料夾裡面一次建立一個檔案,然後在裡面寫一點東西。 接著看看程式有什麼反應、跑不跑得動。這樣他才知道自己在做什麼、在學什麼。 像這種打一個指令產生一堆檔案的學習方法,就算真的「快速做出了一點東西」, 之後大概連怎麼修改程式都不知道。如此黑箱,很容易帶來挫折感。 3. 新手沒必要學helper 官方導覽提到了Form的寫法如下: <%= form_for :article do |f| %> <p> <%= f.label :title %><br> <%= f.text_field :title %> </p> <p> <%= f.label :text %><br> <%= f.text_area :text %> </p> <p> <%= f.submit %> </p> <% end %> 這完全是災難一場。 新手該學的不是這種ERB語法,而是原始HTML的Form element語法: <form> <label>title</label> <input /> <label>text</label> <textarea></textarea> </form> 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即可,然後從以下懶人包擇一安裝: AppServ Wamp Xampp 這些懶人包會直接幫你裝好server、資料庫與PHP。 資料庫相關的操作可以先透過phpMyAdmin之類的軟體用滑鼠操作。 接著在線上找PHP教學之類的東西,以「一個檔案就可以做出一個網頁」的方式開始學習。 在懶人包的協助下,按照興趣慢慢摸索HTML, CSS和PHP的知識。 之後再根據目標,從以下三個方向更進一步學習: 急著讓網站上線者,可以把程式碼交給工程師朋友,請他幫忙買網址、架起來。 對server side工程有興趣者,可以補強資料庫、伺服器等等知識。試著不依靠懶人包就獨 立搞定環境、挑一個框架學習之類的。 對client side工程有興趣者,可以補強JavaScript的知識,學習前端相關知識。 入門最重要的是循序漸進,先想辦法做出一個能動的網站, 之後再根據需求,把缺少的技能一個一個補起來。 在「實作出成品」與「學習新知識」之間來回進行,反覆累積成就感與能力。 一口氣全部一起學,只會非常茫然、倍感挫折而已。況且根本沒有必要。 用Rails就更慘了,在一開始就得學一些工程師用的進階手法。 總結起來,我給網站初學者的建議就是:用Ruby on Rails 非常辛苦,用PHP非常舒服。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.170.51 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1455884032.A.A44.html ※ 編輯: poopoo888888 (1.161.170.51), 02/19/2016 20:16:42

02/19 20:20, , 1F
PHP是最好的語言!!!
02/19 20:20, 1F

02/19 20:29, , 2F
02/19 20:29, 2F

02/19 20:42, , 3F
02/19 20:42, 3F

02/19 21:08, , 4F
大神表示:
02/19 21:08, 4F

02/19 21:24, , 5F
02/19 21:24, 5F

02/19 21:34, , 6F
大家都不再鄙視PHP了嗎 XD....
02/19 21:34, 6F

02/19 21:38, , 7F
RoR 薪水還是屌打 PHP 啊
02/19 21:38, 7F

02/19 21:42, , 8F
屌打?? FB工程師表示:...
02/19 21:42, 8F

02/19 21:45, , 9F
屌打?所以哪個語言框架薪水高就學該語言嗎?
02/19 21:45, 9F

02/19 21:50, , 10F
MmNRP一狗票人用最不潮的C 待遇屌打潮潮的Ruby
02/19 21:50, 10F

02/19 21:52, , 11F
屌打?上次看到台中要ror 給50k的樣子....
02/19 21:52, 11F

02/19 21:53, , 12F
那nodejs呢?
02/19 21:53, 12F

02/19 21:56, , 13F
PHP近期也算浴火重生了啦
02/19 21:56, 13F

02/19 21:57, , 14F
TIOBE2015兵器譜排名 PHP屌打Ruby跟javascript
02/19 21:57, 14F

02/19 21:58, , 15F
我怎覺得是有毒文...而且為什麼獨厚PHP...
02/19 21:58, 15F

02/19 21:59, , 16F
python也有light-weight web framework如bottle, flask
02/19 21:59, 16F

02/19 22:08, , 17F
推 我覺得要循序漸進 由前而後
02/19 22:08, 17F

02/19 22:10, , 18F
基本知識還是要理解
02/19 22:10, 18F

02/19 22:10, , 19F
node.js比php還要懶吧
02/19 22:10, 19F

02/19 22:19, , 20F
需要啥就用啥
02/19 22:19, 20F

02/19 22:27, , 21F
又是一個用語言跟框架比的
02/19 22:27, 21F

02/19 22:34, , 22F
樓上 問題是ruby很少有超輕量級的web solution的討論
02/19 22:34, 22F

02/19 22:36, , 23F
原PO意思就是不要讓新手碰RoR PHP剛好是一個無框架好上手
02/19 22:36, 23F

02/19 22:37, , 24F
的選擇 這也是PHP當初設計的中心思想
02/19 22:37, 24F

02/19 22:39, , 25F
呃,ruby明明就有sinatra不是嗎
02/19 22:39, 25F

02/19 22:39, , 26F
那何不用laravel ci 來比看看
02/19 22:39, 26F

02/19 22:49, , 27F
所以要直接請新手上laravel的意思? 完全沒碰過前後端的?
02/19 22:49, 27F

02/19 22:51, , 28F
如果是我會推新手用ASP.NET Web Pages 2 w/ Razor syntax
02/19 22:51, 28F

02/19 22:51, , 29F
來上手 這也是簡單的選擇 未來要上ASP.NET MVC也可銜接
02/19 22:51, 29F

02/19 22:51, , 30F
02/19 22:51, 30F

02/19 22:51, , 31F
http://tinyurl.com/z3krnga也不一定要照教學用WebMatrix
02/19 22:51, 31F

02/19 22:51, , 32F
Visual Studio Community 2015也行 這東西的問題大概就在
02/19 22:51, 32F

02/19 22:51, , 33F
能見度太低 以及是微軟的技術就會被黑吧
02/19 22:51, 33F

02/19 22:57, , 34F
asp.net中文書超多超齊~ php在books搜尋的第一個結果...
02/19 22:57, 34F

02/19 22:58, , 35F
ASP.NET的問題在於不能掉到Webform的坑裡XD
02/19 22:58, 35F

02/19 22:59, , 36F
他如果想表達fw對新手不友善怎不使用laravel 做比較?
02/19 22:59, 36F

02/19 23:04, , 37F
而是選擇一個一個跟php壓根沒關係的FW 來戰
02/19 23:04, 37F

02/19 23:05, , 38F
學.net 千萬不要掉到WebForm的坑...因為完全不了解Web
02/19 23:05, 38F

02/19 23:06, , 39F
的運作原理就去學Webform的確很快 拉一拉就有東西了
02/19 23:06, 39F

02/19 23:06, , 40F
因為沒人會推新手學laravel 可是會有人推新手學RoR
02/19 23:06, 40F

02/19 23:07, , 41F
但是相對的如果你不了解JS CSS HTML就只會拉一拉控制
02/19 23:07, 41F

02/19 23:08, , 42F
項 的方法已經不能滿足目前使用者對Web的需求 觀念不
02/19 23:08, 42F

02/19 23:09, , 43F
正確以後 要滿足一些需求都做不到
02/19 23:09, 43F

02/19 23:14, , 44F
你這句有點忠肯
02/19 23:14, 44F

02/19 23:16, , 45F
Webform是微軟當年挖給視窗開發人員跳的 Java相對應的jsf
02/19 23:16, 45F

02/19 23:16, , 46F
都不知道去哪了 Webform還活著
02/19 23:16, 46F

02/19 23:21, , 47F
推新手學PHP,這樣我們才有SQL injection可以玩 XD
02/19 23:21, 47F

02/19 23:24, , 48F
所有的SQL教學都應該要標註不可組合SQL字串與使用參數化
02/19 23:24, 48F

02/19 23:24, , 49F
查詢才對......
02/19 23:24, 49F

02/19 23:25, , 50F
應該說 不可組合來自使用者輸入的字串成為SQL指令
02/19 23:25, 50F

02/19 23:49, , 51F
你自己用 lavaral 然後叫別人不要不要用 Ruby on Rails ?
02/19 23:49, 51F

02/20 00:03, , 52F
.net有不錯的進階書 不知php比較進階的書是什麼
02/20 00:03, 52F

02/20 00:29, , 53F
是因為php 7.0效能躍進 所以浴火重生嗎XD?
02/20 00:29, 53F

02/20 00:38, , 54F
所以 ror 的缺幾乎都找 senior,嗚嗚
02/20 00:38, 54F

02/20 00:55, , 55F
其實他常常發這種爭議文啦…像之前的 MVC 也是
02/20 00:55, 55F

02/20 01:01, , 56F
為何ROR不跟Laravel比?我想是程式語言的「目標」的關係吧
02/20 01:01, 56F

02/20 01:02, , 57F
Ruby一開始不是鎖定在Web使用 所以要拿來做網站就一定要裝
02/20 01:02, 57F

02/20 01:02, , 58F
一些東西 那PHP一開始就是為了網站而生 配套的懶人包也有人
02/20 01:02, 58F

02/20 01:03, , 59F
做好好 一鍵安裝完就能直接在html碼寫程式 對新手來說真的
02/20 01:03, 59F

02/20 01:04, , 60F
方便太多太多這是事實 要知道 真正的新手 說不定連AppServ
02/20 01:04, 60F

02/20 01:04, , 61F
一鍵安裝完都可能會出問題...
02/20 01:04, 61F

02/20 01:05, , 62F
簡單說現在Ruby就是缺少一種像AppServ這樣的懶到不能在懶的
02/20 01:05, 62F

02/20 01:10, , 63F
超懶包 快寫信給Matz桑跟DHH請他們也弄一個啊XDD
02/20 01:10, 63F

02/20 01:14, , 64F
用肉卷開 vm 阿(?) ref. tinyurl.com/j4zrlhb
02/20 01:14, 64F

02/20 04:14, , 65F
推,程式能力可以繼承,但是從framework不去讀source
02/20 04:14, 65F

02/20 04:14, , 66F
code註定悲劇
02/20 04:14, 66F

02/20 08:35, , 67F
想請問如果已經學了一陣子的RAILS是應該繼續下去還是
02/20 08:35, 67F

02/20 08:36, , 68F
重新學PHP呢? 最近看了一下104,RAILS職缺超少 又沒新
02/20 08:36, 68F

02/20 08:36, , 69F
手缺...
02/20 08:36, 69F

02/20 08:37, , 70F
可是重學PHP又不知道要再花多久
02/20 08:37, 70F

02/20 09:32, , 71F
用RoR比PHP很怪,應該提倡的是新手應該先學好基本再用Fr
02/20 09:32, 71F

02/20 09:32, , 72F
amework
02/20 09:32, 72F

02/20 11:33, , 73F
學了一陣子 ror 如果還可以上手,幹嘛再換回去PHP
02/20 11:33, 73F

02/20 12:38, , 74F
小魯有菜鳥鐵路工經驗 但還是收到很多無聲卡
02/20 12:38, 74F

02/20 18:25, , 75F
其實.net MVC 和ROR的架構很像而且很適合初學XD
02/20 18:25, 75F

02/20 22:20, , 76F
學 rails 的過程的確頗辛苦的,不過連這苦都過不了的話...
02/20 22:20, 76F

02/20 22:21, , 77F
建議還是去賣雞排吧 XD
02/20 22:21, 77F

02/20 22:48, , 78F
推.NET MVC 基礎觀念引入清晰 注意WebForm
02/20 22:48, 78F

02/21 02:56, , 79F
django...
02/21 02:56, 79F

02/21 23:36, , 80F
賣雞排不一定會輸啊
02/21 23:36, 80F

02/29 15:21, , 81F
我是HTML-> CSS-> javascript-> MVC架構->mysql
02/29 15:21, 81F

02/29 15:22, , 82F
還有PHP 我是有寫過C拉所以PHP很多部分是在學架構不是語
02/29 15:22, 82F
文章代碼(AID): #1MnmS0f4 (Soft_Job)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 8 篇):
文章代碼(AID): #1MnmS0f4 (Soft_Job)