> 原文:?[Github 漫游指南](http://github.phodal.com/)
> 作者:[Phodal Huang](https://www.phodal.com/)(微博、知乎、Github、SegmentFault: @[phodal](http://weibo.com/phodal))
# 前言
[TOC=2,3]
我的Github主頁上寫著加入的時間——`Joined on Nov 8, 2010`,那時才大一,在那之后的那長日子里我都沒有過到。也許是因為我學的不是計算機,到了今天——`2015.3.9`,我也發現這其實是程序員的社交網站。
過去,曾經有很長的一些時間我試過在Github上連擊,也試著去了解別人是如何用好這個工具的。當然粉絲在Github上也是很重要的。
在這里,我會試著將我在Github上學到的東西一一分享出來。
## 我與Github的故事
在我大四找工作的時候,試圖去尋找一份硬件、物聯網相關的工作(ps: 專業是電子信息工程)。盡管簡歷上寫得滿滿的各種經歷、經驗,然而并沒有卵用。跑了幾場校園招聘會后,十份簡歷(ps: 事先已經有心里準備)一個也沒有投出去——因為學校直接被拒。我對霸面什么的一點興趣都沒有,千里馬需要伯樂。后來,我加入了Martin Flower所在的公司,當然這是后話了。
這是一個殘酷的世界,在學生時代,如果你長得不帥不高的話,那么多數的附加技能都是白搭(ps: 通常富的是看不到這篇文章的)。在工作時期,如果你上家沒有名氣,那么將會影響你下一份工作的待遇。而,很多東西卻會改變這些,Github就是其中一個。
注冊Github的時候大概是大一的時候,我熟悉的時候已經是大四了,現在已經畢業一年了。在過去的近兩年里,我試著以幾個維度在Github上創建項目:
1. 快速上手框架來實戰,即demo
1. 重構別人的代碼
1. 創建自己可用的框架
1. 快速構建大型應用
1. 構建通用的框架
### Github與收獲
先說說**與技能無關的收獲**吧,畢業設計做的是一個《[最小物聯網系統](https://github.com/phodal/iot)》,考慮到我們專業老師沒有這方面知識,答辯時會帶來問題,盡量往這方面靠攏。當我畢業后,這個項目已經有過百個star了,這樣易上手的東西還是比較受歡迎的(ps: 不過這種硬件相關的項目通常受限于Github上硬件開發工程師比較少的困擾)。
畢業后一個月收到PACKT出版社的郵件(ps: 他們是在github上找到我的),內容是關于Review一本[物聯網](#)書籍,即在《[從Review到翻譯IT書籍](http://www.phodal.com/blog/review-it-books-with-translate-book/)》中提到的《Learning Internet of Things》。作為一個四級沒過的“物聯網專家”,去審閱一本英文的物聯網書籍。。。
當然,后來是審閱完了,書上有我的英文簡介。

Phodal Huang Introduction
一個月前,收到MANNING出版社的郵件(ps: 也是在github上),關于Review一本[物聯網](#)書籍的目錄,并提出建議。
也因此帶來了其他更多的東西,當然不是這里的主題。在這里,我們就不討論各種騷擾郵件,或者中文合作。從沒有想象過,我也可以在英語世界有一片小天地。
這些告訴我們,Github上找一個你擅長的主題,那么會有很多人找上你的。
### Github與成長
過去寫過一篇《[如何通過github提升自己](http://www.phodal.com/blog/use-github-grow-self/)》的文章,現在只想說三點:
1. 測試
1. 更多的測試
1. 更多的、更多的、更多的測試
沒有測試的項目是很扯淡的,除非你的項目只有一個函數,然后那個函數返回`Hello,World`。
如果你的項目代碼有上千行,如果你能保證測試覆蓋率可以達到95%以的話,那么我想你的項目不會有太復雜的函數。假使有這樣的函數,那么他也是被測試覆蓋住的。
如果你在用心做這個項目,那么你看到代碼寫得不好也會試著改進,即重構。當有了一些,你的技能會不斷提升。你開始會試著接觸更多的東西,如stub,如mock,如fakeserver。
有一天,你會發現你離不開測試。
然后就會相信: **那些沒有寫測試的項目都是在耍流氓**
## 為什么你應該深入Github
上面我們說的都是我們可以收獲到的東西,我們開始嘗試就意味著我們知道它可能給我們帶來好處。上面已經提到很多可以提升自己的例子了,這里再說說其他的。
### 方便工作
我們可以從中獲取到不同的知識、內容、信息。每個人都可以從別人的代碼中學習,當我們需要構建一個庫的時候我們可以在上面尋找不同的庫和代碼來實現我們的功能。如當我在實現一個庫的時候,我會在Github上到相應的組件:
- Promise 支持
- Class類(ps:沒有一個好的類使用的方式)
- Template 一個簡單的模板引擎
- Router 用來控制頁面的路由
- Ajax 基本的Ajax Get/Post請求
### 獲得一份工作
越來越多的人因為Github獲得工作,因為他們的做的東西正好符合一些公司的要求。那么,這些公司在尋找代碼的時候,就會試著邀請他們。
因而,在Github尋找合適的候選人,已經是一種趨勢。
### 擴大交際
如果我們想創造出更好、強大地框架時,那么認識更多的人可能會帶來更多的幫助。有時候會同上面那一點一樣的效果