最佳開發工具大全,GitHub Star 6.2k+

一位曾經的Google工程師,花費兩年時間,辛苦整理了一份清單。本文轉自量子位,作者曉查、栗子、方馭洋,如有侵,可刪!

這個名為 「xg2xg」 的清單,原本是這位前Google工程師(ex-Googler),為所有離職的Google工程師寫的一份 「廠外」 生存指南。

但實際上,這個大全實打實地也成為了一份最佳開發工具大全。

所有的程式設計師,都能受益於此。

//github.com/jhuangtw-dev/xg2xg
//github.com/jhuangtw-dev/xg2xg

美國網友對這個大全給予了很高的評價:這份清單中列出的開源軟體,不僅解決了矽谷大廠前員工的難處,也能為其他所有碼農解除困惑。

在這套大全的指導下,任何一個工程師,都能獲得類似在Google內部寫程式碼的體驗。xg2xg 上線僅僅一天就登上趨勢榜,截至今天,已在 GitHub 收穫 6200+ Star!

清單其中大部分替代軟體是 Google 開源的項目,或者是受Google論文的啟發,由開源軟體基金會自己做的第三方實現。即使你從來沒進過 Google 工作,也在享受著 Google 工程師們帶來的福利。不禁讓人感嘆 「Google拯救世界」。

下面就讓我們一起來看看這份清單吧。

開發工具一覽

這份清單總共有兩部分,前半部分介紹的是碼農常用的開發工具,包括核心技術、基礎設施、服務、開發運維等;後半部分則面向非技術人員。

核心技術工具

大數據處理工具

Google 內部工具:MapReduce;

替代品:Apache Hadoop、Spark

想要在上千台機器組成的大集群上、並行處理上 TB 級別的海量數據集,就要用到這類大規模數據處理工具了。

MapReduce,就是這類工具的先驅。Jeff Dean 等人 2004 年提出了這個分散式計算架構,最早在 Google 內部用來處理大規模數據的並行計算。Jeff Dean 還親自為它撰寫過使用指南。

而 Apache Hadoop 這個開源替代品,也是根據 Jeff Dean 當年的論文自行實現而成,能提供與 MapReduce 文件系統類似的功能。

如果想要更快的數據處理速度,還有 Apache Spark 供你選擇。相對於 Hadoop 的 MapReduce 會在運行完工作後將中介數據存放到磁碟中,Spark 使用了存儲器內運算技術,能在數據尚未寫入硬碟時即在存儲器內分析運算。

序列化工具

Google 內部:Protocol Buffer;

外部替代品:Protobuf、Thrift、Avro

這一組工具用於結構化數據序列化,上面這些,都是 xml 替代品,比它更小、更快、也更簡單。

Protocol Buffer 和 Protobuf 都是 Google 開發的序列化格式(Serialization Format),github 上可以找到這個項目的源程式碼。

比起 XML 和 JSON,Protobuf 更小、更快,也更簡潔,很適合做數據存儲或 RPC 數據交換格式。只需要定義一次數據結構,就可以利用各種不同語言或者從各種不同數據流中對結構化數據進行輕鬆讀寫。

完全撇開 Google,也不是就沒有別的選擇了。其他廠商也有類似的序列化方案。

比如 Facebook 開發的 Thrift ,它與 Protobuf 基本一樣。

Avro 同樣也有 schema(也就是程式中結構化數據的定義),但是實現方式跟 Protobuf 和 Thrift 有很大區別。

由於數據不需要額外的標註,Avro 在序列化大量相同的數據時會比 Protobuf 和 Thrift 更有效率。不過在編碼大量變化的數據時,因為 schema 會隨數據一同存儲,Avro 的效率會退化到 JSON 和 MessagePack 的級別。

看來在核心技術工具上,重回人間的前 Google 人還是有許多不錯的選擇的。

基礎設施

大型集群管理系統

Google 內部:Borg;外部替代品:Kubernetes、Apache Mesos、HashiCorp Nomad

大型集群管理系統用於管理雲平台中多個主機上的容器化的應用。

Borg 是 Google 內部的大型集群管理系統,現如今應用最廣泛的服務編配系統 Kubernetes 就脫胎於 Borg。

Borg 讓開發者能夠不必操心資源管理的問題,做到跨多個數據中心的資源利用率最大化。

沒有 Borg 十五年的經驗,也就不會有 Kubernetes。雖然作者把它放在開源 / 真實世界這一欄里,但事實上 Kubernetes 也是由 Google 設計並參與開發的。

Kubernetes 使用 Go 語言編寫, 是一個大而全的解決方案,服務調度、網路、存儲、安全通通一手抓,而且本身的架構也非常好,在上面做二次開發非常容易。

HashiCorp Nomad 同樣是一個比較常見的開源調度程式,架構簡單,能將資源管理器和調度程式的功能集成到一個系統中。Nomad 也是分散式的,高可用且易操作。但顯然 Kubernetes 的功能會更豐富。

至於 Mesos,它僅僅是一個調度系統,無法直接使用,要配合各種 Mesos framework 來實現各類功能。

存儲

當然,Google 內部工具也不是所有的都能找到完美的替代品。

至少在存儲這件事情上,就有網友不贊同原作者觀點。他認為這份清單在一定程度上具有誤導性,某些替代品根本達不到 Google 內部工具的水平。

比如將 Colossus 和 HDFS 對比是在開玩笑,相比之下,HDFS 就像是一個玩具。要說對比,它智慧和十年前已經退役的 GFS 相當。

但 HDFS 恐怕是開源軟體中 Colossus 最好的替代品,對於 「通用,大型,分散式文件系統」 的使用情況,很難找到有比 HDFS 更好的了。

其他開發工具

列表中還有服務、開發運維、安全等工具的替代品清單,由於篇幅限制,我們不再一一介紹,有需求的同學可以自取。全部工具的下載鏈接請參閱文末的 GitHub 地址。

還有什麼福利

如果你不是工程師,上面那些工具大概就用不上了。不過,只要是個公司或者團隊,總會有 IT 和運營需求。

比如說,飯總是要吃的。

很多網友看了這份清單,最感興趣的就是這一項:

離開 Google 的人類,再也找不回免費食堂。

畢竟,「中午吃什麼」 的哲學問題,每次想起來都是折磨。

羨慕的時候,可以用以下口令來安慰自己:

公司有吃的,還不是為了讓你們多點時間工作?

如果你覺得這一條說服力不夠,還可以跟一句補充說明:

Google 最初是為什麼提供免費食物的?就是山景城總部周圍吃的選擇太少了,開車出去吃來回要一小時。對,就是想讓員工省下時間好好上班。

吃,只是 IT / 運營章節的第一條。

後面,還有梗圖生成器 Memegen。

工作太辛苦的時候,可以皮一下:

△ 當沒有 GPU 的人,遇到了 Google Colab
△ 當沒有 GPU 的人,遇到了 Google Colab

對此,甚至有人呼籲:

如果 Google 全家桶把 Memegen 收了就好了。

所以,這個章節並沒有和工作相關的資源么?

看看完整列表的話,還是能找到的:

有一些必要的小工具。

比如,CODEOWNERS 可以用來指定哪些用戶來審查程式碼,1Password 是個密碼管理器。

也有一些同學,沒在上面找到自己需要的答案,便直接提問了:

Google 這樣的大廠,公司內部 wiki 用的是什麼啊? 我們公司用的是 Quip,它就是個黑洞,文檔一進去就出不來了。

然後,有熱心人士回答了這個問題:

雖然不知道 Google 用的什麼,但 Confluence 是很常用的。

除此之外,你還用過哪些比較實用的開發者工具呢?