Отчет об ошибке
Глава 1 из 12
Настройки чтения
18px
1.8
1

Отчет об ошибке

Глава 1

Отчет об ошибке

Тук-тук-тук.

Пальцы без устали порхали по клавиатуре.

Однако, несмотря на эту суету, работа шла довольно легко.

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

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

«Хм…»

Но бывали моменты, когда даже мои пальцы замирали.

Первый случай — когда я задумывался над самой спецификацией.

«А может, лучше реализовать это вот так…»

Мне постоянно бросались в глаза более удачные варианты решения.

И всё же «Да какая разница, сделаю по спецификации, и дело с концом.»

Если проявить самодеятельность и возникнут проблемы, будет только хуже.

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

Конец рабочего дня.

— Тесты я закончил ещё раньше, коммит сделал, так что…

Проверив всё в последний раз, я встал с места, накинул куртку и сказал:

— Что ж, я закончил, ухожу домой.

Я уже собирался выйти из офиса.

Как вдруг сзади послышался голос:

— У тебя что, какие-то важные планы?

Это был наш новый руководитель Ким.

Говорили, что он хорош в планировании задач и показывает отличные результаты.

Хотя, если перевести с офисного языка, это означало, что он мастерски выжимает все соки из разработчиков.

Впрочем, если говорить о важных планах…

— Нет, никаких.

Их действительно не было.

Ведь всё, чем я занимался дома после работы, — это игры.

— Тогда почему бы не поработать ещё немного? Ты ведь разработчик с опытом и должен понимать: если твой график сдвигается, это тянет за собой весь проект.

Конечно, я это понимал.

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

Но ко мне это не относилось.

— Что мне нужно сделать?

— В смысле, что сделать? У тебя наверняка ещё полно работы на сегодня.

— Я всё закончил. Можете проверить.

— Что? Не может быть…

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

От удивления к оцепенению, а затем к откровенному недоверию.

— Ты сделал всё это за один день?

— Да.

— А тесты?

— Я прогнал их на сервере разработки ещё раньше. Логи сохранил, можете проверить…

— Нет, я должен убедиться в этом лично.

Руководитель Ким взял USB-накопитель, встал и сказал мне, стоявшему в стороне:

— Чего стоишь? Пошли.

— Мне обязательно идти?

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

Щелк. Дверь серверной открылась, и я был вынужден войти следом.

Внутри всегда было прохладно, а пространство наполнял лишь гул работающего оборудования.

— Пэк Ин Ук.

Вставив USB в сервер, руководитель Ким назвал моё имя и произнес:

— В твоем резюме сказано, что ты первый кореец, победивший на международном студенческом чемпионате по программированию.

— Было дело.

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

Он сбросил настроенную мной тестовую среду и начал настраивать всё заново, уже самостоятельно.

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

В этот момент код запустился, и на экран начали выводиться результаты тестов.

— Конечно, признаю, что в скорости ты превосходишь многих…

Логи быстро бежали по экрану.

Ожидая завершения, он предложил мне пари:

— Давай поспорим? Условие простое: если в твоем коде найдется хоть одна ошибка, ты проиграл.

Пари, значит…

На самом деле я уже знал результат, так что ничем не рисковал.

— Хорошо, договорились.

— Если найдется хоть малейшая ошибка, с завтрашнего дня ты будешь каждый день приходить ко мне на проверку и не уйдешь домой, пока не исправишь всё до последней запятой.

— А если ошибок не будет?

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

…А это уже заманчивое предложение.

Если бы он предложил что-то вроде «куплю тебе обед», я бы отказался — мне это не нужно.

Но это предложение оказалось куда интереснее.

И в этот самый момент…

Тест завершился, и результаты были выведены на экран.

Я быстро ответил, прежде чем руководитель Ким успел всё прочитать:

— Я принимаю пари.

— Ты сам на это пошел. Только потом не жалей и не проси отменить всё назад.

— Вот именно. Здесь, в этой части, сверху и снизу всё выводится как True, а тут False.

Вдруг он усмехнулся и указал на экран:

