# Правильная отладка

Павел Пименов

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

- Ты у меня заработаешь, - приговаривал Сеня, быстро стуча по кнопочками на клавиатуре. - Ты у меня обязательно заработаешь.


На мониторе сменяли друг друга окна отладчика, пошагового компилятора, среды разработки ПО, всплывали на миг чёрно-белые текстовые окошки Shell-исполнителя, ассемблера, трассировщика и тут же пропадали, противно пискнув. Но ничего не помогало. Программа не хотела работать правильно.


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


Плавающая ошибка - страшный сон любого программиста-разработчика. Единственным средством борьбы с ней было полное переписывание всего кода, а это месяцы и месяцы кропотливого труда. Сеня поёжился. "Ну уж нет, проще уволиться, - подумал он. - Другая фирма, такая же маленькая, с радостью возьмёт опытного разработчика к себе. А эту загадку компьютерного мира придётся бросить".


Сеня вылез из-за стола, накинул куртку и вышел проветрится.


- Здорово! - окликнул его на улице лысоватый дядька далеко за сорок.


- Здравствуйте, Николай Иваныч, - поприветствовал Сеня соседа по подъезду.


- Как, друг-Семён, дела у молодых программистов-надомников? - полюбопытствовал сосед.


- Фигово, - честно признался Сеня.


- Девушки не дают, да? - подмигнул сосед.


- Да нет, Николай Иваныч, по работе.


- Компьютер не даёт, хе-хе?


Сеня улыбнулся. Умеет Николай Иванович поднять настроение. Вроде всё хреново, и впереди только хуже, а встретишь этого толстяка-добряка, пять минут, и жизнь, оказывается, не так уж и плоха.


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


- Это бывает. Ничего, исправишь, - обнадёжил сосед.


- Хотелось бы, - Сеня вздохнул.


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


Из подъезда выкатился Николай Иванович, на ходу застёгивая пальтишко и наматывая шарф. Старомодный портфель из кожзаменителя сосед удерживал подмышкой.


- Здрасьте, Николай Иваныч, - поприветствовал спешащего гуманитария технарь-неудачник.


- А, друг-Семён, здорово! - откликнулся сосед. - Как жизнь молодых программистов-надомников? Охмуряем девчат, а?


- Охмуряем, - согласился Сеня и пнул ногой кусок лежалого снега.


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


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


- Капризничает твоя программа, - понял по-своему Николай Иванович.


- Ну, можно и так сказать, - не стал спорить Сеня.


- Так-так, - задумчиво произнёс Николай Иванович. - Так-так.


Сеня поднялся, собираясь попрощаться и идти домой, но сосед жестом остановил его.


- Погоди, друг-Семён. Есть у меня одна мысль, как тебе помочь, - этнограф помолчал и продолжил. - Скажи-ка, а есть ли в твоей программе кусочек, который отвечает за... передачу полезных данных между разными частями программы?


Сеня задумался: "Что за странный вопрос. Все данные полезны. Или нет? Может, диспетчер сообщений?"


- Вроде есть такой, - неуверенно ответил программист.


- А есть кусочек, который поступающие данные обеззараживает?


Тут Сеня не сомневался.


- Конечно, есть.


- Отлично, друг-Семён, - обрадовался этнограф. - Ты бы мне эти кусочки распечатал.


- Сейчас?


- А чего тянуть? Только ты их пометь. На бактерицидном напиши "С", а на транспортном "К", идёт?


- Ладно, - согласился Сеня. А про себя подумал: "Может, у них в институте знакомые компьютерщики есть? Вдруг помогут".


День прошёл, ночь прошла.


Ранним утром раздался звонок в дверь. Невыспавшийся Сеня хмуро приветствовал соседа. Тот, напротив, был в приподнятом настроении.


- Ну, друг-Семён, пляши. Удалось твою задачку решить.


- Да? - вежливо поинтересовался Сеня.


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


"Что там может быть? - удивился Сеня. - Жёсткий диск? Стопка дивидишек?" Но он не угадал. В коробке лежала детская игрушка.


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


- Нет, друг-Семён, ты не понимаешь. Показывай свою программу, а я научу тебя, как её исправить.


***


На предварительных и финальных тестах программа вела себя идеально.


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


Подойдя к одному из заказчиков вплотную, Сеня вполголоса сказал:


- Программа иногда, очень-очень редко, но может сбойнуть.


- Вот как?


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