GitHub 尋寶指南
雷鋒網 AI 科技評論按,本文作者 phodal,原載於知乎專欄,雷鋒網已獲授權。
作為一個資深的諮詢師、程序員,GitHub 是我用過的最好工具,因為 Google 並非總是那麼用。GitHub 是一個寶藏庫,可沒有藏寶圖,GitHub 一 1 億的倉庫也和你沒有關係。這麼一些年下來,也算是掌握了一定的技巧,寫篇文章記錄一下,也就順其自然了。
總結一句話便是:GitHub 來搜索 Google 搜索不到的。它們可以 work 的原因,都是因為我們想做的事情,已經有人已經走過。如果你走的是一條新的路,那麼這篇文章對你來說,意義可能沒有那麼大。
尋找 Demo 節省時間
在工作上使用新的技術,和自己平時的練習,終究差得有些遠。工作的時候,我們偏向於目標編程,對於速度和時間的要求,要比自己業餘時間要高得多。一旦有了這種壓力,便會在 GitHub 上尋找相應的 Demo,了解原理、稍微嘗試,再引入到項目中。
這時,便會按技術棧的關鍵字搜索,並按更新時間進行排序,以查找是否有合適的 Demo。
生命有限,如若是每次我們嘗試一個新的技術,總得自己編寫一個個 Demo。編寫多個 Demo,都得花去個半天八小時的時間。如此一算,能花費在其它事情上的時間便更少了。若只是試用官方的 Demo,往往是比較容易的。可我們編寫應用的時候,總得結合到當前的場合來。這時整合併不是一個輕鬆的工作,依賴衝突、引入第三方依賴等。
溫馨提醒:對於簡單的項目來說,自己直接寫 Demo 會更加方便。嘗試項目需要成本,若是需要嘗試使用多個項目,那麼有可能就浪費時間。
尋找腳手架:加快前期開發
無論是後端的微服務架構,還是前端應用,應用的架構正在變得複雜。後端微服務,需要結合一個個的框架,哪怕是 Spring Initializr 這樣的工具,也只能幫助我們搭建項目。我們還需要配合其它工具,一起搭建出一個基本的系統。對於前端應用也是類似的,若是 Angular 這樣大而全的框架,時間花費倒也是不多。如 React 這種需要組合的、小而美的框架,使用官方的 create-react-app 也很難做出我們想要的東西,尋找一個合適的腳手架是一個更好的選擇。
這時,我們大抵可以,直接使用技術棧 boilerplate 又或者是 starter 等關鍵詞進行搜索,如 react boilerplate。如果其中找到的組合技術棧,不符合自己的要求,那麼再加上相應技術棧的關鍵字,如 react redux boilerplate 即可。有意思的是,在這時使用 Google 會比 GitHub 方便一些。
溫馨提醒:我們需要衡量修改腳手架的成本,是否比自己重頭寫快。
尋找 awesome-xxx:探索可能性
練習新的框架,我總習慣於,編寫一系列相關的 DEMO 項目,然後使用 awesome-xxx 探索可能性。
Awesome-xxx 系列,是 GitHub 上最容易賺 star 的類型。但凡是有一定知識度的領域、語言、框架等,都有自己的 awesome-xxx 系列的項目,如 awesome-python, awesome-iot, awesome-react 等等。在這樣的項目里,都以一定的知識體系整理出來的,從索引和查閱上相應的方便。如果你想進入一個新的領域,會嘗試新的東西就搜索 awesome xxx 吧。
溫馨提醒:awesome-xxx 只意味著它們包含儘可能多的資料,並不代表它們擁有所有相關的庫。
模仿輪子的輪子
大學時,我在練習寫嵌入式操作系統,uC/OS-II 對於初學者的我來說,太複雜了——有太多無關的代碼。便在網上找尋相關的實現,也便是找到了一些,在那的基礎上一點點完善操作系統。
學習一個成熟的框架,直接閱讀現有源碼的成本太高,畢竟也不經濟。最好的方式,就是去造輪子。從模仿輪子之上,再去造輪子,是最省力氣的方式。再配合《造輪子與從 Github 生成輪子》一文,怕是能寫一系列的框架。而造一個相似輪子的想法,往往很多人都有。尤其是一個成熟的框架,往往有很多仿製品。
於是,當你想了解一個框架,造個輪子,不妨試試搜索 xxx-like 或者 xxx-like framework,中文便是 仿 react 框架 或者 類 react。如我們在 Google 上搜索 react-like 就會搜索到 inferno。不過,按 GitHub 的尿性,要搜索到這樣的框架,並不是一件容易的事。這時 Google 往往比 GitHub 搜索好用。
所以建議:平時上班休息時,搜索相關的輪子,回家就可以造輪子了。
學習資源
GitHub 上擁有大量的學習資源,從各類的文章到筆記,還有各式各樣的電子書。如:
只需要搜索: 類型 筆記,如 操作系統 筆記 就能找到一些操作系統相關的筆記。
只需要搜索: 書名 就能找到一些和這本書相關的資源,如 重構 改善既有代碼的設計。
與此同時,GitHub 上還會搜索到各種未經授權英文書籍的翻譯,又或者是各種電子書的 PDF 版。作為多本書的作譯者,當然不鼓勵 GitHub 上找到一些盜版書。
而在 GitHub 上又有一些庫,可以提供相應的學習資源,如 free-programming-books-zh_CN,即免費的編程中文書籍索引。
建議:請尊重版權,哈哈哈。
密鑰/密碼
GitHub 上有太多這樣的東西,儘管我沒有能趕上個好時候,找到一個合適的密鑰。有相關多的資料泄漏和資料庫被扒,和 GitHub 上存在的密鑰和密碼有關。
不過,好在 GitHub 已經在著手解決這個問題:自動刪除相關的提交、代碼警告等等。
私有、商用的 SDK 或代碼
總有人,會將一些商用的代碼,或者公司內部的代碼,提交到 GitHub 上。如果你偶爾看到這樣的代碼,除了每一時間告訴作者,還可以偷偷 Clone 一下代碼——雖然這樣做不對,但是我還是想看。
如在 ThoughtWorks 的面試流程里,有一個步驟是代碼編程的作業,個人的實現是不能公開出來的。接到一份作業的時候,總會去 GitHub 搜索相應的代碼是否被提交了。提交了,倒是也得提醒一下相應的候選人。
過去,我在使用 Phaser 編寫應用的時候,對應的粒子系統是收費的。由於我只是嘗試這個粒子系統,便沒有購買的想法。我一想 GitHub 上可能有,於是搜索了對應的 particle-storm.js,然後就中獎了。就便愉愉快快地去寫我的 Hello, World,最後發現它太耗費資源了,便放棄了。
建議:一旦你在 GitHub 上拿到別人的商用代碼,請僅用於學習,並時刻保持低調。稍有不慎,有牢獄之災。
數據及數據製作工具
當我們需要數據的時候,就會考慮寫爬蟲。於是 GitHub 上充滿了各各樣的式爬蟲,除此還有得同學把爬蟲數據都放在上面了。某次,當我在玩 ElasticSearch 搜索引擎的時候,突然需要一些真實的數據用來測試。便得找爬蟲,就在 GitHub 上,找到了大眾點評的一些爬蟲。
這個關鍵詞,就是: scrapy dianping.com,得來不費功夫。
除此,在 AI 相當流行的今天也是如此,也可以搜索到其它同學訓練好的模型。
結論
試試你的 GitHub 搜索功能吧。
※2018 公開課盤點學術篇:鏈接優秀的年輕 AI 學者,「大講堂」讓新生 AI 學術力量被看見
※人工智慧「面診」識別罕見遺傳疾病,準確率可達90%
TAG:雷鋒網 |