Дмитрий Галущенко

История одного байта

Программистам…

Мне не хватало байта. Всего одного. Да, да. Того самого, что из восьми бит состоит.

Что? Hет, я не псих, хотя одному богу известно, сколь тонкой была граница, отделявшая меня от этого состояния. Hо всё по порядку.

Я программер. Но не просто программер. Я принадлежу к касте, которую иногда называют системщиками, иногда кристальщиками. Вы знаете, что это такое? Я объясню, если потерпите. Мне никак не обойтись без специфики, но иначе вы не сможете понять дальнейшее.

Мы программируем чипы однокристаллки, грубо говоря, это когда весь комп в одном кристалле. Программная память и память данных разделены и не взаимодействуют между собой. Программа не может быть запущена в оперативке. Глубина программного стека ограничена. Максимум, на что я могу рассчитывать, — это восемь уровней вложения, причём я не могу изменять предельную глубину стека. О, вы не подумайте чего! У меня бездна ресурсов. Оперативки аж 128 байт! Это на всё про всё. Переменные, там, то да сё… Представили, да?

С программной памятью тоже неплохо. Аж восемь килобайт. И пользоваться ей совсем несложно. Сначала нужно программно врубить нужный банк памяти, запустить в нём нужную процедуру, а по выходе из неё не забыть вернуться, где был. Да, ещё надо иметь в виду, что в пределах банка я могу перемещаться только джампами и вызовами процедур, а переходы по условиям возможны только в пределах одной страницы, т. е. 256 байт. Это значит, если я сравниваю два байта и надо ветвиться, но если метка не находится в пределах 256 байт, то это письмо на деревню дедушке, причём компилятор только в половине случаев предупредит, мол, широко шагаешь, парень, штаны бы поберёг. И это только цветочки! Ягодки я вам сейчас выложу, чтоб вы ими в полной мере могли насладиться.

У меня нет команды вычитания. Вообще! Только add. Уж про такую роскошь, как умножение или деление, я вообще молчу — это для лентяев. Зато мне нужно обеспечить десятичную математику. Вы проникаетесь потихоньку? Коды таких игрушек вылизываются так, что вам и не снилось, особенно если приходится решать задачи на пределе оперативной и программной памяти. Исходники переписываются далеко не один раз.

Мне мало просто решить задачу. Я должен впихнуть её в этот чёртов кристалл! Ограничение по переменным, по размеру кода в целом, по размеру каждой процедуры и по числу вызовов. Малейший недосмотр — и… стек продавлен, и тебя вышвыривает чёрт знает куда. И компилятор не поможет. Такое он не ловит… Вы думаете, это всё? ;-) Hе-ет, дорогие мои. Моя игрушка работает в реалтайме… Это когда напротив каждой крохотной процедурки моего кода нужно подсчитать и проставить время её исполнения в миллисекундах. Мои модули не должны работать более жёстко фиксированного времени, потому что мне надо ещё сканировать киборду и дисплей, поспевать за датчиками и выдавать управляющие сигналы, а всё остальное должно работать, никак не мешая сканнингу, иначе я прозеваю нажатие кнопки, или дисплей станет неприятно мерцать, меняя яркость. Но и это ещё не всё! У меня есть интерфейс. Обычный писишный RS232C, так называемый ком-порт. Но если вы думаете, что это отдельный чип — мол, сунул ему байт, принял из буфера байт, — то вы заблуждаетесь. Себестоимость. Я всё это делаю ручками, телипая единственный бит порта. Ручками кручу диаграмму стартов, стопов и данных.

Итак:

Если я накатал код, решающий задание, но он не влезает в память — задача не решена.

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

Если всё оки-доки, но процедуры слишком длинны, разрушается диаграмма реалтайма — задача не решена.

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

Любой средней руки программер, поставь его в подобные условия, застрелится на второй день. Вообще, по моему убеждению, парни, работающие в этой области, имеют стальные нервы и неукротимую волю к победе. Мы редко общаемся с обычными программерами — нам, в общем, не о чем разговаривать. И не потому, что мы снобы или гордецы. Совсем необязательно.

Нам трудно представить себе программирование под неисчерпаемыми ресурсами на языках высокого уровня. Мало винта? Купи другой, в чём проблема? Мало рамы? Купи ещё, толкни в слот. Меги кодов? А я причём? Это компилятор виноват. Купите машину побольше. Это как разные планеты, и я надеюсь, вы поняли почему.

