如何學習ruby?Ruby學習技巧分享

來源:互聯網
上載者:User

標籤:yourself   如何學習   怎麼學習   repeat   程式員   

怎麼學習ruby?在學習ruby之前需要掌握哪些知識呢?這是很多想要學習ruby朋友的心聲,我不具體給出答案,下面就給大家講講一位前輩學習ruby(http://www.maiziedu.com/course/ruby/)的學習曆程吧。在大學時學的電子專業,在學校裡學過C/彙編,在學習ruby前期,和大多數的Rubyist一樣,我也是從學習Rails開始去瞭解Ruby的,在學習Rails之前,我正在使用JavaEE的SSH架構(struts+spring+hibernate), 當時也算是Java入門的階段,並沒有做的多深,各種XML配置,搞的我眼花繚亂,對Java頓時有點絕望:是不是我以後的編程生涯就和XML打交道了呢? Rails的約定大於配置,DRY(Don‘t repeat yourself)等概念,深深的吸引了我,使用Rails,再也不用去煩那一大堆XML配置了,我只要專心寫我的Ruby代碼就可以了,這才是快樂的程式員嘛。呵呵,不知道有多少人和我的經曆類似呢? 我想應該也有不少人吧。

 

說到Rubyist, 我曾經也不理解,為什麼叫Rubyist,而不叫Rubyer或者其他? 後來我才明白了, Rubyist,有點Artist的意味。Ruby語言算是編程領域裡最具藝術氣息的了,所以我們把Ruby程式員叫做Rubyist。但實際上,很多人離真正的Rubyist還很遠,包括我自己啦。

懵懂:

 

正是經曆過這個階段,所以我很瞭解現在的初學者的心情:「不是15分鐘開發一個blog嗎? Rails很好學,很好用,很好玩,我要快速精通它」。 很多Rubyist的入門書就是「Agile web development with Rails」和 「Programming Ruby」, 基本上,如果通讀這兩本書並練習以後,基本就可以上手了。當然現在也湧現出很多學習Rails的優秀書籍,比如 「Ruby on Rails Tutorial」和最近kickstarter上面眾籌的「Learn Ruby on Rails」,還有官方的「Ruby on Rails Guides」, 在我開始學習的時候,官方的文檔可沒有這麼好。

 

有這麼豐富的資料,我們對於Rails的入門,基本沒有什麼困難了。 但是你有沒有發現,你已經陷入了一個巨大的細節裡面去了。我所說的這個巨大的細節,就是指Rails。

 

我們最初學習Ruby的目標是掌握Rails, 所以潛意識裡,Ruby的學習,放到了第二位, 而Rails成為了第一位的學習目標。在你通讀各種參考書入門之後,也許你可以開發一個簡單的web網站,也可以把自己的Rails技能運用於一般的工作中,但是你會發現,你終會達到一個學習的瓶頸。 Rails社區的一個好處,就是有很多的Gem,各種各有的Gem讓你快速的開發,但是你真正的瞭解這些Gem嗎?開發,並不是一個簡單的功能堆砌。

 

當你聽說現在流行Cucumber,所以對自己該選用Cucumber或者是Rspec感到迷惑了起來,MiniTest的崛起,又讓你感到更迷惑了,我該用哪個?

當你聽說Rails4預設了安全執行緒,那麼你是否知道什麼是安全執行緒?Rails3不也是安全執行緒的嗎?預設的意義何在?

當你聽說sidekiq比resque更省記憶體的時候,就馬上想去嘗試改用sidekiq,有沒有想過,為什嗎?sidekiq比resque寫的好?

。。。

等等

 

這個時候,我們僅停在了使用階段!因為你已經陷入了Rails的細節裡,你忽視了Ruby。

 

所以,此時,你僅僅是個Ruby碼農,離Rubyist,還差很遠。

深入

 

如你所見,你所用到的一切,都是Ruby構建起來的:Rails、Sinatra、Cucumber、RSpec、Sidekiq、Resque等。

Ruby + Web開發知識 + 架構思想 -> Rails/Sinatra

Ruby + TDD/BDD等敏捷實踐 -> Cucumber/Rspec

Ruby + 多線程/多進程並發 -> Sidekiq/Resque

Ruby + Actor並行存取模型 -> Celluloid

Ruby + Socket+Reactor -> eventmachine/Goliath

...

等等等

 

所以,你要想深入掌握上述各種工具,你就需要系統的去學習Ruby,並且在學習Ruby的過程中,去學習相關的領域知識,這是一個良性的迴圈過程。

 

Ruby是一個物件導向並同時兼有函數式編程特性的神奇語言,所以在你隨著Ruby的深入學習,你同時可以深入學習物件導向和函數式編程兩種範式的特性。

 

所以,當我們說深入學習Ruby的時候,不是在說Ruby的文法該如何用,而是在說:

 

1 Ruby背後的設計哲學及其底層實現。

2 Ruby與系統(包括其他領域,比如web)的互動

3 Ruby如何根據它的物件導向和函數式編程特性、及其元編程能力去構建漂亮的DSL

 

達到這個階段,你可能脫離了Ruby碼農的層次,達到一個新的境界了,離Rubyist已經很接近了。

哲學

 

如果說演算法是一個合格的程式員必須掌握的,那麼哲學,也是一個合格的程式員必須要領悟的。

 

我不是一個哲學大師,請不要誤會。

 

哲學是我們學習和解決問題的靈魂,我只在這裡分享幾條我用到的哲學經驗:

1. 重是輕的根本,靜是躁的主宰.

 

Ruby,只有基礎紮實了,才能用的靈活。

當我們碰到問題的時候,著急沒用,靜下心來思考,順藤摸瓜,找出問題。

當我們學習的時候,不要急於求成,靜下心來學習,慢就是快。

2. 存在即合理。

 

對於這句話,我的理解就是, 當程式出現了詭異的bug,或者,當你的項目在你機器上能用,而到伺服器上不能用的時候,你應該想想,這個問題並不詭異, 程式是按你的指令執行的,肯定是你哪裡出問題了,而且可能是個嚴重的問題!請認真對待這個問題!

學習的時候,碰到一個概念,應該多想想這個概念產生的合理性,比如TDD/BDD, 有了TDD為什麼還會有BDD?

3. 哲學經典三問: 你從哪裡來?你是誰? 你要到哪裡去?

 

當我們學習新技術的時候,我們就該問了:

這技術是基於什麼情形產生的,或者是這技術是為瞭解決什麼問題而出現的? (你從哪裡來?)

這技術是如何?的?這項技術如何去使用? (你是誰?)

這技術要解決的問題是永久性的嗎?未來的發展會如何?和這種技術類似的有哪些技術,它們的發展如何?(你要到哪裡去?)

總結:

 

本文,與其說是「如何學習Ruby」,不如就說是「如何學習」,因為以上方法論,適用於你學習任何東西。

 

 

 


如何學習ruby?Ruby學習技巧分享

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.