— Ну вот, я так и знал. Здесь, в этом месте, везде должно быть True, а у тебя False.

Действительно, он был прав.

— В этом месте я просто реализовал спецификацию как есть.

— Что?

Я открыл файл спецификации, который также был сохранен на USB.

Затем указал на место, которое он критиковал, и объяснил:

— Если следовать спецификации, здесь и должно быть False. Если это ошибка, то ошибка в самой спецификации.

Я догадывался, где именно кроется проблема.

Но это уже не входило в мою компетенцию.

В мои обязанности, за которые мне платят, входило только кодирование.

Руководитель Ким ещё несколько раз перечитал спецификацию, долго и внимательно изучая, нет ли других ошибок.

— Не может быть. Ты правда написал такой объем кода за день и без единого бага?

Однако, похоже, он так и не смог найти ни одной ошибки.

— Признаю. Ты действительно отличаешься от остальных.

— Значит, я могу сегодня идти?

— Какое «сегодня»? Мы же договорились. С завтрашнего дня, как закончишь работу — можешь сразу уходить.

Сказав это, он снова погрузился в изучение моего кода.

— Ты реализовал эту часть вот так…?

Казалось, он был настолько поглощен моим кодом, что забыл обо всём на свете.

* * *

Автобус по пути домой.

Едва найдя свободное место, я достал из кармана смартфон и привычно запустил игру.

[Добро пожаловать в «Хроники Терасии».]

«Хроники Терасии».

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

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

Меня часто спрашивали, что в ней такого интересного.

Конечно, из-за маниакальной детализации и высокой сложности игра нравилась далеко не всем.

Но я не бросал её не из-за интереса.

«Как, черт возьми, они это разработали?»

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

Но с этой игрой всё было иначе.

Я играл уже три года, но до сих пор не мог даже догадаться, как она была создана.

Это стало делом принципа.

Пусть никто об этом не знает, но я сам не хотел сдаваться в этом противостоянии.

Так прошел третий год моего «аналитического» прохождения игры.

В тот момент, когда я почувствовал, что сегодня особенно сосредоточен, в голове что-то щелкнуло, словно проскочила искра.

Наконец-то я увидел ниточку, торчащую из этой безупречной игры.

«Это…»

Я не ошибся.

Эффект заклинания, примененного персонажем, отличался от описания.

Я провел тест ещё раз.

«В точно таких же условиях, как и раньше…»

Щелк.

Заклинание сработало, и результат снова был тем же.

«Каковы точные условия?»

Меняя различные параметры, я наконец смог определить природу этого явления.

Это баг.

Причем первый баг, который я нашел за три года игры в «Хроники Терасии».

Более того, я примерно догадывался о его причине.

«Конечно, чтобы быть уверенным, нужно увидеть код…»

Но описание явления я уже подготовил.

Теперь мне оставалось только отправить отчет об ошибке.

Я начал писать отчет, основываясь на собранных данных.

Кратко описал условия возникновения бага, его суть и предполагаемую причину.

[Отправить]

Как только я отправил отчет…

Бр-р. Телефон завибрировал, пришло уведомление.

Это был ответ от разработчиков игры.

«Уже?»

Слишком быстро.

Я уже было подумал, что это автоматический ответ, но, прочитав сообщение, пришел в замешательство.

— Здравствуйте, это команда разработчиков «Хроник Терасии». Мы внимательно ознакомились с вашим отчетом. У нас есть к вам предложение касательно этого бага.

Первая часть сообщения определенно была похожа на автоматический ответ.

Однако слово «предложение» в конце заставило меня насторожиться.

Я тут же отправил ответ:

— Какое предложение?

Ответ пришел так же быстро.

— Не хотите ли вы сами исправить это заклинание?

Что это значит?

Неужели то, о чем я думаю?

Дрожащими руками я набрал ответ:

— Вы хотите дать мне код?

— Мы сообщим вам, если вы согласитесь исправить заклинание самостоятельно.

Они явно что-то скрывали.

Это было подозрительно, но я ничего не терял.