Это как красивый белый океанский круизер в бескрайних океанских просторах — плыви куда хочешь. А вы попробуйте на нём в финских шхерах порулить. ;-) Или вдевать нитку в иголку среди ночи. Причём чёрную нитку.

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

Hу что ж. Я ввёл вас в предметную область и могу продолжить свой рассказ.

Кристалл не понравился мне сразу. Я сразу понял — тесноват. Всё на пределе. Законных 20 % запаса по ресурсу на возможные ошибки — не соблюсти. Однако остальные кандидаты были сильно избыточны и потому дороги и нерациональны. Себестоимость решила всё, я, наконец, выдал своё согласие, и мощные и гордые красавцы интелы и моторолы последних моделей остались за бортом.

Поначалу всё шло как надо. Пару месяцев работы — и кристаллы были нафаршированы кодом, испытания прошли нормально, платы разведены и отработаны, медленно провернулись шестерни и, набирая ход, закрутились, приводя в действие сложную и громоздкую машину производства. И только у меня изредка ёкало сердечко: ведь всё сделано впритирку! Три, от силы пять процентов ресурсов осталось свободными. А это чертовски мало, поверьте мне на слово. Хотя работа была сделана весьма неплохо и я получил своё законное вознаграждение в виде порции удовольствия от сделанного. Конечно, пара мест довольно авантюрно, местами рыхловато, но зато и несколько изюминок получилось.

И тут… Тут всё и началось. Недостаёт очень важной функции прибора, которую проморгали постановщики. Причём даже не они, а заказчик. Это он вдруг вспомнил, что вот, мол, ребята, тут ещё вот такая мелочь должна быть. Ну, сущая ерунда, чесслово, но без неё никак. Ну, забыли при постановке про неё, с кем не бывает? Но это ж несложно совсем добавить по сравнению с остальными вашими наворотами? Опять же: слава богу, что не датчик забыли. Это всего лишь программа!

Эти постановщики!!! Их карма — понять, что надо заказчику! Даже если для этого надо распилить ему черепушку и просеять через сито всё её содержимое!

Hо криком делу не поможешь. И я на две недели засел дома, запретив меня беспокоить. В мозгу завелись маленькая сирена и светофорчик.

Биип! Вспышка красного! Первый программный банк исчерпан! Репакинг. Оптимизация размещения кода по страницам и банкам памяти.

Биип! Оперативная память исчерпана! Пересмотр функциональности процедур. Эту переменную нафиг. И без этих можно обойтись, если тут по другому пути пойти.

Биип! Провал стека! Прям мордой в дно. Как это?! Я уже на восьмом уровне?!

Биип! Выход меток за пределы видимости внутристраничных переходов!

Биип! Нарушение условий реалтайма, процедуры жрут слишком много времени!

Биип! Исчерпан второй банк памяти!

И так много, много раз. Кропотливо, байт за байтом я вдвигал тело этой проклятой новой функции, непрерывно переупаковывая размещение кода по страницам, банкам, оптимизируя размер кода, график реалтайма, использование оперативной памяти, а то и попросту переписывая модули с нуля.

Может, вы думаете, восемь килограмм бинарного кода — это мало? Ха! Инструкции-то одно- и двухбайтовые. Это вам не трёхбайтовый зайлог или даже интеловский восьмидесятник. Вы были бы поpажены, yзнав, сколько может понаписать наш бpат всего в 128 байтах.

Временами ко мне забегал приятель, как, мол, и что, но я был мало расположен к трёпу «за жизнь».

Через полторы недели я понял, что дело худо. Я располагал более чем полудюжиной решений и уже стоял на месте. Я знал каждую процедуру и функцию наизусть, а каждый байт в лицо! Всё было впустую. Картинка замерла… Она не хотела оживать!

Мне не хватало одного байта. Это показывали все варианты решений. Всего одного байта!

Забежав к другу, я сбросил ему все варианты решений с временными диаграммами и планами банков и вновь вернулся в свою берлогу. Спать. Во что бы то ни стало — спать. Нужна ясная голова. Нужна новая идея. Я был опустошён и выжат как лимон.

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

