如何學(xué)習(xí)Ruby

提示:本文是學(xué)習(xí)方法論,不喜勿看。

10年積累的成都網(wǎng)站制作、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有集寧免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

我是從06年底開始關(guān)注Ruby的,07年的時(shí)候投入到了Ruby的開發(fā)中,并持續(xù)到今天。我從畢業(yè)到現(xiàn)在,除了Ruby還使用過VB、Java、JavaScript, 大學(xué)里也學(xué)過C/匯編,因?yàn)槲沂菍W(xué)電子專業(yè)的,偏硬件一些,所以沒有很好的學(xué)習(xí)算法相關(guān)的內(nèi)容,所以本文也不會(huì)涉及算法學(xué)習(xí)的內(nèi)容, 這是我作為一個(gè)程序員的硬傷,當(dāng)然我還在學(xué)習(xí)算法的路上,并未放棄它。

和大多數(shù)的Rubyist一樣,我也是從學(xué)習(xí)Rails開始去了解Ruby的,在學(xué)習(xí)Rails之前,我正在使用JavaEE的SSH框架(struts+spring+hibernate), 當(dāng)時(shí)也算是Java入門的階段,并沒有做的多深,各種XML配置,搞的我眼花繚亂,對(duì)Java頓時(shí)有點(diǎn)絕望:是不是我以后的編程生涯就和XML打交道了呢? Rails的約定大于配置,DRY(Don't repeat yourself)等概念,深深的吸引了我,使用Rails,再也不用去煩那一大堆XML配置了,我只要專心寫我的Ruby代碼就可以了,這才是快樂的程序員嘛。呵呵,不知道有多少人和我的經(jīng)歷類似呢? 我想應(yīng)該也有不少人吧。

說到Rubyist, 我曾經(jīng)也不理解,為什么叫Rubyist,而不叫Rubyer或者其他? 后來我才明白了, Rubyist,有點(diǎn)Artist的意味。Ruby語言算是編程領(lǐng)域里最具藝術(shù)氣息的了,所以我們把Ruby程序員叫做Rubyist。但實(shí)際上,很多人離真正的Rubyist還很遠(yuǎn),包括我自己啦。


懵懂:

正是經(jīng)歷過這個(gè)階段,所以我很了解現(xiàn)在的初學(xué)者的心情:「不是15分鐘開發(fā)一個(gè)blog嗎? Rails很好學(xué),很好用,很好玩,我要快速精通它」。 很多Rubyist的入門書就是「Agile web development with Rails」和 「Programming Ruby」, 基本上,如果通讀這兩本書并練習(xí)以后,基本就可以上手了。當(dāng)然現(xiàn)在也涌現(xiàn)出很多學(xué)習(xí)Rails的優(yōu)秀書籍,比如 「Ruby on Rails Tutorial」和最近kickstarter上面眾籌的「Learn Ruby on Rails」,還有官方的「Ruby on Rails Guides」, 在我開始學(xué)習(xí)的時(shí)候,官方的文檔可沒有這么好。

有這么豐富的資料,我們對(duì)于Rails的入門,基本沒有什么困難了。 但是你有沒有發(fā)現(xiàn),你已經(jīng)陷入了一個(gè)巨大的細(xì)節(jié)里面去了。我所說的這個(gè)巨大的細(xì)節(jié),就是指Rails。

我們最初學(xué)習(xí)Ruby的目標(biāo)是掌握Rails, 所以潛意識(shí)里,Ruby的學(xué)習(xí),放到了第二位, 而Rails成為了第一位的學(xué)習(xí)目標(biāo)。在你通讀各種參考書入門之后,也許你可以開發(fā)一個(gè)簡單的web站點(diǎn),也可以把自己的Rails技能運(yùn)用于一般的工作中,但是你會(huì)發(fā)現(xiàn),你終會(huì)達(dá)到一個(gè)學(xué)習(xí)的瓶頸。 Rails社區(qū)的一個(gè)好處,就是有很多的Gem,各種各有的Gem讓你快速的開發(fā),但是你真正的了解這些Gem嗎?開發(fā),并不是一個(gè)簡單的功能堆砌。

當(dāng)你聽說現(xiàn)在流行Cucumber,所以對(duì)自己該選用Cucumber或者是Rspec感到迷惑了起來,MiniTest的崛起,又讓你感到更迷惑了,我該用哪個(gè)?
當(dāng)你聽說Rails4默認(rèn)了線程安全,那么你是否知道什么是線程安全?Rails3不也是線程安全的嗎?默認(rèn)的意義何在?
當(dāng)你聽說sidekiq比resque更省內(nèi)存的時(shí)候,就馬上想去嘗試改用sidekiq,有沒有想過,為什么?sidekiq比resque寫的好?
。。。
等等

這個(gè)時(shí)候,我們僅停在了使用階段!因?yàn)槟阋呀?jīng)陷入了Rails的細(xì)節(jié)里,你忽視了Ruby。

所以,此時(shí),你僅僅是個(gè)Ruby碼農(nóng),離Rubyist,還差很遠(yuǎn)。


深入

