Пузыри. Айти для детей и их родителей

Иван Бевуч

Автор начал работать в IT в 2008 году. Видел отрасль с разных сторон, видел много смешного и грустного. Видел, как системы создавались и как они разваливались на части… И теперь готов поделиться этим всем с вами, чтобы вы тоже понимали, как оно было, есть и будет. Эта книга поможет приподнять занавес магического мира айти и проникнуть за кулисы. Для всех, кому интересно это по разным причинам. Тем, кто уже все знает сам, эта книга тоже будет полезна, потому что всего не знает никто.

Оглавление

Пузырь календаря

— Ты трахался с датами.

— Это утверждение?

— Утверждение.

— О, да-а-а…

— Много трахался.

— Очень, очень много.

— Хочешь поделиться болью?

— С тобой?

— С моими студентами, — ответил Борис Николаевич.

Его собеседником был мужчина лет тридцати — тридцати пяти. Мужчину звали Антоном. Антон также был бывшим коллегой Бориса Николаевича. Сидели они в том же кафе, где профессор Соснин пил кофе с Мариной. Вообще это было оптимальным местом для встреч. Вроде бы недалеко от вуза, но прослушка здесь вряд ли будет присутствовать. Профессиональная привычка отходить чуть больше, чем на километр от здания, что уж тут поделать. Если вы параноик, то это еще не значит, что за вами никто не следит.

— Что у тебя с образованием?

— Аспирантуру закончил.

— Отлично, значит, я правильно помнил. У меня должно получиться договориться на твой счет с проректором. Во вторник в 8:45 приходи к парадному входу.

— Но я же еще не согласился даже.

— Антон, ты согласился, уже когда пришел. Тем более свои байки травить ты всегда любил.

— Борис… Ты слишком хорошо разбираешься в людях. Но у меня встреча в 10. Да и далеки мои байки до академической программы.

— А у меня в этом году новый, экспериментальный формат. Встречу перенесешь. Ну чо ты ломаешься, как в первый раз?

— Ох…

Борис Николаевич давно не заходил к проректору самолично. В последнее время лишь Михаил Сергеевич инициировал встречи. А тут Борис Николаевич сам заявился, да еще и без приглашения.

— Михаил Сергеевич, можно?

— Что-то случилось? Или, скорее всего, вот-вот случится?

— Вы слишком хорошо меня знаете. Хе-хе. У меня есть хороший гость для следующей лекции. Аспирантуру закончил, все как надо. Человек в отрасли пятнадцать лет.

— Тема?

— Даты.

— Даты?

— Даты.

— Какие даты?

— Которые календарь. И время еще.

— Это точно нужно? В смысле тема нужная? — с некоторой обреченностью в голосе спросил проректор. Он уже давно сожалел о том, что согласился на «новый формат» лекций из уважения перед заслугами профессора Соснина. Но забирать слова назад было не в природе Михаила Сергеевича.

— Если мы хотим, чтобы наши выпускники стали разработчиками и другими ИТ-специалистами, то обязательно.

— Ох…

Лекция от 22.10.2019

В аудитории пора было ставить приставные стулья — пара студентов уселась на ступеньках сверху. Над ними сжалились и вместили их в два разных ряда чуть ниже. Но следующую тройку вмещать было совсем некуда, поэтому они сели на тех же самых ступеньках.

— Всем доброе утро. «Проблема-2000» была сильно расстроена тем, что на прошлых лекциях ее упоминали, но обошли стороной. Извиняюсь перед «Проблемой-2000». Настало твое время. Про возможные последствия «Проблемы-2000» я уже рассказал, в принципе, все. А сейчас поговорим про причины. Время и дата — являются головной болью, или даже в области несколько ниже, информационных технологий на протяжении всего существования оных. Те, кто уже успел поработать в разработке, а среди наших уважаемых студентов есть и такие, наверняка уже сталкивались с проблемами во времени и дате.

В зале закивали.

— Сегодня мне помогает Антон. Антон занимается разработкой пятнадцать лет.

— Тринадцать всего.

— Тем более. У нас тут несколько лекций назад был пример про мальчика, который спрашивает у папы, почему он не купит вечный двигатель для своей машины. Если ты не возражаешь, я его чуть видоизменю. Пятилетний мальчик спрашивает у папы-программиста: «Папа, а почему секунд 60, минут 60, а часов 24, а дней от 28 до 31?»

— На самом деле, любой папа-программист на этом вопросе сядет на пол и заплачет. Да так, что сыну придется его долго утешать. Я и сам бы сейчас разрыдался.

— Но, предположим, после этого папа решил все-таки объяснить сыну почему.

— Ну, для начала… Для начала папа должен рассказать сыну про год как результат полного прохода планеты вокруг светила по своей орбите. Дальше, если следовать формальной логике, следовало бы рассказать про месяц, но…

