Богатырёв Андрей Сергеич: другие произведения.

Программистская жизнь.

Журнал "Самиздат": [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь]
 Ваша оценка:
  • Аннотация:
    По мотивам реальных событий. Будет понятно только тем, кто разумеет в языке программирования Си, язык здесь - главный герой.

Картинка из жизни наёмного программиста в филиале крупной компании.

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

- А где ошибка-то?

- А вот она:

    int A[5];

    for(x=0; x <= 5; x++)
        A[x] = f(x);

происходит выход за границу массива на 5-ом шаге и всё рушится в core.

- Ага!!! Тут надо...

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

Я думал, что правка будет проста и изящна. Нужно-то всего:

    for(x=0; x < 5; x++)
        A[x] = f(x);

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

Поступивший к вечеру код выглядел так:

int A[5];

int FIXEDCODE(unsigned int x){
        int a = x & 0xFFFF;
        int b = (x >> 16) << 16;
        int c[666], i, ii, iii;
        int w = rand() % 666;

        for(i=0; i < 666; i++)
                c[i] -= c[i];
        c[w] = (a | (b^a^a));
        for(ii= -7777; ii <= 7777; i=i+22/11/2, iii <<= 1)
                if(ii==0){
                        return c[w];
                        goto a1;
                }
a1:
        return(((c[0]) + c[13]));
}

int f(int x){
        return (((x+1)));
}
main(){
        int x, y;
        A[0+0*0-(132<<8) * 0 & 72] = f(12-12);
        for(x=1, y=5; x <= 5 && y + 1 >= 0; x += 1, y -=2){
                A[FIXEDCODE(x)] = x^y ? f(x) : f(x);
        }
        ...

- Ой, - сказал я. - А можно я приведу это к человеческому виду? Чтобы код был короче и
читабельнее.

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

- Но этот код с очевидностью можно сделать лучше...

- У нас в программах есть масса мест, где код можно хоть как-то сделать лучше.
Что ж нам - бросить всё и заняться вычисткой кода? Ради собственного удовольствия?
Нас ждут заказчики и большие деньги за проплаченные ими контракты.
Ну скажи, ЗАЧЕМ менять этот код? Он и так работает. Ну, сделаешь ты его чуть-чуть проще
и изящней - много от этого будет толку? Мы должны придерживаться принципа "минимум изменений".
К тому же, этот код уже оттестировали на всех машинах Базы, а если ты внесёшь изменения - его
надо будет тестировать заново. Сколько новых хлопот людям! Отнятые от игры в тетрис машины.
А разницы - никакой. Работает? Да. И зачем его тогда менять???

- Ну... но вот хоть это-то место - A[0+0*0-(132<<8) * 0 & 72] = f(12-12);
Тут выражение в [] скобках сразу же сворачивается в нуль. Зачем нам тратить байты памяти
и иметь плохо читаемый код?

- Ну, памяти-то в наших замечательнейших машинах - хоть отбавляй! А код этот поместил сюда
сам Япона-сан, который затратил столько сил на поиски вашей ошибки. Что же, мы будем
обижать человека? Нет, теперь это стало политическим вопросом - людей обижать нельзя.
Какое значение имеет качество кода по сравнению с радостью сотрудников и осознания ими
выполненного перед фирмой долга? Нет, нет, я не вижу никаких причин менять этот код!
Он никому не мешает, всё работает отлично. Нет, нет, это - ОДОБРЕННЫЙ код.
Давай, подбери его как есть. Ну, может, в следующем тысячелетии поправим, так и быть.

- В сле...

- И учти ещё. Мы тут собрались делать нашу работу и делать её быстро и с удовольствием.
Мне работу поручили - я сделал, быстро и с удовольствием. И не порть мне удовольствия!
Тем более, что мне за срочную хорошую работу выдадут для удовольствия денежное поощрение
с занесением в личное дело и предложат отличную должность на Базе... Ямэ!!!

 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
И.Арсенов "Сен.Следующий шаг" Е.Руденко "Незримого начала тень" В.Горъ "Проклятие короля" Е.Ковалевская "Клирик" В.Пекальчук "Долина смертных теней" С.Бадей "Верить предсказанному?" Я.Тройнич "Леди-жрица" И.Дравин "Чужак.Мэтр" А.Афанасьев "Подлецы и герои" К.Измайлова, А.Орлова "Пятый постулат" П.Миротворцев "Искусство Мертвых" В.Рощин "Команда ликвидаторов" Д.Север "Бордо,Рокфор и Шаризо" Ю.Погуляй "Братство Чародеев" Н.Щерба "Часодеи.Часовое сердце" О.Батлер "Моя маленькая Британия" А.Спесивцев "Атаман из будущего.Огнем и мечом" А.Михалев "Московская магия.Первая волна" В.Поляков "Мистик" К.Запорожан "Темный Город" Н.Бульба "И осталась только надежда" Р.Витич "Код Альфа" Н.Кузьмина "Попала!" Ш.Врочек "Рим.Кн.1.Последний легат" Д.Манасыпов "Район.Возвращение" С.Малицкий "Пагуба" А.Колентьев "Радиоактивный ветер" А.Нейтак "Контрмеры" Ю.Фирсанова "Час Д" Ю.Иванович "Нирвана" В.Кононюк "Шанс?Параллельный переход"

Как попасть в этoт список

Сайт - "Художники"
Доска об'явлений "Книги"