At what time of day do famous programmers work?

I was curious when the famous programmers do their work. And it is quite easy to find. The result of programmers work is a code. Code is stored in version control systems (VCS). When you put code in VCS the time is record.

One of the most popular version control system is git. When you put code in it you create the thing called "commit". Here is an example of raw information about some git commit:

$ git cat-file commit 82be015
tree 496d6428b9cf92981dc9495211e6e1120fb6f2ba
author Ivan Bessarabov <ivan@bessarabov.ru> 1563188141 +0300
committer Ivan Bessarabov <ivan@bessarabov.ru> 1563188141 +0300

Initial commit

Here you can see commit message ("Initial commit"), info about ID that stores file structure ("tree 496d..."), name and email of commit author and the most interesting thing — the timestamp (1563188141) and timezone information (+0300) (every git commit has "author" and "commiter", usually they are the same).

The timestamp is the number of seconds since 1st January 1970. If we convert 1563188141 to more human date we'll get "2019-07-15 10:55:41" — that is the time in UTC timezone. Then we add "03" hours and "00" minutes to that time and get "2019-07-15 13:55:41" — that is the time the commit author can see on his wall clock when he did commit.

Some serious code that is stored in VCS has lots and lots of commits and a lot of commit authors. So we can write a simple program that will check all the commits to filter only the commits by one person get the local time of that commit and aggregate it by hour when the commit was make.

Linus Torvalds

Linus is the author of the Linux operating system, the author of the git VCS and the author of the less known program Subsurface (scuba diver tracking system).

Here is the graph with his commits hours to the repo https://github.com/torvalds/linux.

Linus makes an impression of totally normal person. Most of the commits are made at 10. There are practically no commits at night.

00 -   61 *
01 -   21
02 -   20
03 -   13
04 -   28
05 -  116 *
06 -  263 ****
07 -  793 *************
08 - 1802 ******************************
09 - 2578 *******************************************
10 - 2963 **************************************************
11 - 2670 *********************************************
12 - 2257 **************************************
13 - 2085 ***********************************
14 - 2039 **********************************
15 - 2139 ************************************
16 - 1955 ********************************
17 - 1736 *****************************
18 - 1365 ***********************
19 - 1023 *****************
20 -  853 **************
21 -  577 *********
22 -  240 ****
23 -  128 **

And here is his commits to the project https://github.com/git/git:

00 -    9 ****
01 -    7 ***
02 -    4 *
03 -    0
04 -    0
05 -    0
06 -    0
07 -   20 ********
08 -   27 ************
09 -   90 ****************************************
10 -  108 ************************************************
11 -  112 **************************************************
12 -   97 *******************************************
13 -   73 ********************************
14 -   70 *******************************
15 -  104 **********************************************
16 -   77 **********************************
17 -   59 **************************
18 -   54 ************************
19 -   49 *********************
20 -   58 *************************
21 -   49 *********************
22 -   31 *************
23 -   19 ********

Sebastian Riedel

Sebastian is the author of two popular Perl frameworks: Catalyst and Mojolicious.

His work schedule is insane. I envy his productivity.

This is his commits to the https://github.com/mojolicious/mojo repo grouped by hour:

00 -  685 ***********************************************
01 -  553 **************************************
02 -  472 ********************************
03 -  414 ****************************
04 -  341 ***********************
05 -  334 ***********************
06 -  298 ********************
07 -  208 **************
08 -  147 **********
09 -  145 **********
10 -  198 *************
11 -  225 ***************
12 -  302 ********************
13 -  342 ***********************
14 -  488 *********************************
15 -  536 *************************************
16 -  630 *******************************************
17 -  678 **********************************************
18 -  723 **************************************************
19 -  641 ********************************************
20 -  626 *******************************************
21 -  628 *******************************************
22 -  686 ***********************************************
23 -  681 ***********************************************

Chris Lattner

Chris is the author of LLVM compiler and the programming language Swift. He was working in Apple, for a short period of time he was working in Tesla and now he works at Google.

Looking to his commit distribution to the https://github.com/apple/swift repo it looks like he is a night person:

00 -  324 **************************************
01 -  185 *********************
02 -   79 *********
03 -   77 *********
04 -  265 *******************************
05 -  426 **************************************************
06 -  313 ************************************
07 -  116 *************
08 -   31 ***
09 -   40 ****
10 -   41 ****
11 -   46 *****
12 -   30 ***
13 -   48 *****
14 -  105 ************
15 -  126 **************
16 -  229 **************************
17 -  245 ****************************
18 -  237 ***************************
19 -  151 *****************
20 -  300 ***********************************
21 -  394 **********************************************
22 -  387 *********************************************
23 -  341 ****************************************

Rob Pike

The latest notable work of Rob is the Go programming language. Here is the graph for his commits to the repo https://github.com/golang/go:

00 -   29 ****
01 -    1
02 -    1
03 -    5
04 -    0
05 -    5
06 -   19 **
07 -   62 *********
08 -   80 ***********
09 -  126 ******************
10 -  240 ***********************************
11 -  338 *************************************************
12 -  184 ***************************
13 -  339 **************************************************
14 -  317 **********************************************
15 -  301 ********************************************
16 -  264 **************************************
17 -  224 *********************************
18 -   73 **********
19 -   69 **********
20 -   91 *************
21 -   79 ***********
22 -   64 *********
23 -   51 *******

