【譯】爲何教Ruby

PS: 這是國外一位有20多年編程經驗的培訓師在Medium發表的對Ruby及編程的一些見解,無論是不是程序員均可以考慮看一下。若是你想學編程卻苦於不知道選什麼語言,或許這是一篇不錯的參考。原文連接: medium.com/flatiron-la…程序員

Ruby

Ruby在市場上可能只是佔有較小的份額。但這並非爲何你應該學習它的理由。npm

做爲Flatiron School的創始人兼院長,我以爲針對最近一些學校把他們的課程焦點從Ruby轉向Java所形成的影響寫個反饋是很重要的,畢竟這意味着Ruby和Ruby On Rails的就業市場正在縮小,或者說它的流行度及重要性正在衰減。編程

回想我做爲程序員的職業生涯,個人工做主要是使用ASP,JavaScript,PHP,C#和Ruby並伴隨着少許其餘的編程語言(包括Java)。做爲一個老師,我使用Ruby On Rails還有JavaScript來教授Web開發已經有超過5年時間了,幫助了數以千計的學生開啓他們的編碼職業生涯。後端

在Flatiron School,咱們着迷於職位的產出。在這4年內,咱們把它放在重要的位置上,而且發佈了獨立審計及覈實工做報告它詳細描述了咱們的畢業生在就業市場中的表現。讓咱們很是自豪的是,4年裏咱們已經有超過1000個畢業生,卻依然能夠在技術領域維持着如此高的就業率。ruby

真相是編程學校裏面教的程序設計語言,不該該與就業市場直接掛鉤。咱們是代碼訓練營的先驅者,即使是在2012年,Java,PHP都比Ruby佔有着更大的市場份額。併發

Very Long Term History

評估一個語言的流行度是一件困難的事情,可是https://www.tiobe.com/tiobe-index/ 這個網站包含許多測量手段,從社區指標,職位,還有相關平臺的狀況來綜合評估。框架

IEEE Spectrum

IEEE Spectrum還提供了更多篩選項來查看一門語言的流行度。spectrum.ieee.org/static/inte…編程語言

代碼訓練營若是隻是簡單地針對最大的就業市場來進行教育是不現實的。使Flatiron School成功的因素是一門用於教授編程的課程不該該侷限於特定語言,而應該把焦點放在抽像的及通用的概念上。並且其中最重要的是學習如何學習的元能力。固然一個Flatiron School的畢業生也會較爲深刻地瞭解Ruby和JavaScript,可是他們如此有競爭力的根本緣由是他們能夠快速地掌握任何東西。咱們的畢業生們會繼續在工做中使用任何一門能叫的上名字的編程語言進行編程,其中就包括一個工程師在爲波音757s貢獻着Java代碼。工具

不要用你所學的第一門編程語言來定義你本身

許多人以爲一個程序員應該要由他所學的第一門編程語言來定義,這在我看來是很是短視的。程序員簡單地把本身定義成一個Ruby程序員或者PHP程序員是不值得的。咱們是程序員而編程語言只是咱們的工具。咱們能夠選擇合適的工具來處理不一樣的場景和問題。他們經過編碼訓練營給新進程序員們打上相似「Java」或者「Python」這樣的標籤在我看來是有危險的,我擔憂學生們會被本身聲稱已經精通的編程語言永遠地限制了潛在的能力。若是歷來不教學生如何去學習一些特定語言以外的東西,就會對他們編程語言外的身份缺少自信。培訓學校的壓力來自於實用性,市場驅動,經過設置總體性,通用性更強幷包含哲學思索能力的課程,可以更好的訓練他們,並不只僅是爲了第一份工做,而是一個更豐富的職業生涯。性能

Language

咱們都有本身喜歡的語言,咱們其實都很棒。

