《架构师》2019年8月
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

揭秘大牛程序员十二时辰:有人作息规律,有人全年无休

作者:Ivan Bessarabov译者:核子可乐

作为一名程序员,你的效率什么时候最高?是一到公司就开启“狂飙模式”(小声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(初级潜水员跟踪系统)等程序。

这里是他在repo:https://github.com/torvalds/linux当中各commit的发送时间。

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