Skip navigation.
Home

О велосипеде с треугольными колесами.

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

В моем бизнесе, которым я зарабатываю себе на кусочек хлеба насущного и немного маслица сверху, тоже есть своя милая, профессиональная забава. Но в отличие от забав пролетариата сия забава является частью Священного Ритуала, и исполняется со всем возможным трепетом и прилежанием. Что за забава, спросите вы? Я отвечу: ничто так не любят в моем мире, как изобретать велосипед с треугольными колесами.

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

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

Существуют две основные технические причины (есть еще масса нетехнических), по которым проекты начинают валиться, еще не успев обзавестись хотя бы стропилами: причина первая - это кривая архитектура проекта, когда Главный Зодчий плохо понимал, что и зачем он делает, и причина вторая - это использование самодельных кирпичей. Вот про самодельные кирпичи я вам и расскажу сегодня.

Немецкий сумрачный гений и здесь показал себя во всей красе. Несколько лет тому на проекте я видел, как человек сам писал связанный список, потому, что не знал о существовании stl. Ну бывает, парень только неделю как из ВУЗа был, в конце концов мы все учились.

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

1. самопальный XML-формат с позиционно-значимыми полями. Т.к. как ни крути, а XML-файл надо валидировать, то к этому приделали еще и самопальный XSD-формат. В проекте по историческим причинам существует 4 (ЧЕТЫРЕ) диалекта этого языка, каждый используется в своем особом случае. В последнее время (вдруг, совершенно случайно) выяснилось, что необходимо во-первых, этот язык стандартизировать, сделав из четырех диалектов один, во-вторых необходимо написать конвертор из этого в классический XML (и, соответственно, наоборот). Попытка осторожно выяснить, почему бы нам не отказаться от наследия тяжелого прошлого и не использовать XML напрямую, успехом не увенчалась. После произнесения мантры: "Саша, уймись, тебе не за это платят" мне полегчало. Чтобы добавить перчику: это г...но в сочетании со вторым пунктом (см. дальше) производит 80 (восемьдесят) процентов баг-реквестов от пользователей.

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

2. А всерьез мне похорошело, когда я увидел, как люди сделали свой собственный аналог реляционной базы данных. Нет, никакого SQL ибо "мы решили, что SQL медленно работает". Никакого синтаксиса запросов: надо тебе запрос? Пиши класс запроса, отлаживай и пр. Если запрос типа Insert - не забудь вручную переиндексировать базу. Надо тебе удаление? загрузи всю эту базу в память, пройди по ней, найди то, что надо удалить, сделай копию всего, удали, дождись аналога commit- выгрузи измененную копию на диск. Предупреждая возможные вопросы: этот образчик стим-панка всасывает в себя 20 записей суммарным размером в 4 килобайта примерно минуту, время обработки растет как функция геометрической прогрессии от объема данных.

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

Да, последние два случая - это не вчерашние студенты. Это умудренные опытом отцы-командиры производства, обличенные властью и рулящие весьма некислыми бюджетами. Стратиги, я бы сказал.

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

Вот так и живем.