— Но забудьте о формальной логике, когда речь идет о датах и времени! — вклинился Борис Николаевич.

— К сожалению, именно так. Потом папа должен рассказать про день как результат полного оборота планеты вокруг своей оси. На этом базовые вводные, которые были даны жителям этой планеты самой планетой, заканчиваются.

— И начинается очередная магия. Время — это социальный конструкт.

— Спасибо. Когда-то, сильно до нашей эры, какие-то египетские товарищи про 365,25 дней в году уже знали. Астрономы, несмотря на низкую продолжительность жизни в то время, успели это уже замерить. Но году требовалось разбиение на даты. А суткам требовалось разбиение на время. И решили товарищи поделить сутки на какие-то понятные промежутки. В принципе, глупо ожидать от ребят, которые придумали очень много всего крутого, но не придумали вменяемого алфавита или хотя бы цифр, что они придумают что-то вменяемое и удобное в качестве календаря. И они оправдали ожидания эти.

— Я по памяти воспроизвел, как в Древнем Египте записывали дату26:

— Спасибо, Борис Николаевич. Но мне кажется, что вы подглядывали в телефоне в википедию, пока рисовали.

— Ой… Ну какой возраст, такая и память…

— А когда им, египтянам, потребовалось эту дату раздробить, ничего лучше, кроме как подробить ее на 24 куска, они не придумали. Почему на 24? Кто их теперь уже разберет. С тех пор многое поменялось, но 24 часа перескакивали из календаря в календарь, и в итоге имеем, что имеем.

— Горе-горе…

— Делить час на что-то более мелкое люди пытались с тех пор еще несколько тысяч лет. Тут на 12, тут на 24, тут на 60, тут на 360. Не любили в древности десятки и их степени, к очень великому сожалению. Каждая культура, каждая цивилизация делала это по-своему, и всех в целом устраивало. А потом несколько европейских сумрачных гениев по очереди придумывали и совершенствовали такой сверхтехнологичный девайс, как механические часы. И досовершенствовались до того, что час делится на 60 минут, а те на 60 секунд. А дальше вместе с механическими часами это было навязано всей остальной планете.

— На этом месте сын, а мы ведь все еще в примере про папу и часы, спрашивает: «А что такое секунда?» Сын же любознательный.

— И папа, конечно же, дает сыну простое и понятное определение секунды: «1/31 556 925,9747 доля тропического года для 0 января 1900 в 12 часов эфемеридного времени». Но это определение просуществовало недолго, его заменили более простым: «величина устанавливается фиксацией численного значения частоты сверхтонкого расщепления основного состояния атома цезия-133, находящегося в покое при температуре 0 К, равным в точности 9 192 631 770, когда она выражена единицей СИ Гц, что эквивалентно с—1». Как хорошо, что у меня открыта статья «Секунда» на википедии27 и я смог это прочитать почти без запинки. Для тех, кто не верит — это официальные определения секунды.

— А для тех, кто не понял, поясню: то есть какие-то умные часовые мастера сделали механизм, в котором что-то и как-то работало, а дальше сотни физиков, химиков, астрономов, астрологов, гомеопатов, знахарей и других замечательных людей пытались придумать хоть сколько-нибудь вменяемое определение того, что используют все люди на планетке более сотни лет. И не придумали ничего лучше и проще, чем «1/31 556 925,9747 доля» и «в точности 9 192 631 770» при температуре 0 К. Да, я теперь тоже открыл статью «Секунда».

— Откуда взялись месяцы, почему их двенадцать, почему в разных месяцах разное количество дней, високосные годы, летнее и зимнее время, часовые, Господи прости, пояса, взлетные полосы — про все это папа расскажет сыну. Отдельно с любовью и теплом в голосе вспомнит про недели, про их сопоставление с месяцами и с годами, про то, как второе, например, января находится в двух неделях разных лет — и это нормально.

— Как вы понимаете, месяцы и недели были придуманы просто так. Так же как и количество дней в них. Тут пусть будет 28, а тут пусть целых 31. Антон, продолжай, а я сейчас зарисую.

— 1 февраля 2003-го я встретил в школе, одиннадцатый класс. Помню, сколько радости меня переполняло, когда я выводил в тетради «01.02.03». Вру, конечно, ничего я не помню. Календарь говорит, что это была суббота. Я даже не смог вспомнить, учились ли мы по субботам в одиннадцатом классе. Но дату помню — красивая была дата. А как на эту дату отреагирует машина? Машина наверняка попросит дать ей формат даты28, ибо вариаций того, что хотел сказать автор, машина знает множество. 1 февраля 2003, 2 января 2003, 2 марта 2001, 3 февраля 2001 — все это и кое-что еще. И то в случае, если машина не скажет «еггог ай-ай-ай». А она скажет.

— Это все в том числе потому, что в разных странах разные форматы — это тоже норма, к сожалению. Что в России — 1 февраля 2003, то в США будет 2 января 2003, а в Китае — 3 февраля 2001.