Brad Fitzpatrick

Brad is the author of LiveJournal, he has created memcached and now he is working on Go programming language.

Here is the graph when he had commited to https://github.com/memcached/memcached:

00 -   11 ********************************
01 -   10 *****************************
02 -   17 **************************************************
03 -    7 ********************
04 -    7 ********************
05 -   13 **************************************
06 -    8 ***********************
07 -    8 ***********************
08 -    2 *****
09 -    0
10 -    3 ********
11 -    1 **
12 -    0
13 -    0
14 -    0
15 -    0
16 -    4 ***********
17 -    8 ***********************
18 -    9 **************************
19 -    9 **************************
20 -   12 ***********************************
21 -   10 *****************************
22 -   11 ********************************
23 -   14 *****************************************

And for the Go language https://github.com/golang/go:

00 -   44 *************
01 -   30 *********
02 -   26 ********
03 -   24 *******
04 -   26 ********
05 -   27 ********
06 -   21 ******
07 -   38 ***********
08 -   68 ********************
09 -  114 ***********************************
10 -  145 ********************************************
11 -  160 *************************************************
12 -  124 **************************************
13 -  130 ****************************************
14 -  148 *********************************************
15 -  160 *************************************************
16 -  162 **************************************************
17 -  158 ************************************************
18 -  143 ********************************************
19 -  127 ***************************************
20 -  104 ********************************
21 -  100 ******************************
22 -  115 ***********************************
23 -   69 *********************

Rasmus Lerdorf

The first developer of the PHP programming language.

https://github.com/php/php-src (this repo does not have first PHP version, so this is worktime statistics on the recent PHP versions):

00 -   55 **************************
01 -   29 *************
02 -   21 **********
03 -   28 *************
04 -   42 ********************
05 -   52 *************************
06 -   41 *******************
07 -   22 **********
08 -   44 *********************
09 -   56 **************************
10 -   37 *****************
11 -   25 ************
12 -   30 **************
13 -   43 ********************
14 -   67 ********************************
15 -   71 **********************************
16 -  104 **************************************************
17 -  104 **************************************************
18 -   99 ***********************************************
19 -   56 **************************
20 -   56 **************************
21 -   82 ***************************************
22 -   96 **********************************************
23 -   78 *************************************

Guido van Rossum

Benevolent dictator for the Python programming language https://github.com/python/cpython:

00 -  346 *****************
01 -  233 ***********
02 -  304 ***************
03 -  247 ************
04 -  229 ***********
05 -  126 ******
06 -   67 ***
07 -   52 **
08 -  107 *****
09 -  186 *********
10 -  200 **********
11 -  230 ***********
12 -  317 ***************
13 -  572 ****************************
14 -  844 ******************************************
15 -  994 **************************************************
16 -  899 *********************************************
17 -  801 ****************************************
18 -  815 ****************************************
19 -  789 ***************************************
20 -  818 *****************************************
21 -  749 *************************************
22 -  750 *************************************
23 -  517 **************************

Fabrice Bellard

He has created FFmpeg, QEMU, the Tiny C Compiler and recently he has created QuickJS:

Here is his working hours on https://github.com/FFmpeg/FFmpeg project:

00 -   17 *******
01 -    4 *
02 -    1
03 -    0
04 -    6 **
05 -    5 **
06 -    0
07 -    4 *
08 -    4 *
09 -   15 ******
10 -   20 *********
11 -   10 ****
12 -   13 ******
13 -   41 ******************
14 -   47 *********************
15 -   23 **********
16 -   44 ********************
17 -   51 ***********************
18 -   50 ***********************
19 -   30 *************
20 -   31 **************
21 -   46 *********************
22 -  108 **************************************************
23 -   43 *******************

Errata

Some previous versions of this this text has different numbers for Linus Torvalds' repos linux and git. I've used '--author="torvalds@ppc970.osdl.org" --author="torvalds@linux-foundation.org"' to get all the Linus commits. But there are some commits made by Linus with other emails. The current version of text uses data for commits filterd with '--author="Linus Torvalds"'.

And in case of linux repo there was a bug. I've used 2 steps to generate graph: first save commit info to the file 'git log --author="torvalds@ppc970.osdl.org" --author="torvalds@linux-foundation.org" --date=iso > commits', and then feed that file to one-liner: 'cat all | | perl -nalE 'if (/^Date:\s+[\d-]{10}\s(\d{2})/) { say $1+0 }' | ...'. The first step does not finished correctly and the 'all' file had only partial data (the earlies commit saved in that file was f39e8409955fad210a9a7169cc53c4c18daaef3a )

Here are the previous versions of graphs:

Discussions

This post was shared on serveral sites and there were pretty interesting discussions about it:

The script

If you want to check when do some other programmer work (or if you want to find such information about yourself) here is a script that I used to get that info. This is a one-liner that you need to execute in the working copy of the repository. You need to specify --author option to git command. In most simple case you specify the name ('--author="Sebastian Riedel"'). But is is also possible to use email ('--author="torvalds@ppc970.osdl.org"') and specify more than one '--author'.

https://gist.github.com/bessarabov/674ea13c77fc8128f24b5e3f53b7f094

Links

There is a continuation of this post:

Ivan Bessarabov
ivan@bessarabov.ru

15 july 2019

This text is also available in Russian language