bash.im ithappens.me zadolba.li

Индийский код

4254

Портнихи — налево, кодеры — направо

Вчера был на дне открытых дверей в учебном центре одного крупного производителя софта для зарубежных заказчиков. В начале презентации нам раздали пакеты с атрибутикой. Кроме дисков и рекламной мишуры, в пакете присутствовала маечка с логотипом той самой компании. Глянув на ярлычок, я долго не мог прийти в себя. Сбила меня с ног надпись: «Произведено в Индии».

4146

Наиндусячил

Бывший одноклассник, нынче студент Бауманки, поведал историю о том, как сдавал лабораторную на «сях».

Зовёт препода, просит посмотреть. Тот вбивает циферки и запускает. Прога выдаёт строчку, записанную отчасти для дебага и отчасти для прикола — выпасть она могла только в практически невозможном случае. Строчка была такой:

Unknown error. Program is bad. Coder is Indian.

4098

Безопасность без забот

Наткнулся в коде страницы с формой логина на такую функцию:

function check() {

if (document.login.user.value == "user" &&
document.login.password.value == "correct_password")
    window.location.href = 'http://this.site/login.html';
else
    window.location.href = 'http://this.site/loginfehler.html';

return false;
}

4086

Священные скрижали

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

Записать диск мне так и не удалось. Решил тщательно рассмотреть упаковку, чтобы запомнить производителя. Что бы вы думали? «Сделано в Индии».

3945

Ай да фокус

Вот и дошла очередь до индусов на IT happens. Коли холиворы «Linux vs. Windows» и «программисты vs. бухгалтеры» себя исчерпали, подкину свою вязанку хвороста в огонёк нового тренда.

Вот уже пару лет я по долгу службы занимаюсь работой с удалёнными командами. Попалась и команда из славной и могущественной страны Индии. Итак, задача: написать веб-страничку для айфона, которая будет выглядеть, как родное приложение. Казалось бы, есть jQTouch — садись и пиши код. Но наши ребята не робкого десятка!

После пары дней курения благовоний индусы выдают страничку логина. На айфоновский интерфейс совсем не похоже. Первое, что бросается в глаза: часть экрана занимают огромные надписи «login» и «password», которые должны выводиться прямо в полях ввода и исчезать, как только пользователь начинает что-нибудь вводить. Просим убрать и сделать «как там». Ещё день курения благовоний. Теперь текст внутри поля, но нужно его сначала удалить буква за буквой, чтобы ввести свой логин. Просим «как-то поправить». Ещё через день появляется апдейт, где надпись правильно исчезает, но как только пользователь убирает фокус, любой текст заменяется на слово «login». Теперь войти в систему не просто сложно, а вообще невозможно. А ведь задача решалась дополнительным параметом HTML-тега...

Может, они «великие и могучие», но на качестве кода 2000-летние родословные не сказались. Пускай уж лучше концентрируются на чём-нибудь другом, как, к примеру, Египет: история ничуть не хуже, но опыт строительства пирамид на ПО местные программеры не переносят.

3942

Индус индусу рознь

Говорите, не уважаем мы индусов, унижаем князей с двухтысячелетней родословной и вообще историю не знаем ни разу? Да, не уважаем.

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

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

...и ещё множество госорганизаций и компаний, равномерно растянувшихся по списку Fortune 500. Во многих из этих компаний в IT-департаментах трудятся индусы. Разрабатывают решения, администрируют, поддерживают. Когда что-то случается не так — обращаются к нам, а мы разбираем их авгиевы конюшни.

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

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

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

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

Да, именно они договариваются о веб-конференции, на которую почти всегда вместо них является другой индус.

Но знаете ли вы, какие именно индусы так делают?

Мы — знаем. Смотрим на имя очередного индуса и сразу понимаем, чего ждать. Тамильские имена — они ведь как паспорта и родословные в одном флаконе: если имя короткое, в сумме до шести слогов, то перед нами потомственный трудяга, быстро соображающий и готовый воспринимать сложную информацию. Пару раз на грабли наступил — и больше «индийский код» не генерирует. А если, не приведи Кришна, гласных в имени двадцать-тридцать, то это потомственный князь или, того хуже, жрец. Знания — в объёме индийского IT-техникума (два года), гонору — за всю родословную (две тысячи лет), желание изучать что-либо новое отбито в пятидесятом поколении. Вот этих князей мы как раз и не любим, будь их прапрапрадедушка хоть самим Икшваку.

3928

Дорасти до индуса

«Индийский код» — выражение, ставшее уже ругательно-нарицательным. Так и вижу самого-самого гениального программиста, конечно же, русского, с бездной знаний, насмешливо-презрительно цедящего сквозь зубы: «А-а-а, па-а-анятно — индийский ко-о-од». Пока что мне известно очень малое количество программ, наваянных русскими гениями, которые действительно работают без проблем и глюков. Прямо скажу — количество их стремится к нулю. А Индия, между прочим, уже за 6000 лет до нашей эры была наиболее развитым, могущественным и культурным государством мира, с мнением которого считались все остальные. Знания в области медицины, математики, астрономии, физики и природопользования, открытые только в нашем тысячелетии, индийцы имели уже тогда, чему есть множество подтверждений в их древних книгах. Культура Индии задавала тон миру. Индийские князи имеют 2000–2500-летние родословные. А кем были ваши предки 2000 лет назад? Пастухами?

Не стоит строить из себя то, чем не являешься и ругать то, о чём мало знаешь. Если знаешь лучше — сядь, напиши идеальную программу. Если сможешь.

3663

Абстракцион невиданной тупости

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

Все знают, что хорошим стилем написанием сайта является отделение кода от дизайна. Но то, что я увидел в самописной CMS, детище прошлого PHP-кодера, повергло меня в тихий ужас:

$karkas=tr(bgcolor("D9EDFB"), td(w("1%").style("").valign("top"),br()).td(valign("top"), hr(noshade().size(1).color("D9EDFB")).table(cs(0).cp(10).border(0), tr(no(), td(no(), 'текст'...

Каждый HTML-тег со всеми атрибутами был переопределён в отдельную функцию со своими параметрами. Нашлось место даже для замечательной функции br().

На десерт я увидел структуру БД. Попавшаяся мне CMS (если этот шедевр быдлокодирования можно назвать столь гордой аббревиатурой) работала всего от одной таблицы, в которой наблюдалось штук тридцать колонок с названиями: «tp0», «tp1», «bd0».

Оторвите руки этому кодеру или скажите, где его найти, — справлюсь и сам.

3594

Через тернии к const'ам

Получил техзадание по «жёлтенькой восьмёрочке». Вкратце: надо перебрать всю базу по некоторым условиям, выгрузить это всё в таблички определённого формата и перекинуть на FTP. Есть там один элемент, ссылка на который берётся из константы. В общем, после пятнадцатого запроса с кучей соединений дохожу до места, где используется этот элемент, пишу запрос к нужному справочнику с условием: элемент, который запрос должен получить из справочника, равняется элементу из константы. Отлично — работает.

На следующий день открываю код и вижу это. Восемь строк кода, не считая самого запроса, заменяются банальным «НужныйЭлемент = ЭлементИзКонстанты». Нефиг забивать гвозди микроскопом!