正是Github,讓社會化程式設計成為現實。本文嘗試談談GitHub的文化、技巧與影響。
- Q1:GitHub是什麼
- Q2:GitHub風格
- Q3:在GitHub,如何跟牛人學習
- Q4:享受純粹的寫作與演講
- Q5:程式碼幫你找工作
- Q6: GitHub還在影響一些什麼
- Q7:除了GitHub,還可以選擇什麼?
Q1:GitHub是什麼
A1:一家公司
位於舊金山,由Chris Wanstrath,PJ Hyett與Tom Preston-Werner三比特開發者在2008年4月創辦。迄今擁有59名全職員工,主要提供基於git的版本託管服務。
在此之前,它是由Tom與Chris在本地程式師聚會中,開始的一個用於託管git的項目。正如每個偉大的傳奇都開始於一場冒險,Tom在這篇文章我如何辭掉微軟30萬年薪邀約,創辦GitHub中談到:
當我老去,回顧一生,我想說,“哇,那是一場冒險“;而不是,“哇,我真的很安穩。“
另一比特創始人Chris也詳細描述了GitHub初創的前因後果,他說道:
Do whatever you want.
於是,在2008年4月10號這一天,GitHub正式成立。
目前看來,GitHub這場冒險已經勝出。根據來自維琪百科關於GitHub的描述,我們可以形象地看出GitHub的增長速度:
今天,GitHub已是:
- 一個擁有143萬開發者的社區。其中不乏Linux發明者Torvalds這樣的頂級駭客,以及Rails創始人DHH這樣的年輕極客。
- 這個星球上最流行的開源託管服務。現時已託管431萬git項目,不僅越來越多知名開源項目遷入GitHub,比如Ruby on Rails、jQuery、Ruby、Erlang/OTP;近三年流行的開源庫往往在GitHub首發,例如:BootStrap、Node.js、CoffeScript等。
- alexa全球排名414的網站。
Q2:GitHub風格
A2: GitHub只是GitHub
強調敏捷開發與快速原型,而又的確成功的創業團隊,常具備一個重要氣質:有自己的文化風格。如GitHub,又如37signals。通過他們的快速開發,向用戶證明了團隊在科技上的能力,並且時常有驚喜。同時,通過強調特立獨行的文化,將對半衰期過短的產品族群的信任轉為對GitHub團隊的信任。
Gravatars的創始人(對,就是互聯網最流行的頭像託管系統)、Jekyll(對,它就是我近幾年用的部落格系統)作者、GitHub創始人,現任CTO Tom在GitHub第一年學到的10大教訓、創業學校演講中談到GitHub文化的方方面面。我嘗試將這種風格總結為以下要點:
- 專注創作,高創意
- 運營良好與較高的內外滿意度
- 高利潤,較低的融資額或零融資
創業公司多半死在錢上,就讓我們先從錢談起:
高利潤,較低的融資額或者零融資
類似於GitHub這樣的公司,拿到風險投資很難嗎?恰恰相反,創始人PJ Hyett在Hacker News的一篇評論中提到,自從GitHub創辦以來,已與幾十個VC溝通過。但是,直到今天,GitHub的融資額還是為零,並引以為豪。讓我們看看GitHub官網的自我介紹:
運營良好與較高的內外滿意度
在Quora上有人問道,GitHub是否尋找被收購?,還是PJ Hyett,他的回答是:No。
GitHub從一開始就運營良好,員工擁有較高滿意度,看看這些不太一樣的做法:
- 每一位GitHub公司的新員工,官方部落格將發表文章歡迎。
- 在GitHub內部,沒有經理,需求內容與優先順序由項目組自行決策。
- 選擇自己的工作時間、工作地點。
- 員工來自開源社區。
- 能開源的盡可能開源。
富有激情、創意的員工使得GitHub得到了社區的廣泛認同,從而擁有極高的客戶滿意度,並從創業一開始就盈利。一份早期的調查表明,GitHub很快成為Git託管首選。
專注創作,高創意
GitHub59名全職員工僅有29名員工在本地工作!不僅僅是工作地點的安排富有創意,GitHub員工Holman,詳細介紹了GitHub的工作方式:
- 時間並不能說明什麼
- 非同步工作方式
- 創造力很重要
Q3:在GitHub,如何跟牛人學習
A3:在學習區刻意練習
追隨牛人,與他們一起修行
修行之道:
关注大师的言行,
跟随大师的举动,
和大师一并修行,
领会大师的意境,
成为真正的大师。
正如這首禪詩所言,與其在牆內仰望牛人,不如直接在GitHub:
- watch、fork牛人們
- 對他們的項目提交pull request
- 主動給牛人們的項目寫wiki或提交測試用例,或者問題
- 還可以幫他們翻譯中文
GitHub本身建構在git之上,git成為勾搭大師們的必要工具,以下讀物成為首選:
- git大白話入門,木有高深內容
- 為什麼git勝過X…
如果希望進一步深入,可以閱讀已有中文翻譯版的資料:
- progit:GitHub公司傳道士schacon所作,已翻譯成多國語言,當然,有中文版。
- Git Magic:已有志願者翻譯中文版。
同樣,如果希望瞭解更多GitHub自身的知識,GitHub官方檔案值得推薦:
- The GitHub Hep
牛人在哪裡?
- GitHub上的代碼庫本身:尤其是:Explore、熱門關注信息庫兩個欄目
GitHub上的代碼庫本身:尤其是:Explore、熱門關注信息庫兩個欄目
- GitHub官方推薦:GitHub自身的官方部落格與GitHub員工們的個人博客推薦的項目與開發者
GitHub官方推薦:GitHub自身的官方部落格與GitHub員工們的個人博客推薦的項目與開發者
- 各類社交媒體上提到的的GitHub庫:尤其是Hacker News上提到的GitHub庫。
各類社交媒體上提到的的GitHub庫:尤其是Hacker News上提到的GitHub庫。
關於學習的心理學研究,常常會談到一個術語:元認知、元學習、元知識。是的,關於認知的認知、關於學習的學習、關於知識的知識,你對這些資訊的偏好與熟練掌握,會讓你在學習一門新東西時更加輕車熟路。對一手資訊進行回溯,比如作者、創始人、最初文獻出處,總是會讓你更容易理解知識。
在學習區刻意練習:借助GitStats進行項目統計
在如何學習一門新的程式設計語言?——在學習區刻意練習中,我已談過:
學習程式設計最好的管道是在學習區刻意練習。
如何進行自我監督?
借助於GitStats,我們能很好地統計自己的每個項目的工作量,從而看到工作進展。
用法如下,
#复制GitStats项目到本地
cd ~/dev
git clone git://github.com/trybeee/GitStats.git
python ~/dev/gitstats/git-stats /youproject public
以下為生成結果示範:
每週程式碼提交次數:
每天程式碼提交行數:
如果Fork別人的項目或者多人合作項目,最好每人都擁有一個獨立分支,然後由項目維護人合併。如何建立自己的分支?
# 分支的创建和合并
# git branch yourbranch
# git checkout yourbranch 切换到yourbranch
# 开发yourbranch分支,然后开发之后与master分支合并
# git checkout master
# git merge yourbranch
# git branch -d yourbranch 合并完后删除本地分支
如何將牛人的遠程分支更新到自己的本地分支?
# 查看当前项目下远程
# git remote
# 增加新的分支链接,例如
git remote add niuren giturl…
# 获取牛人的远程更新
git fetch niuren
# 将牛人的远程更新合并到本地分支
git merge niuren/master
生產力小技巧
codeshelver:給git庫做標籤
觀察的項目如果多了,怎麼管理?用codeshelver,安裝擴展之後,可以對GitHub項目做標籤。
gollum:利用git與github做wiki
gollum是一個基於git的輕型wiki系統。
GitHubwatcher:監測重點專案
GitHubwatcher適用於通知不頻繁的情景。
GitHub官方資源
GitHub官方列出了一些有用的腳本與書簽。
社區驅動的安裝與設定檔
GitHub中各類設定檔層出不窮,一些常用的:
- osh-my-zsh:將終端從bash改為zsh之後,可考慮安裝社區驅動的zsh設定檔,含有多個挿件。可參攷舊文zsh與oh-my-zsh
- gitignore:GitHub官方出品
- yourchili:服務器各類安裝shell,比如安裝nginx等。
Q4:享受純粹的寫作與演講
A4:回歸創作的初始
寫作
早在2008年,就有科技圖書作者通過Git來寫作,以下是示範:
- Node.js初學者教材,中文版在這裡。
- backbone基礎
- Sinatra教程
你能想到的技術前沿話題,大多能在GitHub找到相應的培訓資料或者開源圖書。
個人寫作照樣適用。在前文理想的寫作環境:Git+GitHub+Markdown+Jekyll,我已經格外讚美過這些美好事物了。
暖色調的燈光,足够寬度的工作臺,聽著清脆的鍵盤聲音,基於Git、GitHub、Markdown與Jekyll來寫作,不擔心寫廢與排版,只關注最純粹的寫作,是一種享受。我有時候會想,如果Git、Github、Markdown、Jekyll,再加上Yaml、Json的作者,讓這些作者們重新來設計今天互聯網基礎架構偏文字的部分,會誕生一些什麼?
個人部落格
借助於Jekyllbootstrap,可以在Github上快速搭建一個基於jekyll的部落格系統。
除了這個簡單易行的辦法之外,還存在一些其他方法,例如:
- Jekyll:參攷告別wordpress,擁抱jekyll
- Octopress:參攷Ruby開源項目介紹(1):octopress——像駭客一樣寫部落格
- GitHub Pages:參攷GitHub Pages
演講
借助於GitHub,可以享受更純粹、更酷的演講。GitHub 2011年收購Ordered List之後,從此可以通過speakerdeck更好的分享ppt檔案。
我們還可以:
- 使用GitHub著名傳教士、Progit作者Scott Chacon開發的showoff
- 來自開源社區的其他演講庫impress.js
Q5:程式碼幫你找工作
A5:GitHub簡歷很誠實
NumEricR(非GitHub工作人員)基於GitHub Pages功能做了一個簡歷生成器,使用極其簡單,登陸網站GitHub簡歷生成器,填入你的GitHub網站用戶名即可。
fredwu是Ruby中文社區活躍份子,他的開源項目angel_nest,一個天使投資與創業者對接的網站,適合Ruby初學者陞級為Ruby中級開發者時學習,也在Hacker News上被熱烈討論過,讓我們來看看他的簡歷:
http://resume.GitHub.com/?fredwu
正是因為GitHub上的程式碼無法造假,也容易通過你關注的項目來瞭解知識面的寬度與深度。現在越來越多知名公司活躍在GitHub,發佈開源庫並招募各類人才,例如:Facebook、Twitter、Yahoo…
開始有了協力廠商網站提供基於GitHub的人才招聘服務,例如:
- GitHire:通過它,可以找出你所在地區的程式師。
- Gitalytics.com:通過它,能評估某比特程式師在GitHub、LinkedIn、StackOverflow、hackernews等多個網站的影響力。
Q6: GitHub還在影響一些什麼
A6:讓電腦增强人類智慧
很多年前,在某個名聲顯赫的學府中,兩位先後拿過圖靈獎的牛人有一段對話:
- 牛人A:我們要給機器賦予智慧,讓他們有自我意識!
- 牛人B:你要給機器做那麼多好事?那你打算給人類做點什麼呢?
這段對話來自《失控》。牛人A是明斯基,他最喜歡將人類看做有血肉的機器,他的框架理論成為認知心理學、人工智慧入門基礎。牛人B則是恩格爾巴特。當明斯基1961年發表他著名的文章人工智慧走向時,恩格爾巴特還籍籍無名。直到次年,恩格爾巴特發表宏文:人類智力的增强:一種概念框架。提出不同於明斯基的另一條增强人類智力的道路:不要嘗試發明自動打字的機器,而是嘗試發明滑鼠,並且他真的發明滑鼠成功了!
從近些年的發展來看,仍然是明斯基占上風,但是,三十年河東,三十年河西,明斯基的人工智慧方向又有多少年沒有大突破了?相反,來自恩格爾巴特的群件、集體智慧等思想,逐步成為步入Web2.0時代之後的共識。無關對錯,可以說,恩格爾巴特為增强人類智力,提供了可行的框架。與其去發明聰明的、昂貴的、功能一體化的智慧型機器人,還不如發明類似於滑鼠這樣笨笨的、廉價的、功能單一的人類智慧服務單件。明斯基的機器人很容易陷入死胡同,沒有上升到哲學的高度。現在慢慢又回到恩格爾巴特這個方向來了。比如現在IBM開始文宣的認知計算。
從git與GitHub設計與解决的問題本質來看,明顯加速了程式碼生產流程,促進了卓越智力產品的誕生。這就是一種典型的web2.0對智力生產流程的改良與人類智慧的增强。同樣,某種意義上,小說寫作網站也起到類似作用。但是,學術界尤其是社會科學類的智力產品生產似乎還停留在一個古老階段。在開源領域,好想法層出不窮,極客影響極客,最終產生的是酷玩意。這些酷玩意拋弃浮華,直奔問題本質。那麼,有沒有科學界的GitHub??
類似問題層出不窮,以下為其他領域產品不完全名單。
學術研究
- 除了較早的arXiv、PLoS之外,較有氣象的可以推薦mendeley、開放期刊目錄
數據
- buzzdata:數據分享更容易
科學計算
- opani:雛形中,支持R、Python等多種。
教育
- OpenStudy:一個社會性學習網絡,通過互助來更好地學習,主題涉及到電腦、數學、寫作等。
- openhatch:通過練習、任務等幫助新手更好地進入開源社區
Q7:除了GitHub,還可以選擇什麼?
A7:nil
因為進化的需要,多數裸猿存在選擇強迫症:哪種程式語言更好?哪個web開發框架更好?當然,最令宅男科技男們羡慕的問題是,高白瘦禦姐還是青春小蘿莉好?:D
除了GitHub之外,
- 中國山寨品是不是更好?(為什麼不寫他們名字,你懂的,山寨品總是善於爭論誰是第一個山寨的,各自的排名先後:D)
- 免費的BitBucket是不是更適合Python程式師?
- 作為一名折騰族,我不自己搭建一個gitlabhq,是不是對不起自己?
我們可以理解,正是因為無數條分岔路口,讓人類不再受制於某種基因、特定疾病、獨裁家族,從而擁有無限的可能。但是,這種選擇強迫症與遠古時代可憐的信息量相比較,
- 今天這個大數據時代,它還會有助於人類作為族群的整體進化與作為個體的幸福嗎?
- 今天一比特一線都市30歲大學畢業生經歷的選擇與孔子整個一生經歷的選擇,純論數量,誰多誰少?
生命如此短暫,為什麼總要將青春浪費在不斷的選擇之中呢?罰你,回頭閱讀心理學家施瓦茨(Barry Schwartz)的TED演講:選擇之困惑——為何多即是少,1百遍啊1百遍。請記住施瓦茨的演講要點:
- 更多的選擇不代表更多的自由;
- 更多的選擇導致決策的延遲和降低的滿意感;
- 快樂之秘訣,在於降低自己的期望值。
相關參攷
- 理想的寫作環境:Git+GitHub+Markdown+Jekyll
- 如何提高創作型任務的效率?
- Ruby開源項目介紹(1):Octopress——像駭客一樣寫部落格
- Git與GitHub入門資料
- 告別WordPress,擁抱Jekyll