用 Tab 還是 Space?谷歌程式設計師分析了10億份程式碼

小米雲豆粥發表於2016-09-04

用 Tab 還是 Space?事關程式設計師的信仰之爭。2015 年程式設計師 Uku Pattak 分析了 GitHub 上多種語言的熱門專案(star 數量高)中使用 Tab 和空格的對比情況。2016 年,谷歌程式設計師 Felipe Hoffa 分析了 10 億份程式碼。

分析結果可先看下圖:

用 Tab 還是 Space?谷歌程式設計師分析了10億份程式碼

40萬個repo, 10億份程式碼檔案, 14TB 程式碼

規則:

  • 資料來源:已儲存在 BigQuery 上的 GIthub 文件
  • Star 很重要:只選擇了2016年1月到5月之間加星量(star)在前 40 萬個的專案
  • 排除小檔案:程式碼檔案至少得有 10 行程式碼,開始的字元是:空格或者製表符
  • 去除冗餘:不管它們存在於多少個專案中,相同的程式檔案只算一次
  • 一個檔案一票:有些程式碼檔案中混用了製表符和空格。如果該檔案製表符用的多,那它就算製表符一票。反之亦然。
  • 只考慮使用廣泛的程式語言:我只選取了有下面這些字尾的檔案:(.java, .h, .js, .c, .php, .html, .cs, .json, .py, .cpp, .xml, .rb, .cc, .go)

資料

用 Tab 還是 Space?谷歌程式設計師分析了10億份程式碼

實現方法

我使用了已有的 [bigquery-public-data:github_repos.sample_files] 表。這個表列出了排名最前的 40 萬個專案。從中提取了含有被廣泛使用的語言字尾的檔案。

由於我要聯結分別有 1.97 億行和 0.7 億行的兩個表(一共有 1.6T 資料量),這個過程花費了不少時間。我把結果放在這裡了[fh-bigquery:github_extracts.contents_top_repos_top_langs],你們就不用重新跑這個過程了。

在 [contents] 表格中,包含了去冗餘之後的所有檔案。下面的命令列用來檢查檔案數量和大小。

用 Tab 還是 Space?谷歌程式設計師分析了10億份程式碼

10 億檔案,14TB程式碼

然後開始按照前面提到的規則排序:

分析 133G 程式碼只有 16 秒?我愛 BigQuery。

最後 Felipe Hoffa 還貼上一個視訊

在熱播劇《矽谷》第三季中,不僅有 Tab 和 Space 之爭,也有 Vim 和 Emacs……結果導致一對程式設計師做不成情侶了

<embed>

視訊亮點在結尾 :)

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式

用 Tab 還是 Space?谷歌程式設計師分析了10億份程式碼 用 Tab 還是 Space?谷歌程式設計師分析了10億份程式碼

相關文章