這個小眾的編程語言,無意間改變了全球程序員的命運!
2005年4月是個神奇的月份,這一月同時出現了兩大版本控制工具:Git和Mercurial。
Git如今人盡皆知,Linus創建Git的過程也是個傳奇,但是早期的Git更像一個黑客工具“”,主要在Linux內核那個小圈子內使用。
Git在Windows上沒有原生的移植版本,而是用 MinGW(類似 cygwin)包裝了 git,在Windows下無論是速度還是兼容性都很差。外界很少有人每天都使用它。
相比而言,Mercurial更加引人矚目,它的發布僅比Git晚了幾天,但功能更完善,界面也更友好。
特別是Mercurial采用Python編寫,跨平臺能力很強,在Windows下用得很爽。
所以,Mercurial受到了很多公司和開源項目的熱烈歡迎,Mozilla Firefox、OpenJDK、Python(3.5之前),Google,Facebook、諾基亞、Bitbucket等都在使用Mercurial。
如果按照這個勢頭發展下去,Git可能主要被Linux內核開發者使用(這也是Git要解決的問題), 而Mercurial將有機會一統江湖。
但是2007年10月18號的一個晚上,一群Ruby愛好者在舊金山的的聚會,無意間改變了這一切。
1."帶火"Git
參加這天聚會的有個叫做Tom Preston-Werner的人,他對新生的Git非常感興趣。
沒錯,確實是“新生”,2007 年 2 月,Git 1.5 版本發布,一改原來的命令不直觀、工作流不友好、文檔零散的情況,讓Git 第一次“從黑客工具變成普通開發者可用的軟件”。
Tom開發了一個叫Grit的軟件,可以使用Ruby代碼以面向對象的方式來訪問Git。
很多年輕的程序員可能都不知道Ruby了吧?這門語言本來不慍不火,但是2004年由于Ruby on Rails的橫空出世,讓Ruby也天下皆知。
Ruby on Rails以其開創的“約定重于配置”,“Don't repeat yourself”的理念名揚天下,它的代碼非常優雅,開發速度號稱是Java的10倍,非常適合開發當時的Web2.0網站,無數開發人員都轉投到Rails門下。
Twitter、GroupOn、Airbnb、Hulu等著名網站在早期都是用Rails開發的。
Tom在聚會上兜售自己的想法:用Rails做一個面向程序員的網站,他們可以在上面保存、分享自己的Git代碼庫。
這個想法吸引住了Chris Wanstrath,Chris執行力驚人,說干就干,晚上10點24,就提交了第一批代碼。
Tom 和 Chris 都有全職工作,兩人就利用晚上和周六的時間開發,三個月的努力后,這個叫做GitHub的網站上線了,它的口號就是:Socail Code Hosting。
圖片
Social Code Hosting的核心賣點就是“fork + pull request”這種社交式協作模式。
之前最大的開源代碼托管網站是SourceForge, 你要想參與某個開源項目,比如修復了Bug,需要通過郵件的方式把代碼發給開源維護者,很麻煩。
現在只要fork一個項目,在本地修改,然后發個pull request, 審核通過就可以合并,非常方便。
雖然這是一個革命性的變革,但任何新生事物的早期推廣,都是非常艱難的,GitHub也不例外。
幸好,GitHub得到了Ruby社區的支持,2008年4月,Ruby on Rails率先拋棄Subversion,遷移到了GitHub。
這個大消息對整個Ruby社區產生了示范效應,自己鐘愛的框架都跑到GitHub了,大家紛紛效仿,入駐了GitHub。
更有利的是,做RoR的程序員開發Web頁面時都會使用JavaScript, 很多Ruby大牛也是JavaScript社區的核心成員,例如Yehuda Katz(Ember.js的作者,jQuery 和 Ruby on Rails核心成員), 這就使得JavaScript社區開始關注GitHub,并且紛紛向GitHub遷移。
如果你看到GitHub上有海量的JavaScript和Ruby 項目,就不足為奇了。
隨后的故事大家都知道了,GitHub迅速破圈,吸引了Python、PHP、Java等社區的項目入駐,贏得了公司的支持,很快就形成了事實性標準。
Git也隨著GitHub的崛起,從Linux內核社區走出,成為程序員必備的工具,如今再不會Git,可能連工作都找不到。
那些曾經使用Mercurial的公司也逐漸遷移到GitHub,Mercurial遭到重創,成為一些公司的小眾選擇。
毫不夸張地說,Ruby社區的人極大地影響了Git的命運。
2."催熟"Redis
Ruby社區不但影響了Git,還“催熟”了Redis。
2009年,有個叫大衛的人在Google Code上發現了一個名為Redis的項目,不知道他是否真的嘗試過這個軟件,還是覺得它很酷,于是就跑到HackerNews上發了一個帖子:
(此時GitHub已經發布兩年,但是Redis還是選擇了Google Code,可見對新生事物的接受總是有一個過程)
這個帖子最早只有5個人評論,有3個人都在“安利”其他類似的支持Key-Value的內存數據庫:memcachedb,Tokyo Cabinet,Datastore 。
只有一個人提供了真正的幫助,這個人就是 Ezra Zygmuntowicz,一位非常知名的Ruby on Rails開發人員,也是也是 Engine Yard 的創始人之一。
Ezra 不僅鼓勵了鼓勵了Redis作者antirez :“嗯,Redis真的很酷。......我真的很喜歡能夠將列表存儲為值...... 你能聯系我嗎?我很想跟你聊聊關于 Redis 的事。”
他還用Ruby迅速實現了一個Redis的客戶端,發了一條推文:
圖片
在Ezra的推動之下,Redis的技術價值迅速找到了最佳落地點——Rails 社區。
當時的Rails非常擅長開發Web2.0的網站,但是卻難以擴展規模,這也是所有Web框架都遇到的通用問題。
Redis不但可以實現高并發的緩存,降低數據庫的負載,還可以實現分布式Session,支持無狀態擴展,這實在是一件利器。
不久以后,著名的Twitter采用了Redis,成為“標志性背書”,讓 Redis 從小眾走向主流。
可惜的是Ezra英年早逝,antirez發了一個帖子紀念他,其中特別提到:Ezra是第一個讓Redis流行起來的人。
圖片
3.Ruby社區為什么這么神奇?
你可能會說,Git和Redis那么優秀,是金子總會發光,沒有Ruby/Rails社區,它們也能火起來。
確實是,但是我覺得時間線可能會被極大地拉長,因為大家對新事物的接受度都有一個過程。
其實Ruby/Rails社區不僅帶火了Git和Redis,它還幫助多個后來大受歡迎的項目在早期獲得關注:
Chef:基礎設施即代碼的著名工具
Capistrano:將Web應用自動化部署到多個服務器
Vagrant:虛擬機開發環境的自動化管理工具
Homebrew:macOS 上的軟件包管理器
Jekyll:靜態網站生成器
Travis CI:繼續集成平臺
Rails社區能這么神奇,我覺得主要有這么幾點:
1).Rails高度集成化,提供了從數據庫到前端模板的完整方案。
大家都在相同的技術棧上開發,很容易共享最佳工具和實踐,當Redis,Chef適配了Rails以后,所有人立刻就可以試用并反饋。
2)Rails核心團隊本身就是一群積極寫博客,錄 screencast、做演講的人,布道文化濃厚。
社區成員非常樂于在各種會議,MeetUp中分享自己的工具,GitHub的誕生就充分說明了這一點。
當時的 Rails 開發者大量活躍在 Twitter、博客圈和 GitHub,這些渠道的傳播速度遠超傳統技術媒體,只要幾位社區 KOL(如 DHH、Ezra)推薦,一個項目就能在一兩周內火遍全社區。
可惜的是,大概是2013年以后,前端革命興起,AngularJS、React、Vue 流行,讓很多公司做了前后端分離,Docker和k8s又促進了微服務架構的流行,這都和Rails那種一站式的框架理念背離。
再加上Ruby性能劣勢明顯,在高并發、實時性要求高的業務里不具競爭力,沒有在移動互聯網、人工智能、大數據、IoT等領域搶占一席之地。
總之,技術的變遷讓Rails不再流行了。
不過,有個叫José Valim的巴西人對Ruby做了“升級”,發明了一個叫做Elixir的編程語言,Elixir保留了Ruby靈活的語法和強大的元編程能力同時,又可以運行在Erlang虛擬機中,具備了高并發、容錯和分布式的特性,特別適合開發分布式、可擴展的、高并發的應用程序,受到了很多大廠的喜愛。