如你所見,你所用到的一切,都是Ruby構(gòu)建起來的:Rails、Sinatra、Cucumber、RSpec、Sidekiq、Resque等。
Ruby + Web開發(fā)知識(shí) + 架構(gòu)思想 -> Rails/Sinatra
Ruby + TDD/BDD等敏捷實(shí)踐 -> Cucumber/Rspec
Ruby + 多線程/多進(jìn)程并發(fā) -> Sidekiq/Resque
Ruby + Actor并發(fā)模型 -> Celluloid
Ruby + Socket+Reactor -> eventmachine/Goliath
...
等等等

所以,你要想深入掌握上述各種工具,你就需要系統(tǒng)的去學(xué)習(xí)Ruby,并且在學(xué)習(xí)Ruby的過程中,去學(xué)習(xí)相關(guān)的領(lǐng)域知識(shí),這是一個(gè)良性的循環(huán)過程。

Ruby是一個(gè)面向?qū)ο蟛⑼瑫r(shí)兼有函數(shù)式編程特性的神奇語言,所以在你隨著Ruby的深入學(xué)習(xí),你同時(shí)可以深入學(xué)習(xí)面向?qū)ο蠛秃瘮?shù)式編程兩種范式的特性。

所以,當(dāng)我們說深入學(xué)習(xí)Ruby的時(shí)候,不是在說Ruby的語法該如何用,而是在說:

1 Ruby背后的設(shè)計(jì)哲學(xué)及其底層實(shí)現(xiàn)。
2 Ruby與系統(tǒng)(包括其他領(lǐng)域,比如web)的交互
3 Ruby如何根據(jù)它的面向?qū)ο蠛秃瘮?shù)式編程特性、及其元編程能力去構(gòu)建漂亮的DSL

達(dá)到這個(gè)階段,你可能脫離了Ruby碼農(nóng)的層次,達(dá)到一個(gè)新的境界了,離Rubyist已經(jīng)很接近了。


哲學(xué)

如果說算法是一個(gè)合格的程序員必須掌握的,那么哲學(xué),也是一個(gè)合格的程序員必須要領(lǐng)悟的。

我不是一個(gè)哲學(xué)大師,請(qǐng)不要誤會(huì)。

哲學(xué)是我們學(xué)習(xí)和解決問題的靈魂,我只在這里分享幾條我用到的哲學(xué)經(jīng)驗(yàn):

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

Ruby,只有基礎(chǔ)扎實(shí)了,才能用的靈活。
當(dāng)我們碰到問題的時(shí)候,著急沒用,靜下心來思考,順藤摸瓜,找出問題。
當(dāng)我們學(xué)習(xí)的時(shí)候,不要急于求成,靜下心來學(xué)習(xí),慢就是快。

2. 存在即合理。

對(duì)于這句話,我的理解就是, 當(dāng)程序出現(xiàn)了詭異的bug,或者,當(dāng)你的項(xiàng)目在你機(jī)器上能用,而到服務(wù)器上不能用的時(shí)候,你應(yīng)該想想,這個(gè)問題并不詭異, 程序是按你的指令執(zhí)行的,肯定是你哪里出問題了,而且可能是個(gè)嚴(yán)重的問題!請(qǐng)認(rèn)真對(duì)待這個(gè)問題!
學(xué)習(xí)的時(shí)候,碰到一個(gè)概念,應(yīng)該多想想這個(gè)概念產(chǎn)生的合理性,比如TDD/BDD, 有了TDD為什么還會(huì)有BDD?

3. 哲學(xué)經(jīng)典三問: 你從哪里來?你是誰? 你要到哪里去?

當(dāng)我們學(xué)習(xí)新技術(shù)的時(shí)候,我們就該問了:
這技術(shù)是基于什么情形產(chǎn)生的,或者是這技術(shù)是為了解決什么問題而出現(xiàn)的? (你從哪里來?)
這技術(shù)是如何實(shí)現(xiàn)的?這項(xiàng)技術(shù)如何去使用? (你是誰?)
這技術(shù)要解決的問題是永久性的嗎?未來的發(fā)展會(huì)如何?和這種技術(shù)類似的有哪些技術(shù),它們的發(fā)展如何?(你要到哪里去?)


總結(jié):

本文,與其說是「如何學(xué)習(xí)Ruby」,不如就說是「如何學(xué)習(xí)」,因?yàn)橐陨戏椒ㄕ摚m用于你學(xué)習(xí)任何東西。


P.S 附帶「誘人的Ruby」課程規(guī)劃簡要:
如何學(xué)習(xí)Rubyrubyroadmap.png


最后,

希望大家關(guān)注微信公眾帳號(hào):RubyStudy,與我討論任何問題,包括對(duì)本文你自己的見解。
如何學(xué)習(xí)Ruby

新聞標(biāo)題:如何學(xué)習(xí)Ruby
當(dāng)前URL:http://muchs.cn/article4/ipipie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、軟件開發(fā)、網(wǎng)站設(shè)計(jì)公司、虛擬主機(jī)、品牌網(wǎng)站建設(shè)、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)