Сергей Либертэ

Это я сделал "ошибку 2000"

(статья опубликована 12/08/99)

      И тут заговорили об "Ошибке 2000". Одна дама сказала, что она не понимает, как это программисты во всем мире сделали такую ужасную ошибку, что из-за неё теперь все цивилизованные люди должны будут целый день сидеть дома без света и воды. Почтенный господин напротив со знанием дела объяснил, что в те далекие времена в компьютерах было очень мало памяти, и надо было экономить. Он читал об этом статью в популярном американском журнале. Но дама не сдавалась и сказала, что нельзя же экономить за счет всего цивилизованного человечества, которое теперь целую ночь, а может быть и несколько дней будет без денег и без продуктов, и вообще - это преступление против человечества и за это тех, кто это сделал, следует судить и наказать.
     Тут я не выдержал и, хотя закуска и выпивка были великолепны, отвлекся.
     - Господа, - сказал я, - это я внес в компьютеры "Ошибку 2000!".
     Наступило молчание. Я скромно добавил:
     - Нет, не во все, конечно, а только в те, что были мне доступны.
     Стол смотрел на меня, как на верного кандидата на скамью подсудимых в международном суде, что в Голандии, в Гааге. Дама, которой стало неудобно за резкость, молчала, но её муж тихо и внятно спросил меня:
     - Зачам же вы это сделали?


     Действительно, зачем?
     В те незапамятно далекие времена, в начале семидисятых, во всем мире, и у нас там, компьютеры стали всерьез использовать для организации производства. У них, за океаном, это приносило пользу, у нас в Москве, скорее удовольствие программистам. Тем не менее развитие шло стремительно и параллельно. Мой первый компьютер занимал зал размером с бассейн, где я сегодня иногда плаваю, а по техническим показателям был в тысячи раз слабее того, что стоит на моем рабочем столе. Стоил он бешенные деньги, и час его работы был сравним с моей месячной зарплатой. Но для нас это было чудо из чудес, инструмент, благодаря которому рождалась профессия, обладание которой сегодня считается везением и явным знаком материального благополучия. Считалось, что для того, чтобы быть программистом, нужно хорошо знать математику, поэтому в наших институтах нам от души вливали математические дисциплины. И лишь потом, на практике, оказалось, что из всей математики нам нужно хорошо знать лишь арифметику и логику. Да, логику, и математическую и обычную. Собственно, умение мыслить строго логически и есть основной тест на профессиональную пригодность, а вовсе не знание наизусть формулы извлечения квадратного корня или умение дифференцировать.
     - Ну а раз логика и есть ваш основной козырь, как же так случилось, что вам не пришло в голову, что год нужно описывать четырьмя цифрами, а не двумя? - спросил господин, читающий американские популярные журналы.
     - Уважаемый! - ответил я, - вы только что заложили трагические основы "Ошибки 10000". Если мы будем описывать год только четырьмя цифрами, то представляете сколько программистов потребуется тогда для исправления этой ошибки, ведь компьютер в те далекие времена будет управлять уже абсолютно всем, от погоды до туалетов в доме.
     Начитанный господин был явно обескуражен, но нашелся и ответил:
     - Да, но до этих времен человечество может вообще не дожить, а если доживет, то уж наверняка изменится сам принцип компьютеризации - и вообще, что нам сейчас об этом думать, для нас сегодня это непредставимый отрезок времени!
     Я задумался над его ответом. Как же объяснить им, что в те далекие- далекие времена для нас, двадцатипятилетних, отрезок в 20-30 лет казался столь же непредставимой вечностью, а системы программирования компьютеров менялись кардинально каждые три года, фактически они менялись с каждым новым компьтером.
     Мой следующий компьтер, шел 1975 год, был вдвое мощнее, занимал зал размером с ресторан, где мне послезавтра надо быть на чьей-то бар-мицве, и программировался принципиально иначе. Все программы, написанные нами с таким энтузиазмом и отлаженные долгими ночами за пультом престарелого гиганта, - всё шло в мусорник. Надо было всё переписывать заново, используя новый мощный язык программирования, пришедший вместе с нарождающейся гегемонией фирмы ИБМ! Конечно, одновременно стоило подновить идеи, учесть предыдущий опыт, но все это - сопутствующие обстоятельства, главное: прогаммы нужно было переписывать. И ни у кого, в том числе и у меня, не было сомнения, что следующее поколение компьютеров (ну год, ну два - в Америке, говорят, уже есть) будет совершенно иным, появятся дисплеи, возможно, уже будет связь по телефонным линиям, объемы дисков возрастут колоссально (назывались цифры в 200 мегабайт хранимой на диске информации, а купленный сегодня в любой лавке компьютер несет в себе диск минимум в 30 раз большего объема!) - но, что самое важное - появится новый, ещё более мощный и удобный язык программирования, и мы будем переписывать программы. И несомненно - создадим нечто необычайное по красоте, быстродействию и совершенству!
     - Понимаете, мы думали точно также: или эмир умрет, или ишак умрет, или я умру. Помните популярного в Советском Союзе персонажа Хаджу Насреддина? Но основная ставка была, конечно, на ишака - то есть на компьютеры. В то, что хоть одна наша программа доживет до 2000 года или вообще проживет срок больше пяти лет без переписывания - не верилось. Именно это считалось абсолютно невероятным. Но время шло, компьютеры становились все меньше и дешевле, а наш труд (к нашей радости) все дороже и требовался все больше. В 1977 году, например, в журнале "Америка" я прочел прогноз, по которому в Соединеных штатах до 1985 года будет требоваться по полмиллиона программистов ежегодно! Наверное, для того, чтобы переписывать заново все программы - в компьютерном мире это было время строительства Вавилонской башни. Но если человечество до сих пор не справилось с проблемой единого языка или хотя бы элементарной языковой совместимости народов (поезжайте в Европу и попытайтесь там поговорить на каком-нибудь языке, кроме местного), то программисты, перед которыми была поставлена такая задача, в основном, её решили.
     - Понимаете, никто нам не говорил, с какого именно этапа наши программы больше не будут переписываться заново, просто стоимость их переписывания и трансформации накопленных данных в новые информационные структуры вдруг стала сравнима со стоимостью компьютера, и явственно обозначилась тенденция - программы всё дороже, компьютеры - всё дешевле. Сейчас это абсолютно несопоставимые цифры - компьютер в развитых страных можно купить за месячную, а то и недельную зарплату, приличный сервер, способный стать узлом в сети Интернет или обеспечивать базу данных среднего по величине города стоит 20-30 тыс. долларов, а разработка программ - здесь речь уже давно идет о суммах с 6 и 7 нулями. Но о том, что этот день перелома наступил, никто никому не сказал. Просто программы мы больше не переписывали, мы их тянули со старого компьтера на новый вместе с морем накопленных уже данных, модернизировали, дописывали, заменяли отдельные куски. Так и получилось, что многие программы, обслуживающие сегодня крупные фирмы, банки, городское хозяйство живут уже более 20 лет, руку к ним приложило несметное количество программистов, и где в файлах и программах находятся те самые структуры, что описывают год двумя цифрами вместо четырех, уже никто не знает. К тому же программы такого почтенного возраста так жестко связаны с данными, которые они обрабатывают, что попытка увеличить длину одного информационного поля приводит к цепочке изменений, нарастающих, как снежный ком. Я, каюсь, сам написал немало такого.
     - То есть вы хотите сказать, что все это произошло, как бы, случайно? - спросила дама, что хотела предать меня суду.
     - Я рад, что вы нашли смягчающие обстоятельства, - любезно ответил я даме.
     - Не прав этот ваш американский автор, - обратился я к образованному господину, - я, кстати, читал его статью и видел фотографию, он просто неприлично молод, чтобы рассжудать об этом. Это я, а не он сделал эту ошибку, и я твердо знаю, что никто из нас никогда не экономил ресурсы в обмен на возможность катастрофической потери программой работоспособности. Да и экономия - копеечная. Более того, я хочу сказать что эта "ошибка 2000" не единственная в этом ряду. Например, кто из нас, советских программистов, предполагал, что зарплата человека может быть шестизначным или семизначным числом? Трехзачное число было нормой, четырехзначное считалось абсолютно несбыточной мечтой, мы закладывали шесть знаков. А потом, в период шоковой терапии, обычные люди получали в месяц миллионы рублей. Кто мог об этом подумать? Представляю, сколько программ расчета зарплаты в России пришлось полностью перелопатить.
     - Там все равно денег на зарплаты все еще нет, так что время на исправление программ имеется в избытке, - сказал недавно репатриировавшийся инженер средних лет.
     - Да, это, конечно, снижает актульность этой ошибки. Да и денежная реформа пришлась кстати. Но я хотел лишь подчеркнуть, что истинная причина этой ошибки - неспособность человечества предвидеть развитие событий даже на короткий, исторически ничтожный срок в десятки лет.
     - А это уже экзистенциальный вывод! - сказал хозяин дома, в прошлом философ.
     - Скорее, я рассматриваю эту ошибку в ряду множества других, совершенных человечеством в связи с этой его неспособностью адекватного предвидения, в надежде, что это спасет меня от скамьи подсудимых в международном суде. Посмотрите - наша ошибка в программах расчета зарплаты была сделана потому, что мы за 10-15 лет до этого не предвидели распад СССР и его экономической системы, но и за два года до этого это событие не предвидел ни один политик.
      - И за два месяца тоже никто не предвидел, - хмуро сказал свежий репатриант.
     - Действительно, а кто считал, сколько неверных действий было совершенно из-за этой ошибки политиков? Сколько это стоило, каковы были последствия? Это не анализируется, выводы не делаются. Мы, программисты, в своей профессии, сделали из этой ошибки существенные выводы, поверьте. Во многом изменился сам стиль проектирования, программы, которые мы пишем сегодня, вы сможете использовать и в другой планетной системе, где летоисчисление принципиально отличается от нашего, главное, чтобы время оставалось линейной категорией. Но посмотрите на Балканы - можете ли вы сказать то же самое о политике?