Ruby程序員的需求將愈來愈少這個宣言是無關痛癢的。正如我前面所提到以及將要闡述的我並不信奉教人們如何成爲一個「[某語言]」程序員。咱們能夠繼續把Ruby做爲首選語言,無論Ruby在就業市場中的需求如何,我對咱們的畢業生會持續保持競爭力這件事情充滿信心。然而,有件很重要且須要說明的事情是Ruby依舊是被須要的技能並伴隨着一個正在擴張的就業市場。Ruby On Rails依然是創業公司的選擇,隨着每一次「Rails new」的執行,將會會有許多新的企業誕生。除了創業公司以外,大規模的公開交易還有私人公司已經使用Ruby和它的生態圈許多年了,而且我看不到它中止的跡象。Ruby On Rails成爲Shopify, GitHub, Twitch, Airbnb這些公司的主要後端技術棧,以及比這更多的是基於Ruby開發的DSL,這其中就有許多跟Ruby相關的使人驚歎的工做機會。但它的市場是否像Java那麼大?不。但這都不要緊,畢竟無論是Java仍是Ruby,它們的市場都是很難飽和的,程序員不該該老是經過語言來診斷機會。

我並不以爲圍繞着成爲一個「Java」,「Ruby」或者說「[某語言]」程序員來開發一門課程會是教育上的謹慎。這會使你的畢業生太同質化,界定了他們的工做機會,限制了他們的競爭力,而且在教他們爲職業終身學習這件事上會面臨失敗。從隨着Ruby及Ruby On Rails的流行度正在減小,某些課程焦點的切換這些事來看個人說法是值得懷疑的。依照經驗並從一千多位畢業生身上,咱們看不到Ruby需求的缺少。咱們看到任意規模的公司依然繼續擁抱着Ruby,而且一個好學校的畢業生應該有資格使用他們渴望掌握的任何一門語言來勝任相關的工做。

那麼,爲何是Ruby?

若是說學校所教的第一門編程語言並不會直接與職位輸出掛鉤,並且這也沒那麼重要,那麼爲何Flatiron School依然把Ruby做爲首選教學語言,而不是像JavaScript那樣的新熱點或者是一些其餘的如同Java那樣的前沿編程語言呢?對於學生而言,第一門編程語言真正重要的是什麼?

Love it

學生首次學習的無論是什麼編程語言,最重要的事情是,這門語言會讓他深深地愛上代碼。

編程是一門藝術。像是詩篇,舞蹈還有音樂,無論是法國仍是西班牙的詩篇,現代舞蹈仍是芭蕾舞,古典音樂仍是高科技舞曲,這些實際的風格或者表達的語言對藝術而言都沒那麼重要。詩篇並不在於它是印度語,英語仍是德語的,而在於抽象觀念,如押韻,韻律,比喻,隱喻,節奏,構成等等,固然還有其餘-任何語言都可以表達的廣泛概念。編程也不在意是用Ruby,Java,JavaScript仍是C#,而在於抽象的,語義學,封裝,邏輯,接口等等,而且這些概念在每種編程語言中都會有所體現。

做爲一個初學編程的人,最重要的事情是真正學習到那些通用的概念,這些概念會經過你的第一門編程語言表現出來。最危險的事情是你在「這是我爲了找到工做所需學習的全部東西「這種觀念下被教授第一門編程語言,你將永遠學不會怎麼去識別那些概念。會讓你由於這一棵樹而錯失整個森林,也不會明白怎麼去接觸一門新的編程語言。你固然也會遺憾地錯失代碼中全部美好及優雅的東西。

編程的快樂並不會隱藏在一門或者另外一門語言的技術實現中,咱們會在編程的這些非凡媒介中找到快樂,就像是Ada Lovelace在「運營的科學」所說的中。Ada過去曾預言:

「運營的科學,尤爲是做爲數學的衍生物,它自身就是科學,而且有它自身的抽象事實和價值。」

學習編寫代碼卻沒有學會如何去識別工藝上的抽象真理是個不幸的事情。學習一門編程語言歷來都不是學習如何編寫代碼最重要的。學習編碼時最重要的事情是體會到代碼自身驚異的美。學生應該深深地愛上代碼。

咱們培訓學生首先會讓他們愛上代碼,爲了完成這個任務,Ruby是很好的選擇。是什麼讓Ruby成爲程序員美妙的初戀?這應該追溯到這門語言的設計。Yukihiro Matsumoto,就是咱們所知的Matz,一名日本程序員也是這門語言的發明者,明確地聲明過他對這門語言的指望:

Ruby的目標是讓程序員快樂,我着手發明一種可讓我感受到快樂的編程語言,做爲一種反作用,它也會使許多的程序員感到快樂。

Yukihiro Matsumoto

創造一門編程語言的理由能夠有數百種,幾乎全部的理由都會跟編碼的場景有關--爲了跨平臺編譯更容易,爲了優化並行過程,爲了「跑得更快」等等。至今我所知道的,在編程語言的歷史上惟一爲了你的快樂而發明出來的語言就只有Ruby。Ruby重視你(程序員)賽過重視機器。一個早期高產的Ruby程序員,他叫_why_the_lucky_stiff,曾在RailsConf 2016 Talk裏面這樣描述Ruby:

「Ruby是這樣一種東西....用Ruby來寫代碼真的會讓你愛上編碼這件事,感受到熱情和樂趣,它激烈地攪動你的心裏,它是一門多麼美妙的語言,固然我說得有點色情。方法調用是連貫的,脫下了括號,裸露地串聯起來,這就像是......熱情洋溢的紅寶石。」

Book

這些以人爲本的價值觀念,不斷體如今這門語言的設計選擇當中。最鼓舞人心的可能就是Ruby爲相同的任務提供不止一種方式。實現的選擇一般被看作是一門語言的短板。現實中,Python在「Python之禪」中宣稱這樣一條價值觀:「應該有一種-最完美的-顯而易見的方式去作一件事情」。

Ruby卻提供了無數種作事方式,Matz在一次會議上被問到爲何他要這樣設計一門語言,對於同一件事情卻有多種方式去完成,而他的回答道出了Ruby的真心:

「我想要讓Ruby的用戶感到自由,我想要給予他們選擇的自由,人都是不同的。」

於我而言,這無關編程,或者說這不只僅跟編程相關-它是一個文化價值觀,關於自由的重要性。對Matz來講,自由是經過有選擇的能力來體現的。對一我的來講是「合適」的東西,對另外一我的來講卻不必定是「合適」的,可是他們其實都沒有錯,他們只是不一樣而已。並且他們應該有做爲不一樣個體的權利,且不受任何禁錮。我相信它在生命中的價值,宗教自由,婚姻平等,政治派別,固然也包括編碼的自由。

一門編程語言擁抱着像快樂,自由這樣的價值觀可能看起來是無聊且異端的。畢竟,有誰會去在乎編程語言的意識形態?固然不會,畢竟是電腦在運行代碼。那麼關鍵點是什麼?是什麼讓Ruby把人放在比機器更高的位置?爲何在考慮教育的首選語言的時候須要關心語言設計的細微差異?

編程語言只是工具。工具就是那種看起來是可替換的且不重要的東西。而程序員的鼻祖Edsger Dijkstra曾經提出,「咱們所使用的工具對咱們思惟習慣和能力有深遠的影響。」用通俗的話講就是:「當你手裏拿着一個錘子的時候,你看什麼都像釘子。」

hammer and nail

你使用的工具將會影響你的思考方式。而你思考問題的方式是最重要的事情。所以,你用來解決問題的工具將會約束你的想法還會對你是否能解決問題形成影響。每個工具被設計出來都有它內在的價值。一個錘子的設計的價值主要在於它能夠揮舞,在必定重量的固定錘頭在前方連同輕盈修長的身體建立了用於衝擊的長弧。一個螺絲刀的價值在於結合了長杆以及特定的螺絲頭,你能夠經過扭動它來完美處理各類尺寸的螺絲。你能用螺絲刀來錘一個釘子嗎?或許能夠,但在這種場景下,它是一個易用的,高效的,優雅的或者說是值得推薦的工具嗎?不,對於人類而言做爲工具最重要的是它將被如何使用和能被如何使用。

那麼咱們能用Ruby來作什麼?固然,我知道我本身喜好Ruby,我從事編程工做20多年懂得一大堆語言但卻歷來沒有一門語言讓我像對Ruby那般喜好。不只僅是我-許多開發者在學習Ruby以後都愛上了它。_why_the_lucky_stiff表達過一種情感,我想這也是許多開發者對Ruby的感受。

images

