开始了大概三四天的Rails学习之路
最近因為一位極光推送朋友,我開始了大概三四天的Rails學習之路,最終達到的水平是可以比較輕松地做出大部分功能,然后自我感覺可以自如地按照Rails的設計思想去思考。由于編程的日益流行,我結識了越來越多非計算機系的學生出于愛好開始寫代碼,但是其中的大部分人也許在用著一些錯誤的學習方式來學習編程,為了避免大家再繼續走彎路,在這篇文章中,我會介紹下一個初學者要如何學習Rails。
1. 為何而學,目標是什么?
今天和朋友在走路時,談到要如何學習Rails,我問的第一個問題是,你為什么要學習Rails,你學習編程的目標是什么?為何而學,最終希望達成的結果是任何學習前也許都需要明確的。如果目標是學習“通用性”程序,無論是為了處理數據、還是為了學習語言本身,那么我都建議早點拋棄Ruby,投入到Python的懷抱,雖然任何語言都是圖靈完備的,但是每門語言都有著其最合適的應用場景,Ruby幾乎完全依賴Rails存在。OK,這里我們暫且假設你學習的目標就是為了可以搭建一個Web網站,好的,我們繼續向下說。
2. 學習基本的HTML知識
這是大部分初學者學習Rails都忽略的一點,了解基本的HTML知識非常重要。HTML并不需要掌握太深奧的知識,畢竟我們只需要入門。
如果是精力允許可以花上1到2天左右時間快速通讀這本書: 《Head First HTML與CSS》我那位極光推送的朋友就是這么干的。
讀的時候不需要對細節過于在意HTML標簽和CSS樣式屬性的細節,只需要大概了解其中的所有標簽,做到腦中有印象,記住一些常用的標簽,知道CSS如何作用于HTML即可。復習時隨便打開一個網頁,對著頁面指出這些都分別是什么元素,大腦構思下如果自己來寫這個網頁要如何組合標簽。
3. 學會使用前端調試工具
Rails隱藏了大部分的HTML標簽,而使用自己的模板語言,這固然方便開發,但是對于調試來說無外乎增加了一層難度。所以學習前端調試工具就顯得尤為重要,常用的前端調試工具包括Firefox的firebug,以及Chrome的Developer Tools。這里以Chome的Developer Tools為例,無須學習過多的知識,了解常用的操作即可。
知道如何查看對應標簽的HTML源碼,然后嘗試去修改一些右側對應的CSS樣式。
了解如何查看網絡請求以及常用的狀態碼含義,例如200, 304, 500等。
4. 學習常用的數據庫操作
學習Rails之前,我們還是要把基礎的東西都學會更合適,最后一步就是數據庫的基礎知識。在這里,我個人更為推薦MySQL,原因是資料更多,在自己的本機上裝一個MySQL,不用學的太深入,按照教程了解數據庫的基本概念:庫、表、行、列。然后按照教程操作,了解如何創建一個數據庫、創建一個表,基本的增刪改查即可。也推薦一本入門書吧官網訪問極光推送看看:
也不用全看完,看到第八章就差不多足夠了。畢竟Rails有很完善的數據庫操作封裝,學習MySQL更多還是為了調試。
5. 學習Rails基本理念
好了,我估計上面的幾步應該花掉了你三天左右的時間,終于可以開始學習Rails了。Rails有著很清晰的學習指南,不需要看書的,看這里就足夠了: http://guides.ruby-china.org/getting_started.html 但是這篇更多還是為了有基礎的人準備,如果沒有任何語言基礎,純粹按照這個教程往下走會發現自己之后毫無擴展性,做其他的項目都很困難。(這也是我發現很多人的問題) 我們不妨同時在教程中穿插一些練習。以下只為思路,具體可以自己把控。
我們先按照他的操作一步步向下走,安裝Rails,使用腳手架創建Blog程序,Hello Rails。OK,進行到第四步后,請大家暫時停下來。這里我們打印出了Hello Rails,可是請大家先做一個練習:這里希望能用之前的HTML/CSS知識做一個相對復雜的Welcome頁面,然后增加導航欄,并且可以根據導航跳轉到一個About頁面。 請大家在這里思考兩個問題:
1. Rails的路由是如何工作的
2. Rails的頁面模板是如何工作的。
然后我們繼續跟著教程去做,完成第5步,然后這里我們再次做一個練習:
A. 將數據庫從SQLite改成MySQL,并且將數據存儲MySQL中。
B. 每執行一步增刪改查的操作都請在MySQL中查看變化
C. 為文章增加一個字段,例如作者。然后學著去做對應修改,運行遷移后請查看migrate中的SQL發生了什么變化。
D. 在瀏覽器查看由Rails生成的表單被解析成了怎樣的HTML,查看每次發送一個提交、修改請求時,發生了那些網絡請求。
E. 在自己手寫的代碼中加入put 打印操作,打印不同的變量,學會基本的調試技巧(例如故意出錯,然后打印結果)。例如在下圖語句中間增加 puts article_params
F. 關上教程,獨立操作新增一個“增加用戶”,“注銷用戶”,“修改用戶”等類似的功能。復習之前的操作。
G. 思考一些問題,Rails到底是如何工作,Rails的一些操作分別做了什么,route, controller, view, model到底如何配合工作,generate, rake等一些我們使用過的命令分別做了什么事情,并且驗證確認。希望這里大家可以在紙上畫出一張圖,畫出rails的每個組件的作用、意義,每個命令都影響了哪些部分。
繼續完成剩余部分,第六部分的作用是完成兩個模型的關聯。與上述的做法類似:
A. 我們每做一步操作要思考這一步到底做了什么?對數據庫做了哪些操作?
B. 如果要將文章和作者相關聯,那么整個程序要如何修改。
C. 我們分別看下對應的數據庫都發生了什么變化?我們不從Rails的角度去思考,單純從數據庫的角度去思考,那么這些表為什么這么設計。
D. 如果要給文章打Tag,Tag和文章的關系是什么樣,程序如何修改,數據庫變成了什么樣子。
E. 如果Tag是由用戶打上去的呢?那么程序怎么辦呢?
F. 我相信上述操作,會碰到各種各樣的問題,善用Google和Stackoverflow,但是解決問題是沒有意義的,要思考為什么這樣就能解決問題,然后想清楚后給自己出一個類似的問題讓自己去解決。另外,善于使用puts打印來調試問題。(雖然很土,但是很好用)
6. 學習Rails的若干問題
A. 學習一門語言最重要的是學習這個語言背后的設計理念和世界觀。這也是我討厭Rails的一點,Rails更加強調約定大于配置,期望你的一切都按照他的步驟去工作,所以我們在學習Rails時最大需要做的轉變就是盡量不要去寫代碼,放下心里的那些不安全感,相信他總會幫你做好的。
B. 面向對象的設計架構。無論是Django還是Rails都是完全秉承面向對象的設計理念。我們在傳統搭建一個項目時,都會首先去想設計這個產品功能時數據庫要設計成什么樣,然后我們的SQL語句要如何去寫。 但是Rails拋棄了數據庫的實現細節(這絕不是不寫SQL那么簡單),例如以上述例子而言,我們只需要明確知道一個Blog會有多個Comment,一個作者會有多個Blog,至于底層如何對應實現交給Rails框架就好了。所以我們需要拋棄語言細節,更多從“對象”的角度去思考整個關系。
C. 不要糾結于Ruby語法本身,對于初學者而言,千萬不要糾結于Ruby語法本身,我相信大部分人至少都考過計算機二級學過C語言,因為大部分功能無外乎增刪改查而已,加起來的語句也就那么多,所以照著寫,然后遇到功能去查,然后記住足以應付大部分問題。至于Ruby語法,等到進階時再去讀把。
D. 一定要想清楚Rails各個組件的功能,一個瀏覽器的url請求到最后HTML頁面展現在用戶面前,都經歷了哪些事情,清楚這個邏輯非常重要。
E. 反復練習。不要貪圖看太多的內容,其實上面那個入門指南已經可以解決80%的問題了,請大家就著某個頁面功能反復打磨這個頁面,比如增加作者,比如刪除評論,比如給評論添加評論,比如所有評論的尾部都帶有一個笑臉等等。
F. 多打印,打印看各種各樣的變量,故意制造出錯,知道這樣做會出錯并且猜到出錯信息是件很值得做的事兒。這樣才能更了解整個框架的運行原理。
7. 寫在最后
我一直不是很贊同Rails Girl , Django Girl這樣的活動,至少不贊同他們的教學模式。編程到底是什么?做出來一個網頁?其實我贊同每個人都學一學編程,但是是因為編程最重要的是一種解決問題的能力,知道怎么辦、為什么這么做遠遠要比這樣做出來重要的多。當我看到很多人照著教程亦步亦趨地完成一個看似很炫的功能,我不得不說,其實沒任何意義,我也并不認為這樣能培養所謂的興趣。思考遠遠比去做有意義的多。
希望大家編程愉快。
????? 作者:極光推送 飛林沙
轉載于:https://www.cnblogs.com/jpush88/p/5169467.html
總結
以上是生活随笔為你收集整理的开始了大概三四天的Rails学习之路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【树】Kth Smallest Elem
- 下一篇: chrome 控制台js调试与断点调试