Места не хватало… Одного байта… Я мял код как глину, я выделывал с ним всё, что угодно, но… один, всего один байт! Наверное нечто похожее испытывает музыкант, написав симфонию, пытаясь найти одну-единственную ноту, чтобы заставить звучать своё произведение. Или художник ищет тот самый неповторимый мазок, который оживит картину. А без этого всё мертво, и весь труд годится только на помойку…

Как-то в полусне я оделся и вышел на улицу. Под ногами мерзко визжал снег. Кругом всё было серо и как-то тускло. Мне больше не нужен был ни компьютер, ни распечатки. Вся схема была во мне… Или вне меня? Она помигивала разноцветными просверками, имея форму причудливых и чем-то даже красивых трёхмерных фигур, или это какие-то ажурные конструкции? Тоненько попискивали контрольные маркеры временных отметок, висящие впритирку к этим кристаллам, странных, каких-то завораживающих форм. И всё это летело куда-то, перемещаясь и вращаясь в каком-то странном меняющем форму — канале? Трубе? Оно проносится вплотную ко всем его стенкам, как по команде невидимого штурмана, в нужный момент разворачиваясь по непонятно какому наитию, чтобы выступающая грань не зацепилась за препятствие. Но каков его капитан —  или кто там? Штурман? Ведь не пройдёт же! Там нельзя пройти! Hо нет! Чудесным образом всё сооружение как-то грациозно изворачивается, ровно в нужное мгновенье, и беззвучно проскакивает… нет! — величаво минует препятствие… А впереди следующее… И вдруг край ажурного сооружения своим крохотным выступом цепляется. Визг и грохот! Лопаются и сминаются сверкающие нити, и всё дробится на миллионы осколков…

Господи! Это же стек! Оно обходит стек! Вот, значит, как это выглядит! Когда я исчерпываю глубину, она, видимо, с треском цепляется и разрушается, ломая свои ажурные конструкции…

В каком-то месте я замечаю скамейку с какой-то одинокой старушкой на ней. Мне нужно тоже посидеть… Напротив стоит продавщица цветов, приплясывая от холода. Не люблю старух… И эта… Какая-то неприятная, чуть не мерзкая. Hу что она уставилась на меня? Кто она? Чего сидит здесь? Небось, от нечего делать. Это они вечно толпятся в магазине, и из-за них ничего не успеваешь купить. И визжат в троллейбусе, чтоб им уступили место. Небось, смотрит эти идиотские новомодные сериалы — как их там? Мария? И ещё кто там плачет?

Да что они все понимают?! Кто это может понять, сколько знаний и труда надо что бы выстроить такое? Сколько бессонных ночей надо провести? Сколько читать? Причём ежедневно, и вовсе не идиотский роман о любви и дружбе?

Да кто вообще в состоянии это понять?! Эти новоявленные пижоны, называющие себя программистами? Коряво пишущими на фокспрах, клипперах и бейсиках? И везде задающих вопросы: а скажите, какую команду мне надо набрать? А какой хелп почитать? А когда мануал на русский переведут? А этот их так называемый «софт»? Великие стотысячевариантные вечноживые склады и бухгалтерии? Нетленные творения. Все на одно лицо. Если там и есть различия, так в корявости и глючности кода. Глюк на глюке сидит и багом погоняет. Вот заставить бы их высекать их коды в камне, как древние камнетёсы, чтоб хоть немного задумались о том, чего пишут… Или эти технокрысы? Это ж надо — вирусы писать, чтоб, значит, гадостью, людям сделанной, прославиться! Тьфу!

Hет. Hе хочу я сидеть на этой скамейке, в компании с этой… Куда же я шёл? Вспомнил. К другу я иду. Может, подскажет чего? Проклятый байт! Чего я взъелся-то так? Все своим делом занимаются, с чего бы худшим, чем я? Талантливых людей хватает везде. Что-то сильно меня, видать, припекло…

Приятель, открыв дверь, молча смотрит на меня.

— Ну?

— Что „ну“? — отвечает он.

— Скажи мне только одно, —  мрачно говорю я, проходя в квартиру, — ты можешь дать мне один байт? Всего один. Я готов отдать тебе за него всё, что угодно. Мне байта не хватает, понимаешь? Ну не влезаю я в кристалл!

Друг какое-то время молчит.

— Я смотрел твои коды.

— И что? Нашёл что-нибудь?