個人良心不會讓我把Ruby當作一門計算機語言,由於這將會暗示着這門語言主要是爲計算機工做的。若是一門語言設計出來首要的且最重要的目的是爲了適應計算機,那麼,咱們(編碼者)就像是外國人在計算機這個國度尋找公民權。這就是計算機的語言而咱們是這個世界的翻譯者。

可是當你的大腦能夠用這門語言來思考,甚至能夠用這門語言獨特的文字還有語法來表達你本身的時候,你會怎麼評價這門語言?這怎麼可以被稱爲計算機語言呢?這是咱們的語言。用它來「說話」是很天然的事情。

咱們不能再把它稱做計算機語言,它是用來表達咱們思想的語言。

這裏還有一些關於Ruby的東西,我不能很完整地描述,多少會遺漏掉一些,就是Ruby的編程社區。爲何Ruby開發者可以持續地爲現代的Web開發提供創新的靈感呢?現在的Web開發在性能表現還有產出速度來看都是很快速的。最佳實踐以及相關的約定在不一樣語言之間是通用的,開發者的工具集以及工做流在今天都是必須品。Ruby開發者率先開拓Ruby On Rails這樣的用於快速開發網站的框架,它的約定可以讓你在5分鐘以內構建出一個博客引擎。Ruby On Rails是第一個擁抱REST並讓它成爲標準的主流框架。不多的Ruby開發者會關心SVN版本控制以及Trac糟糕的用戶界面,他們會擁抱Git還有GitHub。Express.js的DSL以及不少其餘的特定領域語言都承襲於Ruby,如今也被其餘語言沿用着。Heroku是無需麻煩配置,虛擬化,Web應用託管平臺的鼻祖一開始是Ruby程序員爲其餘的Ruby程序員所建立的。Ruby程序員已經建立了許多使人驚歎的公司:GitHub, Twitch, Twilio, Airbnb, Shopify等等。Ruby這樣一門趁手的語言,它的影響還有衝擊力是至關大的。

這就是我闡述Ruby的方式,再次回到咱們所使用的工具中,創新須要作一些不同的事情。Ruby程序員組成的團隊厭煩了Ruby On Rails處理依賴(你的應用程序用來加速開發進程的開源程序)的方式。爲了解決這個問題他們建立了一個叫作Bundler的開源軟件。每一種編程語言都有像Bundler那樣的解決方案的相關實現,包括Facebook的yarn(npm的一種改進),幾乎是直接沿用了Bundler的思想。這一切都是由於他們決定在管理依賴上嘗試些不一樣的東西。

大概相同的時間,另一組Ruby程序員在尋思若是人們能夠出租他們額外的生活空間將件是多麼好的一件事情。這是一個瘋狂的想法,因此他們用Ruby On Rails迅速構建了一個可行的產品,並對其進行快速迭代。通過多年的修修補補最終有了市場還有點擊率,因而咱們就有了Airbnb。

我能夠說出許多Ruby程序員在編程界以及商界創業成功的故事,但並非聲稱這是Ruby社區獨有的奇蹟。我四周看了一下,改變世界的有許多使人難以置信的道路,咱們不可能全都瞭解,不過Ruby會佔據其中的一條。

爲何許多Ruby程序員可以經過創新與發明中取得成功?Ruby編程語言鼓勵創新,而且咱們可以用它來創新。若是用錘子意味着搖擺,用螺絲刀意味着轉動,則用Ruby編程意味着創造。Ruby這個工具但願你能夠感受到快樂,當咱們快樂的時候咱們就能夠一邊玩耍一邊探索了。Ruby這個工具想要咱們重視表達並讓你能夠像使用人類語言那樣純粹地交流。Ruby這個工具但願你不同凡響並創造出你本身的語言。Ruby開發者繼承了這種價值觀併發揚了人類具備創造性的精神。

image

爲了解更多關於Flatiron School的事情,請訪問這個網站,關注咱們的Facebook還有Twitter,以及你身邊的即將到來的事件

Flatiron School是WeWork家族中讓人感到自豪的成員。能夠切換到咱們姐妹的技術博客WeWork TechnologyMaking Meetup

相關文章
相關標籤/搜索