С правильным Днем программиста

от автора

image

Вчера, 12 сентября, я получил раз 20 поздравление с днем программиста. День программиста — это 256-й день в году. Идея отмечать этот день понятная, интересная, воспринимается благожелательно, как программистами, так и остальными людьми.

Однако, когда я 1-й раз несколько лет назад услышал об этой дате, я по привычке провел факт-чекинг, чтобы вычислить точную дату дня программиста. Каково же было мое удивление, когда мои расчеты не совпали с датой, которую из года в год транслируют в СМИ.

Простая команда прибавляет к началу года 256 дней.

date -I -d '2024-01-01 + 256 days' 
Что же она возвращает?

2024-09-13

13 сентября. Какого черта меня все поздравляют 12-го?

Может быть утилита date глючит? Попробуем посчитать на яве.

import java.time.LocalDate;  public class DeveloperDay {     public static void main(String[] args) {         System.out.println(LocalDate.now().withDayOfYear(1).plusDays(0x100));     } } 
Результат

2024-09-13

Опять тринадцатое. Что происходит?

Я думаю, дело обстоит так.

Какие-то журналисты посчитали пальцем по календарю до двухсот пятидесяти шести и запустили статьи с поздравлениями на день раньше. Программисты, такие статьи, естественно, не читают, но от родственников, друзей и знакомых, узнали о том, что сегодня у них праздник. Перепроверять информацию никому в голову не пришло, поэтому новость закрепилась, и СМИ поставили ее публикацию в CRON. И теперь мы каждый год отмечаем день программиста не 13/14 сентября, а 12/13 (в високосный год дата уменьшается на 1 день).

Почему же так получилось? Дело в том, что когда составляли правила летосчисления, не умели
пользоваться нулем. Все считали на пальцах, а на них показать ноль нельзя. Поэтому получился отсчет, основанный на множестве натуральных чисел от 1 до 366.

365 1 2 3 4 5 ... 363 364 365 1 2 3 4 5 ... 363 364 365 366 1 2 3 4 5 ... 

В этом множестве день, предшествующий дню номер 1, имеет номер 365 (или 366).

Но в таком множестве, с такими определениями операций сложения и вычитания, число 256 не является круглым. Не существует общепринятого формата представления для такого числа, в котором бы номер 256 выглядел бы как-то особенно красиво по сравнению с другими. Соответственно и с точки зрения программизма ничего примечательного в таком номере нет.

И только знание особой роли нуля отличает программистов от простых обывателей. Только они знают, что перед элементом с номером 1 находится элемент с номером 0, а номер 256 — это круглое число, потому что в двоичном представлении оно равно 0b100000000, а в шестнадцатеричном — 0x100.

Вот как раз наступление дня с круглым номером — это и есть настоящий праздник. В день с номером 0xFF программисты по традиции ходят в баню, а ровно в полночь при переходе от 0xFF к 0x100 в 00:00:00 UTC открывают шампанское и получают поздравления весь следующий день. В день номер 0xFF программистов тоже можно и нужно поздравлять, но… с наступающим.

Поздравляю, программисты!


ссылка на оригинал статьи https://habr.com/ru/articles/842962/