— Hет, — тихо говорит он и, помолчав, продолжил: — Безукоризненно связанное кружево. Ни единой петли. Стыков не видно. Филигранная работа. Штучная. Прям лепота. На каждую строчку можно поставить знак качества. И высечь в мраморе. И однородно всё — ни уплотнений, ни пустот. Монолит, но эластичный. Hо…

— Что «но»?.. Да не тяни ты кота за хвост! Не мотай душу! И без тебя тошно! — взрываюсь я.

— Большинство мест я не могу понять… Не понимаю… Только вижу, как это… красиво. Неосязаемо как-то. Не ухватить сознанием… Вроде вот-вот, но оно улетает… Это как снежинка, когда пытаешься взять её в руку. Или как звуки ещё непонятой, но уже осознаваемой музыки…

— Что за чушь ты несёшь?! Какая к чёрту снежинка?! Какая музыка?! Ты можешь мне помочь или нет?! — ору я. — Ты же друг мне. Помоги, а? Ты только скажи, куда мне втиснуть этот байт… — Я с надеждой смотрю на него. — Ведь свежий, незамыленный глаз. Ведь один, всего один оператор, без которого можно обойтись, и всё! ВСЁ! Проблема решена, понимаешь? И я тебе по гроб жизни… навсегда… — шепчу я, ухватив его за рукав. — Ведь там же до чёрта строк, а я же просто человек, ошибся, пропустил, не заметил… а? А мне ничего не надо. Hи славы, ни похвал. Я только хочу, чтоб оно улетело… Чтоб отпустило меня… а? Hу нет у меня сил больше. Hу не бывает ведь программ без ошибок! Hу пойдём, давай ты ещё коды посмотришь… — я тяну его за рукав в комнату.

— Откажись, — говорит он.

— Отказаться? От чего? — не понимаю я.

— Возьми другой кристалл.

— Ты сошёл с ума??!! Как это — другой??!! Кучи наделанных плат, монтажники, наладчики, зарплаты, детали?! Это что, шуточки??!! Ты думаешь, это на компе — хочу, пару строк добавил, и никто не заметит??!! Затрат ноль, а добавляй хоть мегабайты кода?! А люди? Они ведь верят мне! Я ведь сказал «Да»! Я ведь согласился, хотя и видел, что запаса ресурса почти по нулям будет! А у них уже готово всё! Корпуса, металл, питание. Они ждут только кода! Ты знаешь, к чему может привести смена кристалла? Ты знаешь, сколько будет стоить этот байт?! Один байт??!!

Я сам оглох от своего крика…

— Дурак. — Слово шлепком падает на землю как тюк мокрого белья. — Отступись! Забудь! Мы с ребятами уже три дня как смотрим эти коды. Я собрал всех, кого мог. Я сразу понял, что с тобой неладное. У тебя НЕТ ошибок! Ни одной. Более того, мы не понимаем, как тебе вообще удалось это запихнуть.

Колени мои подогнулись, и я то ли сел, то ли сполз на стул. В глубине души я знал это. А потом я стал говорить… Это был странный монолог… Как будто кто-то кричал, шептал и снова орал моим голосом:

— …думал всё это время. Я понял, что не так уж важен этот проект, как мерило моей ответственности. Ну не решится он, ну переделается там как-то всё. Чёрт с ним! Не так уж это важно. Позор там мой… Дело в другом. Во мне. Ты знаешь, что я уже очень давно не раб, который делает то, что скажут, оправдывая это зарабатываем денег для семьи. Очень долгое время я наёмник. Мои услуги, мои программы стоят очень дорого. Ты же знаешь, я не берусь за простые вещи. Пусть хоть озолотят. Я на себя и для себя работаю. Да мне уже давно плевать на деньги! Они практически не имеют надо мной власти! Мне другое надо! И я тщательно скрываю это. Потому, что интересную задачу я готов делать бесплатно, а то ещё и приплачу за неё. Ты же сам знаешь, каково это?! Ну?! Ты ведь тоже не для денег это делаешь! Есть только одна вещь, которую я никогда и никому не говорил. Ты знаешь, что такое — летать? И не ври мне, что не знаешь, что это! Все знают это! Только предпочитают не помнить или не верить! Тебе тоже знакомо это! Это как в детских снах. Помнишь? Мы взмываем высоко-высоко и несёмся, визжа от переполняющего восторга! А под нами проносятся леса, горы и моря! Ты думаешь, это был сон?! Нет! И я давно понял это! Только сказать боялся. Стыдился, дурак! Но теперь мне всё равно! Это душа наша летит! По настоящему! А разум говорит, что мы спим. Понимаешь? А почему, когда мы взрослеем, перестаём летать? А?! Почему?! Почему нам перестаёт сниться этот сон? Не знаешь? А я знаю! Потому, что душа наша тяжелеет, потому, что ценности, деньги, условности этого общества захватывают над нами власть, и душа наша больше не в силах поднять этот груз!

