Итак, все ругают плохо написанный код. Давайте-ка посмотрим...
Если в коде много goto, возможно, программу перетащили с Фортрана; чем их больше, тем древнее версия.
Если в названиях идентификаторов присутствуют дикие сочетания букв, разбавленные подчёркиванием, возможно, исходно это был Фортран БЭСМ-6, где позволялись русские буквы.
Если все переменные в программе глобальные — скорее всего, программа «познакомилась» с третьей версией микрософтовского Фортрана, где надо было распихать переменные по 64-килобайтным common-блокам.
Если сишный код плохо отформатирован, скорее всего, код был знаком как с Борландом (три пробела на отступ), так и с Микрософтом (одна табуляция).
Если в коде на С++ много указателей на функции, значит, изначально код был сишным.
Если системные вызовы завёрнуты во множество вложенных «обёрток», которые просто перекладывают параметры из пустого в порожнее и ничего не делают, это годовые кольца: их столько, сколько платформ сменил продукт.
Если имена переменных совпадают с названиями регистров процессора, значит, кусок, написанный на ассемблере, пытались утянуть на другой процессор.
Если всё сказанное выше замешано в крутой коктейль с кусками вменяемого кода, значит, пытались рефакторить.
Если не используются очевидные фичи, значит, в исходном фреймворке их не было.
Если встречается эмуляция RTTI и интерпретируемого кода, в предках кода было что-то типа Клиппера.
Ну и, естественно, в коде присутствуют следы идеологической борьбы между разными фракциями программистов и архитекторов, следы модных некогда концепций из Прологa и Смоллтока, попытки имитировать одну платформу на другой...
Такая вот занимательная археология. Если прикинуть, в каких условиях нормальный человек может написать такую муть, много становится очевидным — даже убивать никого не хочется.
Есть у меня на обслуживании редакция местной газеты. Не так давно решили они закупить свежую верстальную программу известной корпорации, а затем позвали меня устанавливать это чудо профессионального дизайна и предпечатной подготовки.
Нужно сказать, что большинство сотрудников газеты давно уже переведено на права опытных пользователей, и я полагал, что с установкой свежезакупленной софтины админские права верстальщика уйдут в историю. Для установки потребовались полные привилегии — не проблема, для такого программного продукта это нормально. Первый запуск — и... английский интерфейс. Но устанавливалась-то русскоязычная версия! Копание в настройках и мануалах ситуации не прояснило. Запуск от имени... Ура! Это действительно русская версия! Пришла мысль перебросить файлы и ключи реестра программы от админа пользователю. Безуспешно. В спину дышит недовольный верстальщик.
Назначаю пользователю права администратора, переустанавливаю программу от его имени — кажется, языковый барьер исчез. Рано радовался: стоило вернуть пользователю обычные права, и снова мы увидели «File» вместо «Файл». Дизайнер остался админом, а у меня остался невысказанный вопрос: в какой стране это писали?
Я познакомилась с настоящим индусом. Правда-правда. Этот человек:
— пишет код в кадрах кадров кадров символов — парент парента парентом об парент;
— инициализирует переменные не там, где они используются (используются в первом, инициализирутся в 20-м кадре и на другом слое, но это фигня — работает же), называет максимум в три буквы (и функции тоже);
— никогда ничего не типизирует — зачем?
— знает кучу багов флеш-плеера, которые не встречаются обычным людям, и упрямо делает так, чтобы в проекте на них опять наткнуться (как?);
— при именовании придерживается своей логики: инстансы клипов — маленькими буквами, функции и всё остальное — большими. Констант не встречала — интересно, как он именует их?
— не форматирует код в принципе — а зачем? Между строчками может быть от одного до 15 переводов строки;
— может продублировать один и тот же код пару-тройку раз, в том числе и рядышком;
— делает вложенные функции (не забываем про отсутствие форматирования): три-четыре уровня вложенности найти в коде нетрудно.
При этом парень обладает абсолютной памятью, поэтому у него всё работает... до поры до времени. После того, как я правила его код, чувствую себя прошедшей посвящение в настоящие программисты.
Разбираем исходники программной системы для делопроизводства: надо перевести на русский и подправить кое-где логику под местные реалии. Не будем удаляться в частности, но код натурально индийский.
Разбирали — ругались, тем более что поддержка от разработчиков по емейлу была отвратительной. Немного зауважали авторов после того, как обнаружили, что они всё-таки способны к самокритике. Один из методов, посвящённый промышленному дизайну, был назван «Indus_Design».
Пятница. Полшестого пополудни. Магазин спускает на сервис ноутбук: розовенький Dell. Душа чует неладное. Просят накатать ось по-быстрому, до шести вечера. Ладно, берём флешку с «семёркой», за восемь минут ставим — а потом начинается квест.
Идём Эксплорером на сайт Dell за драйверами — он отважно предлагает качать тамошним даунлоуд-менеджером: оно, мол, оптимальнее. Ладно, качаем. Бравый менеджер говорит, что у нас, оказывается, нету интернета. Логично: мы через прокси работаем.
Качаем Файрфокс: канал широкий, всё тянется быстро. Подкидываем ссылку — наблюдаем ту же картину. Грустно.
Тянем Оперу. Она честно начинает пытаться что-то делать, в самый ответственный момент пишет, что не может соединиться с FTP-сервером Dell, но отдаёт директ-линк на искомый драйвер, который мы тотчас же скармливаем Огнелису.
Ребята из техподдержки Dell, если вы читаете это, вы знаете, что делать с разработчиками даунлоуд-менеджера.
C удовольствием читаю IT happens, но заметил пару характерных тенденций. С одной стороны, часто жалуются на монструозный индусский код и блондинистых быдлокодеров; с другой стороны, не менее часто хвастаются так называемым студенческим товариществом: написать программки или раздать исходники целой группе. Неужели это одни и те же люди? Неужели никому не приходит в голову, что первое — следствие второго?
Руковожу я маленькой, но гордой фирмой: занимаемся поставкой за рубеж всякого веб-контента. Сдаём один крупный проект, одна из частей которого — модуль интеграции с CMS. Вроде всё работает, но постоянно висит ошибка, что мы что-то в стилях намудрили. Четыре дня сидели, ломали голову, лопатили сотни страниц кода — ничего. Программисты уже решили от проекта отказаться, у клиента истерика.
Тут меня осенила идея. Глупая, безумная — но терять уже нечего. Дали мы системе все файлы, которые она просила, но пустые. Шестнадцать файлов подряд. Заработало! Проект сдали, деньги получили, но осадок остался: кому-то потом это всё после нас ковырять.
Пишу скрипт на PHP. Почему-то на сервере не работает array_unique() — не удаляет дубликаты из массива. Локально — да, на сервере — не до конца. Курю мануалы, форумы — не помогает. В каком-то безысходном порыве решаю вставить в код второй array_unique(). Чудо: дубликаты удалены! Смотрю на конструкцию:
И вы удивляетесь, что индийский код работает? Не надо. Причина проста: они его благословляют.
void h(ne) {return ra/rn}; //----------------------- //Pray all your gods to //make this work and //be careful with //debugging //Abdul Rahman Krishnaswami //------------------------
Если Кришна с нами, то и успех будет всегда. Меняем бубны на чётки — и в бой!