В какое время работают известные программисты?

Мне стало интересно, когда работают известные программисты. Это очень легко выяснить. Результат работы программистов — это код (текст программы). Код хранится в системе контроля версий (Version Control Systems, VCS). При сохранении кода в систему контроля версий записывается время.

Одна из самых популярных систем контроля версий — это git. Когда человек сохраняет код в системе контроля версий создается штука под название "Коммит".

Вот пример как выглядит информация о git коммите:

$ 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

Тут можно увидеть сообщение с которым был создан коммит ("Initial commit"), информацию про ID в котором содержится данные о файловой структуре проекта в этом коммите ("tree 496d..."), имя и email автора коммита и, самое интересное — временная метка (timestamp) когда был сделан коммит (1563188141) и информация о часовом поясе (+0300) (У каждого коммита в git есть автор и коммитер — обычно эти строки одинаковые).

Timestamp — это количество секунд с 1-ого января 1970 года. Если перевести 1563188141 в более читаемый формат, то это будет "2019-07-15 10:55:41" — это время во временной зоне UTC. Потом к этому времени нужно добавить "03" часа "00" минут — мы получим "2019-07-15 13:55:41" — это время в том часовом поясе в котором находился автор коммита (именно это время он бы увидел на своих наручных часах когда он сделал коммит).

У серьезных программных проектов в системе контроля версий находится множество коммитов (десятки тысяч, сотни тысяч, могут быть и миллионы коммитов), сделанные множеством разных программистов. Достаточно легко написать простую программу, которая из системы контроля версий отфильтрует только коммиты одного человека и покажет время когда этот коммиты были сделаны.

Linus Torvalds

Линус — это автор операционной системы Linux. Он же автор системы контроля версий git. Кроме этого он еще написал программу для аквалангистов Subsurface.

Вот график в какое время он коммитит в репозиторий https://github.com/torvalds/linux.

Линус производит впечатление абсолютно нормального человека — большинство его коммитов сделаны в 10 утра. Практически нет коммитов ночью.

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 **

А вот данные о времени его коммитов в репозиторий 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 — автор двух популярных Perl фреймворков: Catalyst и Mojolicious.

То как он работает — это совершенно невероятно. Завидую его продуктивности.

Вот распределение его коммитов из репозитория https://github.com/mojolicious/mojo с разбивкой по часам:

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 — автор компилятора LLVM и языка Swift. Он работал в Apple, потом перешел в Tesla, совсем немного там поработал и сейчас работает в Google.

Судя по распределению его коммитов в репозиторий https://github.com/apple/swift можно предположить что он сова:

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

Одна из его последних работ — это язык программирования Go.

Вот график его коммитов в репозиторий 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

Бред — создатель LiveJournal, он создал memcached и сейчас работает над языком программирования Go.

Вот график его коммитов в репозиторий 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 *****************************************

А вот в какое время он коммитит в язык Go 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

Первый разработчик языка программирования PHP.

https://github.com/php/php-src (в этом репозитории нет первых версий PHP, так что это статистика его работы над актуальными версиями PHP):

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

Великодушный пожизненный диктатор языка программирования Python 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

Создатель QEMU, Tiny C Compiler и совсем недавно он анонсировал QuickJS.

Вот распределение его коммитов в проекте https://github.com/FFmpeg/FFmpeg:

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 *******************

Скрипт для генерации данных

Если вы хотите посмотреть на время работы других программистов (или хотите получить такую же информацию о самом себе), то вот скрипт, который я использовал для генерации этих данных. Это однострочник, который нужно запустить в рабочей копии git репозитория. Необходимо указать опцию --author. В самой простом случае нужно только указать имя под которым были сделаны коммиты в git ('--author="Sebastian Riedel"'). Но иногда нужно указать email ('--author="torvalds@ppc970.osdl.org"') (например в той ситуации если не все коммиты сделаны под одним и тем же именем). А еще возможно указать --author несколько раз.

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

Если вам интересны подробности как это работает, то можно почитать подробнее про Perl однострочники.

Иван Бессарабов
ivan@bessarabov.ru

16 июля 2019

Этот текст есть и на английском языке