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