作為一名程式設計師,你的效率什麼時候最高?是一到公司就開啟「狂飆模式」(小聲 BB:也可能是「摸魚模式」),還是披著夜色成為蝙蝠俠一樣的「黑暗騎士」?在你奮力 coding 的過程中是否偶爾也會閃過這種想法:某個業內大佬此時此刻是不是也跟自己一樣,正在為自己的項目傾盡全力?
一位名叫 Ivan Bessarabov 的小哥正是抱著這樣的好奇心,對程式設計師大佬們進行了一番統計:他們的作息是什麼樣的?他們什麼時段效率最高?他們也都是夜貓子嗎?他們周末是不是也在瘋狂 coding?今天,就讓 Ivan 小哥來為你揭秘,歡迎和他一起走進程式設計師大佬們的「十二時辰」。
對於 Ivan Bessarabov 來說,有個問題一直困擾著他:那幫大牛程式設計師們都是幾點工作的?很明顯,程式設計師的成果就是代碼,而代碼存儲在版本控制系統(VCS)當中。將代碼存入 VCS 時的記錄時間,就是破解這個謎題的線索。
目前最受歡迎的版本控制系統之一正是 git。在向其中存放代碼時,首先得創建「commit」。下面來看 git commit 中包含的部分原始信息:
在這裡可以看到提交信息(「Initial commit」)、存放文件結構(「tree 496d…」)的 ID 信息、commit 作者名稱與郵件以及更有趣的內容——時間戳 (1563188141) 以及時區信息 (+0300)(每一條 git commit 都擁有「author」與「commiter」,二者一般完全一致)。
時間戳是指自 1970 年 1 月 1 日之後經過的秒數。如果將 1563188141 轉換為日常使用的日期結構,則將得到 "2019-07-15 10:55:41"(UTC 時區)。接下來,將「03」小時與「00」分鐘添加進去即得到 "2019-07-15 13:55:41"——也就是 commit 作者在進行提交操作時所看到的本地時間。
VCS 當中的一些重要代碼往往來自多項 commit 與多位作者。因此,可以編寫一個簡單的程序來檢查所有 commit,過濾其中單獨某個人的提交操作、獲取本地提交時間,並將結果顯示為常用的時間格式。
於是,Ivan 對幾個程式設計師大佬的 git 庫進行了解析,對其中的個人 commit 進行過濾並創建出統計圖表——包括此人每天工作多少個小時,以及在此期間完成了多少次提交(結果非常有趣),並將它發布在了自己的博客中。
而他統計表中的一位大佬:Chris Lattner(LLVM 編譯器與 Swift 程式語言的作者)非常友好地提出了一個改進的好主意:
如果你把同一人在周末與工作日的信息視為兩個不同的數據集,並把結果加以比對,可能會得出非常有趣的結論。
說得對,Ivan 立刻開始了改造。這一次他把統計分成兩份圖表:左側圖表為工作日期間的提交記錄,右側圖表則為周末期間的提交記錄。(有時候周末也屬於工作日,有時候工作日期間也有公共假期,但這裡就不搞那麼複雜啦:周一到周五在左側,周六到周日在右側。)左側與右側採用相同的顯示比例。
在圖表下方,列出了提交總數與百分比。由於工作日與周末分別為 5 天和 2 天,因此如果每天的提交數量相等,那麼工作日的提交百分比應該是 71.4%,而周末則為 28.6%。所以,如果周末的百分比超過 28.6%,則證明此人在周末的工作量更多。而如果周末百分比低於 28.6%,則代表此人更傾向於在工作日幹活。
這一次,Ivan 還在圖表當中列出了截至目前 repo 中的 git commit hash,並著手編寫圖表生成命令。這樣一來,相信大家能夠更輕鬆地重現他進行的操作。
好了,下面就來看看程式設計師大佬們都是怎樣的作息吧!
Linus Torvalds
Linus 是 Linux 作業系統的作者,同時也一手打造出 git VCS 以及相對知名度較低的 Subsurface(初級潛水員跟蹤系統)等程序。
這裡是他在各 commit 的發送時間:
repo:https://github.com/torvalds/linux
Linus 的工作習慣還是比較正常的,大多數提交操作在 10 點時間,而且從來不會在深夜進行提交。
工作時好好工作,休息時好好休息,是個好同志!
這裡是他對 git 項目的提交記錄:
https://github.com/git/git:
Sebastian Riedel
Sebastian 是兩大高人氣 Perl 框架——Catalyst 與 Mojolicious——的作者。他的工作安排相當瘋狂,我對他的工作效率由衷欽佩。
下面來看他為項目進行提交時的具體時間:
https://github.com/mojolicious/mojo repo
「工作狂」實錘了,基本上不休息的狂人大佬,佩服!
Chris Lattner
Chris 是 LLVM 編譯器與 Swift 程式語言的作者。他在蘋果公司工作了很長時間,其後加入特斯拉,目前效力於谷歌公司。
看看他項目中的提交記錄,可以想見他也是個名符其實的夜貓子:
https://github.com/apple/swift repo
凌晨工作效率出奇的高,你是不是也這樣?
Rob Pike
Rob 最新的知名成就是 Go 程式語言。下面來看他在項目中的提交記錄:
repo https://github.com/golang/go
也是一個該工作工作,該休息休息的規律生活人士。
Brad Fitzpatrick
Brad 是 LiveJournal 的作者,曾創造出 memcached,目前則正在研究 Go 程式語言。
以下是他在項目中的提交記錄:
https://github.com/memcached/memcached
白天的時間都用來研究 Go 了,所以夜裡再搞 memcached。
再來看 Go 語言項目:
https://github.com/golang/go:
Rasmus Lerdorf
相信大家都聽過,這是 PHP 程式語言的第一位開發者。
https://github.com/php/php-src
(此 repo 並不包含第一套 PHP 版本,因此只能算是 PHP 最新版本的工作時間統計):
又是一位全年無休的大佬…
Guido van Rossum
Python 程式語言溫和的獨裁者:
https://github.com/python/cpython:
工作日瘋狂工作,休息日徹底休息,嗯,靠譜!
Fabrice Bellard
他曾先後創造了 FFmpeg、QEMU、Tiny C 編譯器,以及最近的 QuickJS。
以下是他在項目中的提交記錄:
https://github.com/FFmpeg/FFmpeg
這是一位在夜裡「效率爆發」的夜貓子,話說怎麼周末也熬夜?
腳 本
如果大家希望了解其他一些大牛程式設計師每天幾點工作(或者想統計自己的信息),Ivan 在這裡分享了自己的信息獲取腳本。只需要在目標庫的工作副本當中執行該單行程序即可:
需要為 git 命令指定–author 選項。在大多數情況下,可以直接指定對方的姓名:
『–author=「Sebastian Riedel」』
也可以使用電子郵件:
'–author=「torvalds@ppc970.osdl.org」'並同時指定多個 "–author"
具體可參考他的 GitHub:
https://gist.github.com/bessarabov/674ea13c77fc8128f24b5e3f53b7f094