Как же! Мы ж прям распластываемся, чтоб стать ковриком, о который вытрут ноги! О, какие веские причины, такие аргументированные объяснения, почему это было необходимо именно так прогнуться, и как мы ради кого-то это делаем. Мы врём сами себе каждый день, убеждая сами себя, что живём правильно. А я не хочу, не могу больше врать!

Ты не понимаешь, как это относится к этому дьявольскому байту?! Всё очень просто. Я уже давно могу летать! И работа помогает мне в этом. Да-да! В пики высшего напряжения при решении своих задач я взлетаю. Это невозможно описать! Но я не могу лететь постоянно. Я снова опускаюсь… И так до нового кода, в который надо что-то вложить. Я не знаю, что. Какой-то кусок себя, что ли. Но в этот раз я попался. Меня сгубила гордыня. Ну, как же! Я ведь гуру, умеющий снисходительно тыкать чайников носом и походя разрешать их проблемы! Мне так нравятся их взгляды на меня как на божество. Ведь мы тщеславны, и я не исключение. Но сейчас всё не так! Ты думаешь, проблема в этом одном байте и как его засунуть? Нет! Вся проблема во мне! Я не могу его запихнуть! Но это может сделать не я! Понимаешь? Решение есть! Я это чувствую! Только я не способен его найти! Для этого я должен стать другим! Не собой! И кто-то или что-то чётко поймал меня, на этот один байт!

Ты же отлично знаешь, что я умный и хитрый! Если бы задача не решалась, я бы ушёл, ускользнул, сорвался с крючка! Но я считал, что она решается, и меня подсекли! Поймали на этот байт как в сеть. И байт этот — это размер ячейки сетки, через который я не могу улизнуть. Слишком далеко я зашёл… И я не смогу уйти и снова быть свободным, если не изменю что-то в себе! Полностью изменить себя, понимаешь? Стать другим человеком! И тогда, может быть, передо мной откроется дверь… Я не знаю куда… Я не знаю что за ней… И я не знаю, как и что я должен сделать для этого… Да… И ещё цена… Я и это понял… Я не смогу быть как прежде… Я не смогу летать больше… Всё будет кончено…

Я медленно поднялся и, ссутулившись, пошёл к двери…

— Прощай… — глухо сказал я в пустоту…

— …Кретин! — неслось мне вслед. — Ты же сдохнешь над этой программой! Сдохнешь! Ты в зеркало на себя посмотри! Психушка для тебя — милость! Делай что-нибудь! Иди к бабам, напейся вдребезги…

Hо я уже ничего не слышу. «Господи, если ты есть — помоги…» Только на улице я спохватываюсь, что забыл перчатки и шапку. А зачем они мне? Разве это главное? А что главное? Зачем всё? Кому всё это нужно? Людям? Да наплевать им! Это мне нужно! Лично мне! Я сам загнал себя в ловушку и сам же не могу из неё выбраться. Что это? Наказание? Урок, чтоб впредь не задавался? Да уж, скорее так. Гонору у меня хоть отбавляй… Стоп, стоп… Как он сказал? «К бабам?»

В офисе тепло и уютно. Калорифер. Чистенько. Жужжат компы. Папочки, стоечки.

Девочки поят меня кофе, подкладывают булочки, которые я пожираю с жадностью, перемазавшись в шоколаде. Они подливают и подкладывают, сердобольно глядя на своего опустившегося коллегу. Девочки тоже программистки, чего-то там офисное набивают, на радость кадрам и бухгалтерии. Они аккуратны, при макияжах, отлично, словом, выглядят, особенно по контрасту с моей многодневной щетиной — а может уже и бородой? Я кратко и с неохотой отвечаю на вопросы, что, мол, меня до жизни такой довело. «Не решается. Ассемблер. Со стеком проблемы. Байта не хватает». Одна из них, Оксана, кажется, её зовут, говорит с украинским приятно-округлым выговором:

