GitHub:代碼是程序員溝通最直接的手段
如果不是 Andreessen horowitz 的投資,估計(jì) GitHub 很難被福布斯、CNN、紐約時(shí)報(bào)等傳統(tǒng)媒體注意到。普通大眾之前不了解這個(gè)工具,是因?yàn)樗嚯x記者的世界太遠(yuǎn)了——GitHub 是一個(gè)程序員所使用的托管項(xiàng)目的服務(wù)。
但在一些程序員眼里,它不僅是托管項(xiàng)目的地方,還是“開(kāi)源”項(xiàng)目的大本營(yíng),而且是提高程序員“技術(shù)水平”和“技術(shù)品味”的地方,更是一個(gè)程序員社交的地方。
目前托管在 GitHub 上項(xiàng)目的數(shù)量為 3263005 個(gè),包括 Linux 的內(nèi)核、Ruby on Rails、jQuery、Apache 和最近流行的 Node.js 等等程序員所熟知的開(kāi)源項(xiàng)目和框架。
為何 GitHub 如此受歡迎?
優(yōu)秀的項(xiàng)目管理工具
Artodia 所繪制的圖簡(jiǎn)單而清晰,展示了程序員使用 GitHub 管理項(xiàng)目的一般流程:
- 首先,從原本的代碼倉(cāng)庫(kù)(repository)中拷貝一份出來(lái),創(chuàng)建一個(gè)分支(fork);
- 然后,你可以在自己的分支下修改代碼;
- 當(dāng)你的修改完成之后,可以將自己修改過(guò)的分支與原來(lái)的代碼倉(cāng)庫(kù)中“合并”在一起。“合并”并不是將自己的代碼復(fù)制粘貼,覆蓋原來(lái)的代碼倉(cāng)庫(kù),而是只更新那些修改過(guò)的部分,代碼倉(cāng)庫(kù)其他部分不會(huì)收到影響;
- 而若原本的代碼倉(cāng)庫(kù)中發(fā)生了變動(dòng),這些變動(dòng)也可以更新到程序員的分支中。
這意味著:
- GitHub 允許程序員方便的創(chuàng)立分支,實(shí)驗(yàn)自己的新想法,而不必?fù)?dān)心自己的實(shí)驗(yàn)會(huì)影響原本正在開(kāi)發(fā)中的產(chǎn)品。
- 程序員可以通過(guò)簡(jiǎn)單的命令,讓自己的分支與代碼倉(cāng)庫(kù)的代碼保持一致,不必?fù)?dān)心版本混亂的問(wèn)題;
程序員創(chuàng)建一個(gè)分支的時(shí)候,實(shí)際上是將原本的代碼倉(cāng)庫(kù)拷貝出來(lái),一份存放在 GitHub 的個(gè)人賬號(hào)下,一份保存在自己的電腦中。這意味著:
- 程序員工作不必依賴(lài)網(wǎng)絡(luò),即便是在脫網(wǎng)的環(huán)境下,也能夠順利工作,只要自己的電腦還有電;
- 參與項(xiàng)目的程序員,每人都有一份項(xiàng)目代碼的備份,能夠避免代碼丟失。
GitHub 能夠讓程序員毫無(wú)阻礙、隨時(shí)隨地地實(shí)驗(yàn)自己的新想法,而且不會(huì)影響項(xiàng)目本身,這是它吸引大量程序員和開(kāi)源項(xiàng)目入駐的原因。
開(kāi)源自由的文化
重視開(kāi)源,是 GitHub 的產(chǎn)品、公司以及社區(qū)的重要特征。不但有名的開(kāi)源項(xiàng)目入駐 GitHub,其本身也完全由開(kāi)源技術(shù)打造。
GitHub 公司內(nèi)部的文化相當(dāng)崇尚開(kāi)源精神,這個(gè)精神的核心是自由和平等。公司會(huì)在官方博客上歡迎每一位新加入的員工,配上大圖和一句話(huà)簡(jiǎn)介,而且他們會(huì)讓員工挑選自己喜歡工作的地點(diǎn),不管辦公室還是在家,或是其它。而且,公司的管理方式也非常寬松與自由。
Wanstrath 告訴《華爾街日?qǐng)?bào)》,許多員工感覺(jué)沒(méi)有管理層的時(shí)候,自己能夠更容易獲得成長(zhǎng)。一直以來(lái),GitHub 是一個(gè)沒(méi)有 “老板”的公司,雖然 Wanstrath 的職位是 CEO,但他一直堅(jiān)持名片上只印自己的名字。在 GitHub 工作,員工們一起討論項(xiàng)目的優(yōu)先級(jí),不必接受來(lái)自管理層的命令,每個(gè)員工都可以自由加入自己喜歡的項(xiàng)目。
Preston-Werne 曾撰文一篇,表達(dá):“開(kāi)源(幾乎)是一切”的觀點(diǎn):
- 開(kāi)源代碼是對(duì)個(gè)人和公司而言,是優(yōu)秀的廣告,擁有很強(qiáng)的宣傳力;
- 當(dāng)你的開(kāi)源項(xiàng)目流行開(kāi)來(lái),并吸引了很多人的注意,你會(huì)得到眾人的幫助,他們會(huì)幫你把工作完成得又快又好;
- 如果你開(kāi)放了一個(gè)有用的代碼,你會(huì)吸引聰明的人的注意,他們會(huì)根據(jù)你的代碼,創(chuàng)建一個(gè)分支;他們也可能會(huì)直接向你提意見(jiàn);
- 開(kāi)源代碼是***的簡(jiǎn)歷,它證明你的技術(shù)實(shí)力;
- 開(kāi)源代碼能夠留住聰明的人;
- 將自己的代碼開(kāi)源,可以看到別人是如何使用自己的產(chǎn)品的,他們會(huì)如何改進(jìn),讓你認(rèn)識(shí)到產(chǎn)品應(yīng)該如何改進(jìn);
- 將代碼開(kāi)源可以減少重復(fù)做功。
程序員的交流
GitHub 吸引越來(lái)越多優(yōu)秀的開(kāi)源項(xiàng)目進(jìn)駐。每個(gè)程序員能夠?yàn)g覽這些優(yōu)秀開(kāi)源項(xiàng)目的代碼,從而提高自己的水平。
在 GitHub 上,你可以通過(guò) GitHub 自身的“頁(yè)面”功能,將自己的想法整理出來(lái),給其他人看。而他人也能夠直接提交 issue,提出自己的意見(jiàn),其它人則在 issue 下討論問(wèn)題。你還可以通過(guò) Follow 的功能,跟蹤其它項(xiàng)目***的情況。
當(dāng)然,程序員之間的交流,最直接的就是“用產(chǎn)品說(shuō)話(huà)”。如果你覺(jué)得一個(gè)產(chǎn)品原先的想法不是很好,但提意見(jiàn)又遭到反駁,那么你可以直接根據(jù)原來(lái)的版本,創(chuàng)建屬于自己的分支,開(kāi)發(fā)出屬于自己的版本,實(shí)現(xiàn)自己的想法。
Mac 上面有名的文本編輯器 Notational Velocity(簡(jiǎn)稱(chēng) NV)是一個(gè)有趣的案例。自 2002 發(fā)布***版以來(lái),它就以簡(jiǎn)潔的界面,方便易用而受到用戶(hù)的歡迎。不過(guò),NV 之前一直缺乏用戶(hù)需的新特性,比如全屏模式、標(biāo)記語(yǔ)言 MarkDown 語(yǔ)言等等。
為了能夠?qū)崿F(xiàn)自己的想法,2010 年不少程序員將 NV 的源代碼拷貝出來(lái),創(chuàng)建自己的分支,具體可以看這張圖片:
現(xiàn)在由 Brelt Terpstra 開(kāi)發(fā)的分支版本 nvALT 2.0 是最有名的分支,它基本實(shí)現(xiàn)了當(dāng)時(shí) Terpstra 當(dāng)時(shí)之所以創(chuàng)建分支的目標(biāo)——成為一個(gè)簡(jiǎn)潔的書(shū)寫(xiě)、出版應(yīng)用。有趣的是,這些分支也促進(jìn)了 NV 的改進(jìn)。
GitHub 讓程序員方便快速地參與一個(gè)開(kāi)源項(xiàng)目:一切不過(guò)“Fork”一下而已。
總結(jié)
GitHub 原本的口號(hào)是“Git 代碼托管(git repository hosting)”,現(xiàn)在變?yōu)?ldquo;Social Coding(社交化編程)”,更加符合自身的定位。
代碼,是程序員溝通的最直接的手段。
附上 2007 年 10 月 19 日,GitHub ***次 Commit 的記錄,由 GitHub 創(chuàng)始人之一 Chris Wanstrath 發(fā)出:
題圖來(lái)自 felixtriller