— Да, ведь машинную логику закладывают люди. И это ведь еще стоит порадоваться, что человечество ушло от следующих календарей: майя, Нуми Помпилия, самватский, лунно-солнечный, бахаи, румийский, хараппский, Армелина и от сотен других.

— Даже от советского революционного календаря человечество ушло. Спасибо википедии за то, что мы хотя бы их названия сегодня можем вспомнить.

— Возможно, кто-то из жителей планеты все еще живет по ним, но это исключительная проблема тех самых жителей. Ведь абсолютное большинство человечества, к небольшому счастью программистов, постепенно подтянулось к григорианскому, даже те, кто параллельно календарит еще и по какому-нибудь своему.

— И вот, казалось бы, один григорианский календарь у всех, — продолжил Антон. — Сутки можно измерить по солнцу. Секунду каждый желающий может аж двумя способами отмерить в домашних условиях: и через атом цезия, и через скорость света. Ну вот чего еще не хватает? Но проблемы продолжают возникать даже сейчас, особенно в информационных технологиях.

— А следствием являются проблемы у их пользователей.

— В каждом из существующих языков программирования есть несколько, а то и несколько десятков, типов данных, связанных с хранением даты и времени. Есть десятки функций, которые их как-то преобразовывают. Форматов ввода и вывода даты и времени (маска, шаблон) десятки, где-то они указываются неявно, где-то явно преобразовываются, и вот 1 февраля превратилось во 2 января. Сколько людей проспало работу, потому что будильник сам не перевелся на летнее время? А сколько проспало из-за того, что перевело часы на зимнее время, а потом они еще раз перевелись автоматически? Сколько людей, покупая билеты или назначая встречу, не учли часовые пояса? Или учли, но как-то не так. Или попросили бездушную и безошибочную машину сказать точное время в другой части планеты…

— А бездушная и безошибочная машина бездушно не ошиблась, просто тоже не учла зимнее/летнее время, отличие времен на устройстве от текущего часового пояса и много чего еще. Либо учла несколько раз.

— Да-да. Несколько лет назад лично наблюдал, как мои коллеги делали мобильные приложения для крупной конференции, которая должна была состояться во Владивостоке. Суть была такова: часть разработчиков находится в Москве, часть в Астрахани (это уже другой пояс), мероприятие во Владивостоке (третий). Гости мероприятия едут из разных стран. Приложения работают на двух-трех операционных системах разных версий. У конкретного пользователя может быть вообще любой часовой пояс. При этом часовой пояс может быть установлен один, а время выбрано другое. А еще между непосредственно разработкой и мероприятием должно было время то ли переехать с летнего на зимнее, то ли это был первый год, когда, наоборот, не должно было. И при этом при всем пользователь должен был видеть актуальную информацию о времени проведения конкретных мероприятий конференции относительно времени на устройстве. Наблюдал за этими страданиями не одну ночь.

— Нам пора закругляться.

— Спасибо, Борис Николаевич. Напоследок, вернусь к форматам дат. Сам неоднократно сталкивался с тем, что крутое западное ПО говорит, что единственный католический вариант вывода даты — «мм. дд. гггг», а иногда «м.д.гггг», а вы со своими «дд. мм. гггг» можете идти и построить CRM/BI на базе…

— На базе «2Ж», Антон. У нас это называется так.

— Хм, окей. Нет, ну некоторые, конечно, пытались сделать это на 2Ж. Но большинство использовало то, что есть. Однако с датой надо было что-то делать.

— Тем, кто за жизнь не успел достаточно пострадать над форматами дат, поясни, пожалуйста, чем отличается «мм. дд. гггг» от «м.д.гггг».

— В двухзначных значениях месяца и дня разницы нет, а вот третий день восьмого месяца будет записан в первом случае как «08.03», а во втором как «8.3». В итоге, чтобы это католическое написание преобразовать в православное «дд. мм. гггг», в далекие годы нужно было перевести дату в текст, поискать в нем точки или другие разделители и запомнить их положение. После чего относительно положения понять, сколько символов (1 или 2) занимает значение, после чего поменять их местами и хранить дальше в виде текста. Этот топорный механизм работал почти всегда. Были и более изящные, но их реализация была не всегда доступна. Сейчас все это атавизм. Даже большие западные католики поняли, что нужно дать православным возможность выводить дату в православном режиме.

— Но если что-то является атавизмом, это не значит, что это что-то не продолжает использоваться повсеместно… На этом все, до следующего вторника. Антон, спасибо.

Примечания

26

Честно срисовано Борисом Николаевичем с изображения в википедии.

27

Я серьезно, там так и написано.

28

Формат записи даты — те самые «дд.мм.гггг», «гггг-мм-дд», «мм/дд/гг»

Смотрите также

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я