Скитания привели её к залам аббатства, где обитал клан Горького Дыхания Волка, монахи которого в чёрных одеяниях выполняли всё интеграционное тестирование в Храме. Разработчикам было запрещено появляться в этом месте, хотя никто и никогда не говорил Хвайде почему. Как и все тайны, эта беспокоила её. Она пряталась в тени перегородок и дверей, надеясь узнать некий шокирующий секрет Храма, но всё, что она слышала от монахов в чёрных одеяниях, было громкими шутками на счёт тех разработчиков, чей код содержал ошибки. Большинство этих разработчиков были из клана Паука, клана Хвайды.
"Это бесит меня больше всего", - услышала она жалобу одного из монахов клана Горького Дыхания Волка. - "Я устанавливаю состояние заказа в 'Неизвестно', отправляю форму и всё выглядит хорошо. Но когда я возвращаюсь к этой форме, то возникает сообщение о некорректном состоянии заказа. А разработчик клянётся, что ничего не менял на странице!"
"Так всегда происходит с кланом Паука", - вздохнул другой голос. - "Если что-нибудь попадает к ним в руки, то они заворачивают это в восемь слоёв JavaScript, калечат отзывчивость, высасывают всю полезность и заявляют, что этот дёргающийся труп - хорошо выполненная работа".
Их смех преследовал Хвайду, пока она пробиралась к выходу из аббатства. "Я непременно должна с этим разобраться," - подумала она, сжимая кулаки.
Позже Хвайда подошла к учителю Банзену с огнём праведного гнева в глазах и с распечатками в руках.
"Эта ошибка была привнесена монахом клана Следа Слона, а не нами. Он переписал метод, преобразующий каждую строку базы данных в объект, и его новый код содержит вот это"... - она постучала пальцем по строке со следующим кодом:
order.setStatusCode(rs.getInt(STATUS_CODE));
"А", - сказал Банзен. - "Я до этого много раз видел такие ошибки. Это свойство имеет тип
Integer
, чтобы была возможность хранить null
. Но в JDBC API метод getInt
возвращает примитивный тип int
и незаметно преобразует NULL
из базы данных в 0
, который незаметно преобразуется в объект при вызове метода setStatusCode
и возвращается методом getStatusCode
при заполнении формы. А поскольку нет такого состояния заказа 0
, строка базы данных становится неверной"."Как будет наказан монах клана Следа Слона?" - спросила Хвайда.
"Ничего смертельного", - сказал Банзен. - "Моё обычное наказание с использованием лодки, которую я держу для такого случая в южном ущелье. Монах вернётся в синяках и мокрым, а в будущем станет изучать API перед использованием более внимательно".
Лицо Хвайды налилось кровью: "А как же честь клана Паука? Из-за этого монахи клана Горького Дыхания Волка открыто издеваются над нами в своём аббатстве!"
Тут она замерла, осознав, что проговорилась о своём посещении запретной территории, но Банзен только вздохнул.
"Истинная вина лежит на авторах почтенного JDBC API и на каждом инженере сопровождения", - сказал учитель. - "Они дали монаху удобную лодку с крепкими веслами, уже установленными в уключины. Должны ли мы погубить его только за то, что он не заметил, что левое весло слишком короткое? Нет... Хватит и того, что он вымокнет, когда лодку закрутит на порогах".
Хвайда закусила губу, почтительно поклонилась и повернулась, чтобы уйти.
"Моя маленькая монахиня", - сказал Банзен, подняв указательный палец, чтобы остановить её. - "Это не моя ошибка и я не могу предотвратить проблемы, которые она создаёт. Но я делаю так, чтобы и ошибка, и проблемы послужили великой цели".
На ужине Йывень снова отсутствовала, но Хвайда заметила двух молодых учеников Банзена, сидящих вместе. Джишин и Сато согласились выслушать её жалобы на своего учителя.
"Кажется, Банзен решил терпеть эту ошибку до конца времён!" - раздраженно закончила Хвайда. - "Мы должны дать клану Следа Слона лучшую лодку!"
"Да ну!" - сказала Сато. - "Когда я узнала об этой ошибке, я предложила учителю переключиться на популярный ORM. Но у рефакторинга свои издержки, а у каждого инструмента свои опасности, поэтому код низкого уровня остаётся".
"Тогда мы должны сделать наше собственное весло!" - сказала Хвайда.
"Да ну!" - сказал Джишин. - "Когда я узнал об этой ошибке, я написал подходящий вспомогательный метод
getInteger
. Но разработчики ищут только то, что как они думают им необходимо, и то, что они знают как искать, поэтому мой метод практически не используется".Хвайда погрузилась в отчаяние: "Таким образом, монах клана Следа Слона будет слегка наказан, а монах клана Горького Дыхания Волка не будет наказан совсем. По крайней мере, несчастная Хвайда была наказана. И сейчас я понимаю, почему запрещено входить в логово Волка: чтобы поддерживать гармонию между нашими кланами. Жалоба может стать оскорблением, только если она подслушана".
Джишин сказал: "Вы воспринимаете движение вёсел над водой, но Ваш истинный курс определяется тем, что находится внизу".
Сато продолжила: "Наш учитель знает, что Вы нарушили запрет. Но запрет не его и он не может предотвратить его нарушение неудержимым любопытствующим. Таким образом, он делает так, чтобы и указ, и его нарушения послужили великой цели".
Сато положила по-товарищески руку на плечо Хвайда: "Приятного аппетита, сестра клана Паука! Ибо я опасаюсь, что твоё наказание только начинается"...
Original: What Lies Beneath