— Який такий стек? Зачем он тебе нужен? Мы с Олей, она на клиппере, я на фоксе, никакого стека у нас нет. Может и тебе не надо? Вечно вы, мужики, себе пакость какую выдумаете. Сами же и мучаетесь, да нас мучаете, скажи Оля?

— Что?! — Только кресло мешает мне свалиться на пол. Какой-то противный, каркающий клёкот рвётся из меня… — Вы пишете без стека?!

А вот это уже истерика…

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

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

Hо что это? Я здесь, вроде, был? Цветы. Скамейка. И бабушка на ней. Как будто и не уходила. Ведь мороз же? В нерешительности я присаживаюсь на край скамейки. Ого! Руки-то замёрзли, и ухи тоже. И тут как будто что-то толкнуло меня, я встал, подошёл к продавщице цветов и на последнюю трёшку (а зачем она мне?) купил розы и подошёл к бабушке. В голове у меня судорожно билась мысль: что я делаю? Зачем? Она ждала, подняв ко мне лицо. И я выдавил из себя:

— Извините. Я могу подарить вам цветы? Я… плохо подумал о вас… тогда…

Она нисколько не удивилась. И сказала…

— Где же ты был так долго, сынок? Я замёрзла ждать тебя…

???!!! Сказать, что я удивился, значит не сказать ничего… Я был потрясён, ошеломлён, раздавлен! А она продолжала:

— Тебе ведь плохо, сынок?

Она смотрела на меня с участием. В её глазах светилась мудрость, доброта и… любовь. Вы понимаете?! Ко мне любовь… И тогда я сказал:

— Да! Мне плохо. Мне очень плохо…

Я не боялся и не стыдился. Что-то как будто упало с меня, отскочив, как шелуха. И я стал рассказывать… Сбивчиво, торопясь и захлёбываясь.

Я рассказывал бабушке, как я программирую однокристальные микропроцессоры…

Она внимательно, не перебивая, слушала меня. Она всё понимала! Каждое моё слово! Это я видел по её глазам. Я говорил и говорил. А она вела меня куда-то, и я ел что-то очень вкусное, а потом мы пили чай с каким-то необыкновенным вареньем на крохотной, но такой уютной кухне. Наверное, это была очень странная картина: полусумасшедший программист и старушка, его внимательно слушающая… А потом говорила она. Я не помню о чём. Я только помню, что это было что-то очень важное и нужное мне, что я черпал из этой кладези мудрости, которую можно обрести, только прожив большую жизнь, потеряв столь многих любимых и дорогих людей, но обретя любовь…

И вдруг… Словно пелена упала с моих глаз… Снова стала разворачиваться внутри меня странная, невесомая и в то же время прочная конструкция. Она разворачивалась мощно и грациозно, окружённая великолепием огней. Каждая её грань, каждый элемент были совершенны и неповторимы!

И легонько вибрируя, она порождала музыку. И всё это вместе наполняло меня необычайным трепетом и восторгом!

Это я! Я создал её! Это мной отшлифованы все её грани! Ну почему этого никто не видит?! Ну посмотрите же! Разделите со мной моё счастье! Теперь я не боялся. Я знал, что она полетит! И она поможет и мне оторваться от земли. С ней и я полечу к звёздам!

И я снова шёл по улице. Но совсем по другой. А точнее просто в другом мире. Потому что этот был прекрасен! Снег брызгал разноцветными искрами тысяч неповторимых красок и такой неповторимой музыкой звучал под ногами. Это как будто ваш старенький компьютер с CGA монитором, вдруг стал показывать миллионы цветов. Впрочем, что за чушь я несу? Разве можно сравнить какую-то стекляшку с красотой реального мира? С его запахами, ласковым солнцем и дуновением ветерка в лицо?..

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

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

И это неважно, что, может быть, понять красоту ваших кодов сможет не так уж и много людей. Если написав свою программу, мы стали лучше, то это правильная и хорошая программа! Hо если вы думаете, что нужно меньше труда, чем в дpyгом любом деле, то вы ошибаетесь. И если вы не готовы или не хотите в своём творении оставить часть своей души и сердца, не готовы к тому, чтоб изменить себя, то лучше… не пишите программ.

Hе плодите ypодцев, калечащих и миp, и свою дyшy. Поищите себя в чём-нибудь другом…