Для меня получение даже крошечного фрагмента кода «Хроник Терасии» было огромной выгодой.

— Я согласен.

В ответ пришел не текст, а какой-то файл.

-[Прикрепленный файл]

«Что это?»

Сердце бешено колотилось, когда я осторожно открыл его, и экран смартфона заполнился кодом.

«Код?»

Я затаил дыхание от удивления, но ненадолго.

Вскоре я заметил нечто странное.

«Подождите, что это…»

Названия функций и переменных были необычными.

«Fire, Mana, Casting?»

Это был не тот код, который обычно используют в разработке игр.

Конечно, читая код, я примерно понимал, для чего он нужен.

Вероятно, это код того самого заклинания, в котором я нашел баг.

И они прислали его, чтобы я исправил ошибку.

Но «Что это вообще за язык?»

Тем не менее, он придерживался форматов, характерных для языков программирования, поэтому я понимал, что это код.

Однако конкретный синтаксис не совпадал ни с одним известным мне языком.

«Какой-то редкий язык?»

В любом случае, мне нужно было знать, что это за язык.

Поскольку общая логика была понятна, я бы как-нибудь справился, но работать, зная язык, и работать вслепую — это две большие разницы.

— Можете сказать, что это за язык программирования?

Ответ оказался совершенно неожиданным.

— Это просто магический язык. У него нет названия. Если вам нужно какое-то имя, то ML (ML) вполне подойдет.

Они что, сумасшедшие?

Собственный язык?

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

Теоретически это возможно, но если думать о совместимости и оптимизации игры, это абсолютно нерационально.

И всё же… мне это понравилось.

Разработчики «Хроник Терасии» должны быть именно такими.

— Спасибо за ответ.

Отправив сообщение, я немедленно приступил к кодингу.

Поскольку ML был самодельным языком без корней, ожидать наличия специального редактора кода не приходилось.

А это означало, что обычного приложения «Заметки» на смартфоне будет вполне достаточно.

«Так, сначала баг…»

Всё оказалось именно так, как я и предполагал.

Благодаря этому исправление не составило труда.

Но «Сейчас вижу, что проблема не только в баге».

Код местами был далек от идеала.

Конечно, это не был уровень «кодинга ногами», но для человека, который создал собственный язык ради игры, здесь было слишком много огрехов.

«Ну, работать-то оно будет…»

Вопрос оптимизации, так сказать.

Недочеты есть недочеты.

«Может, подправить ещё немного?»

На всякий случай я сохранил версию, где исправил только баг.

А затем начал вносить правки в другие части.

Бесполезные повторные вычисления.

Участки с риском бесконечного цикла.

Даже утечки памяти.

Я был так увлечен оптимизацией кода на смартфоне, что потерял счет времени.

Я так быстро стучал по клавиатуре смартфона…

Как вдруг кто-то постучал меня по плечу.

— Пассажир, пассажир…

Я поднял голову и увидел перед собой человека.

Это был водитель автобуса.

— А? Что?

— Конечная.

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

— Подождите секунду.

— Пассажир, вам нужно выйти…

— Подождите, пожалуйста. Мне буквально одна минута нужна.

Это была правда.

Я поспешно проверил оптимизированный код в последний раз.

«Опечаток вроде нет…»

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

В реальности это было невозможно.

В итоге мне оставалось лишь довериться коду, который я написал вручную.

[Отправлено.]

Убедившись, что файл ушел, я встал с места.

— Извините.

Я извинился и уже собирался выйти из автобуса.

Вдруг смартфон снова завибрировал.

— А?

Это был ответ от разработчиков.

— Впечатляет.

В сообщении было лишь короткое восхищение.

Конечно, я не ждал ничего взамен за отладку.

Но то, что они прислали только восклицание, меня озадачило.

Однако это было ещё не всё.

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

Способностях? Контракте?

Я был в полном недоумении от этих неожиданных слов.

«А?»

Внезапно зрение начало затуманиваться.

«Что за…»

1 2 3 ... 12
впередвперед