Индусский код
/** * For the brave souls who get this far: You are the chosen ones, * the valiant knights of programming who toil away, without rest, * fixing our most awful code. To you, true saviors, kings of men, * I say this: never gonna give you up, never gonna let you down, * never gonna run around and desert you. Never gonna make you cry, * never gonna say goodbye. Never gonna tell a lie and hurt you. **/
![]()

![]()

Индусский код (в среде программистов 80х также известен как Glitch) — в самом общем случае, это криво написанный, но каким-то удивительным образом работающий код. Индусский код написан наиболее неочевидным и неестественным из всех возможных способов. Именно этим он и отличается от быдлокода, который хотя бы капельку очевиден и сделан, хоть и по детсадовским, но по правилам.
По другой трактовке, индусский код — жаргонное нарицательное название для программного кода крайне низкого качества, использующего простые, но порочные принципы «copy-paste», «главное — завалить, а там запинаем», «шапкозакидательство». Также известен как «write only», или (в пику принципу «написано однажды — читается везде») — «написанное однажды — лучше не читать».
Содержание
Почему именно индусский

![]()

В Индии с некоторых времен существует практика оценки производительности труда программиста на основе количества написанного кода. Чем больше кода, тем больше программист работает, и, следовательно, выше его оклад. Шустрые индусы быстро сообразили, как обманывать неквалифицированных заказчиков.
Менее очевидный вариант:
И особенно весело получается, когда где-нибудь вверху скромно стоит
Ну и уж совсем замечательно, когда
Также аутентичный индусский код пишется на хинди и транслитерируется в C, C++ или Java. По некоторым сведениям, индусский код поют и танцуют, и только потом записывают на хинди. Есть народная примета: если программист поёт и танцует — значит, он написал индусский код.
Также при частой работе с этими «спецами», фраза «The only good Indian is a dead Indian» обрастает новым смыслом.
कोड में टिप्पणी — यह है कि उसने क्या कहा डिबगिंग के दौरान प्रोग्रामर , так-то!
![]()
![]()

Индусский дебаггинг
Частично является разновидностью индусского кодинга. Суть заключается в том, что при дебаггинге индус убирает видимое проявление проблемы, а не саму проблему (он её даже и не пытается искать). Например:
При чтении одного конкретного ре́корда из базы прога падает в функции CalculateTaxes с ошибкой переполнения.
Человеческий фикс Индусский фикс
Примеры индусского кода
Не сразу можно понять, что в этом коде просто-напросто выполняется проверка 0 <=i <10 . Алгоритм достаточно прост: выполняется преобразование i в строку, после чего вычисляется её длина. Если число больше 9, то его десятичная запись содержит больше одного символа. Поскольку отрицательные числа переменная типа uint содержать не может, то проверку успешно проходят лишь числа от 0 до 9. Строка же, полученная из отрицательного числа, состоит как минимум из знака ‘-‘ и одной цифры, поэтому проверка справедлива и для знаковых целых (int). Алгоритм ресурсоёмок, неочевиден, и не поддаётся сопровождению даже теоретически.
Далеко не сразу можно понять, что этот код выделяет дробную часть произведения a*b. Кроме того, функция выдаст ошибочное значение при a*b>999999999 или a*b<0. Также зависимость времени выполнения от величины целой части тоже не радует. К тому же, компилятор выдаст ошибку о несовпадении типов.
Хотя в данном случае алгоритм вполне очевиден, не менее очевидно и то, что для его выполнения конструктор класса string будет вызван не менее десяти раз (т.к. любое изменение класса String в C# приводит к созданию нового экземпляра и передачей старого экземпляра сборщику мусора) со всеми вытекающими из этого последствиями. И всё только потому, что какому-то индусу было лень придумать менее ресурсоёмкую альтернативу.
В случае множественных замен надо использовать StringBuilder.Replace(), а в данном — int.TryParse(). Не изобретайте велосипед! Кроме того, сам алгоритм содержит ошибку: он будет некорректно обрабатывать отрицательные числа. Добавление еще одного Replace(«-«,»») к win не приведет, функция может вернуть труъ для строки «-«.
В этом примере проверка истинности значения логической переменной производится с помощью длины её текстового представления. Если длина равна четырём („True“), значение истинно, если пять („False“) — ложно, если ни то, ни се — тогда включаем panic mode и начинаем жарить карри. Правда злобный компилятор вяло ругнется ворнингом. Но какой дурак их читает?
Кроме привычной нам логики с двумя значениями (ложь и истина), существуют так же и другие логики. Примером может служить логика, основывающаяся на доказуемости теорем. Несложно заметить, что из не недоказуемости теоремы не следует ни её доказуемость, ни её недоказуемость (теорема может быть не разрешима в данной системе аксиом). Так что возможно в коде автора есть глубокий расчёт на будущее, но это вряд ли.
Алсо, кошерный вариант примера доставляет не меньше:
В этом примере проверяется, какое действие нужно выполнить. Вместо того чтобы создать одну переменную со значением следующего действия, создается три «быдлокодерских» переменных.
К тому же, это пример ужасного стиля именования переменных, containing as английские слова, так и transliterated russian ones. Видимо, сказался author’s poor английский словарный запас.
На этой странице есть ссылки на страницу Индус. Если перейти на эту страницу, то Вы окажетесь опять же здесь. Пожалуйста, не правьте эти ссылки — они сделаны специально для примера.
Индусский код и китайский код

Тут, если непонятно, вся конструкция if-else — лишняя. Величина задана в лоб, делать ветки в зависимости от неё — бессмысленно.
Я всем (двум людям) этот код показал, посмеялся, а потом обнаружил, что это магия, а не индусский код. Дело в том, что я смотрел код в контексте проекта, и это число — 480 — видел только в контексте данного проекта. В других проектах, с другими размерами в Project.xml, это число будет другим. В исходном коде библиотеки вместо числа стоит ::WIN_HEIGHT. Это такие макросы, Карл!
Отсюда мораль — не спеши смеяться, последним будешь. Или — хорошо смеётся тот, кто смеётся над собой.
PS: китайский код — это брутальное решение алгоритма без использования циклов, массивов и прочих изящных конструкций. Строк получается тоже много. Но главное отличие от индусского, что все они рабочие, просто тупые. Пример китайского кода — когда вместо одной строки
var a = new Array[12,24,36,22];
все пишется так
var a1 = 12;
var a2 = 24;
var a3 = 36;
var a4 = 22;
// Тут надо добавить еще 10-15 таких же переменных, чтобы код приобрел законченный китайский вид 🙂
Индусский код
Пример № 1 (C#)
uint i;
.
if (i.ToString().Length == 1)
<
.
>
Не сразу можно понять, что в этом коде просто-напросто выполняется проверка i < 10. Алгоритм достаточно прост: выполняется преобразование i в строку, после чего вычисляется её длина. Если число больше 9, то его десятичная запись содержит больше одного символа. Отрицательные числа переменная типа uint содержать не может. Проверку проходят лишь числа от 0 до 9.
Алгоритм ресурсоёмок, не очевиден и не поддается сопровождению даже теоретически.
[ Еще чуток ]
Пример № 2 (C#)
double rest(float a, float b)
if (i<=res && i+1>res)
return res;
>
Далеко не сразу можно понять, что этот код выделяет дробную часть произведения a*b. кроме того, функция выдаст ошибочное значение при a*b>999999999 или a*b<0. Также зависимость времени выполнения от величины целой части тоже не радует.
Пример № 3 (C#)
bool IsNumber (string str)
<
return (str.Replace («0», «»).Replace («1», «»).Replace («2», «»).Replace («3», «»).Replace («4», «»).Replace («5», «»).Replace («6», «»).Replace («7», «»).
Replace («8», «»).Replace («9», «»).Length == 0);
>
Хотя в данном случае, вообще говоря, алгоритм вполне очевиден, не менее очевидно и то, что для его выполнения конструктор класса string будет вызван не менее десяти раз, со всеми вытекающими из этого последствиями. И всё только потому, что какому-то индусу было лень придумать менее ресурсоёмкую альтернативу.
Пример № 4 (C#)
bool value;
…
if (value.ToString().Length == 4)
<
.
>
else if (value.ToString().Length == 5)
<
.
>
else
<
// внимание! кто-то хочет нас наебать подсунув некачественный (по всей вероятности, протухший) bool, но мы ему не дадим:
throw new ArgumentException();
// у некоторых племенных индусов бывает и продолжение, на случай если throw вдруг не сработает:
return !true && !false;
// надо же вернуть какую-нибудь хуйню, чтобы заказчик не ныл.
>
В этом примере проверка истинности значения логической переменной производится с помощью длины её текстового представления. Если длина равна четырём („True“), значение истино, если пять („False“) — ложно, если ни то, ни се — тогда включаем panic mode и начинаем жарить карри.
Пример № 5 (PHP)
if ($_POST[«end_oplata»]!=»sending» and $_POST[«continue_oplata»]!=»prodoljit» and $_POST[«prov»]!=»proverka») <
.
>
elseif ($_POST[«continue_oplata»]!=»prodoljit» and $_POST[«prov»]!=»proverka») <
.
>
elseif ($_POST[«continue_oplata»]==»prodoljit») <
.
>
В этом примере проверяется, какое действие нужно выполнить. Вместо того, чтобы создать одну переменную со значением следующего действия, создается три «быдлокодерских» переменных.
К тому же, это пример ужасного стиля именования переменных, containing as английские слова, так и transliterated russian ones. Видимо, сказался author’s poor английский словарный запас.
TurDuckEn Code — разновидность быдлокода, чаще всего встречающаяся в веб-приложениях. Как спагетти-код, только хуже. ТурДукен (en.w:Turducken) — декадентская расовая пиндосская нямка, cостоящая из индейки (turkey), нафаршированной уткой (duck), зафаршированной курицей (chicken).
Турдукен Код, например, состоит из PHP, фаршированным SQL, нафаршированным HTML, зафаршированным Javascript’ом. Вот так.
Почему именно индусский
В Индии с некоторых времен существует практика оценки производительности труда программиста на основе количества написанного кода. Чем больше кода, тем больше программист работает, и, следовательно, выше его оклад. Шустрые индусы быстро сообразили как обманывать неквалифицированных заказчиков.
[ И еще примерчик ]
Говорят что программистам из Индии деньги платят за количество строчек кода которые они написали(редко обращая внимание на качество).
Вот пример одной из конструкций:
if ($x == 0) <
// Do 1.
>
elseif ($x!=0) <
// Do 2.
>
else <
//
// А вот здесь чистые деньги 🙂
//
>
Как в действительности устроено индийское IT: 4,5 миллиона сотрудников и не так уж много индусского кода
Вам никогда не было интересно, как на самом деле обстоят дела в Индии с IT? Откуда все эти шутки про индусский код и что за ними стоит? Как на самом деле работают разработчики в Индии и как на их работе отражается кастовая система и местная религиозность?
Чтобы заглянуть в эту во многом непонятную страну мы пообщались с IT-директором из Индии. Она приехала в Бангалор, «индийскую Силиконовую долину», чтобы открыть здесь филиал российской аутсорс-компании. И расскажет, как на самом деле обстоят дела с IT в Индии: где работают местные программисты, почему их ценят во всем мире и как индийский менталитет влияет на их работу.
Привет, меня зовут Александра, и я уже 7 лет живу в индийском городе Бангалоре. В России я работала в компании, которая часто занималась аутсорс-проектами для зарубежных заказчиков. И в 2015 году мы решили открыть офис в стране, где легко найти англоязычных программистов — в России с этим сложности.
Мы выбирали между тремя странами: Китаем, Вьетнамом и Индией. И Индия победила по нескольким причинам:
Большое число англоязычных специалистов. Английский в Индии — один из официальных языков. Его знают очень многие, и практически все IT-специалисты говорят на нем свободно. Большинство других стран похвастаться этим не могут.
Развитый IT-сектор. В последнее время Индия сделала значительный рывок в сфере IT. Сюда одними из первых приходят все новые технологии из США. Сначала Индия, а потом другие страны. Какой бы новый стэк не появился, в Индии вы найдете специалиста, который уже с ним работает, а вот до России эта технология дойдет только через некоторое время.
Здесь открыты офисы Google, Microsoft, IBM, Intel, Accenture, Cisco, Adobe, Apple, SAP и других крупных компаний. Особенно это относится к Бангалору — сюда с удовольствием переезжают IT-инженеры со всей страны.
Не слишком высокие цены. В Индии приемлемые расходы на офис и прочие сопутствующие работе вещи. Разработчики тоже обходятся не так уж дорого — уровень зарплат у них сейчас примерно как в России. В 2015 был чуть ниже, но даже учитывая рост, филиал здесь обойдется дешевле, чем где-нибудь в Европе.
Огромное число инженеров. В Индии около 4,5 миллионов людей заняты в IT-секторе. Мне кажется, что даже если во всем мире закончатся IT-специалисты, то Индия будет последней страной где это произойдет. Да, среди такого большого числа попадаются не самые квалифицированные. Но и крутых ребят тоже очень много.
Проанализировав все факторы, мы приняли решение в пользу Индии и в частности города Бангалор. Поэтому я приехала сюда открывать офис, все организовала и осталась в нем в качестве директора.
Бангалор — третий по величине город в Индии и столица штата Карнатака. Здесь открыто много технических университетов, и молодежь со всей Индии приезжает в Бангалор учиться. А потом остается, чтобы найти работу, так как выбор работодателей огромен, много стажерских программ и вакансий для джуниоров.
Еще в 1984 году здесь стали открывать филиалы компании из США — их привлекло большое число квалифицированных инженеров и низкие цены на разработку. И вслед за этими компаниями постепенно подтянулись другие, превратив Бангалор в индийскую Силиконовую долину.
Сыграло роль и то, что в Бангалоре в целом неплохо — тут приятный климат, приемлемые цены и хороший уровень жизни. Например, когда зарубежные компании открывают офисы, в Дели или Хайдерабаде, туда сложно затянуть экспатов, меньше желающих переезжать работать и делиться опытом. А вот в Бангалор едут с удовольствием. Поэтому многие иностранные компании переносят свои хэдофисы из Дели именно в Бангалор. Такая история произошла с компанией ИКЕА — они открылись в Дели, но потом перенесли офис в IT-столицу.
Текучка кадров. В Индии считается нормальным менять работу — иногда на улице даже висят билборды с пропагандой смены места работы и поиска варианта получше. Чтобы удержать сотрудников, необходимо грамотно выстраивать процессы, с учетом местных особенностей рынка труда и законодательной базы. Например, здесь принято в обязательном порядке каждый год повышать зарплату на 10%.
В Индии свои особенности рекрутингового процесса. Например, здесь «notice period» не 14 дней, как в России, а от 30 до 90. То есть от момента принятия оффера до выхода на работу может пройти три месяца. И конечно, нет никаких гарантий, что в течении этого времени ваш основной кандидат не передумает Популярна опция «Buy out» — можно заплатить компании зарплату сотрудника за оставшиеся дни, чтобы он сразу перешел работать к вам, как бы выкупив его.
Еще в Индии обязательно есть «Joining bonus» — сумма, которую сотруднику платят в первый месяц работы, помимо зарплаты. Это может быть 300$, а может и 2000$, в зависимости от должности и возможностей компании.
Здесь нет NDA на зарплаты — кандидаты открыто говорят сумму заработка на последнем месте работы, предоставляют подтверждающие документы и озвучивают свои пожелания и ожидания будущего дохода.
Любовь к дипломам. Индийцы очень любят коллекционировать дипломы и сертификаты. Здесь у многих есть диплом MBA — причем такой выпускник может работать в колл-центре с зарплатой 300$. На собеседованиях все очень обижаются, если в расчет берут только релевантный опыт, а на дипломы не обращают внимания.
Религиозность влияет на работу. Здесь три основных религии: индуизм, христианство и ислам. И важно, чтобы сотрудник мог взять выходные на свой религиозный праздник. Индуист, например, может отказаться от выходного в Ид, но попросит дополнительный день на Дивали.
Сильно развит микроменеджмент. В России люди более самостоятельные и проактивные. А индийцы привыкли работать по четким инструкциям и прописанным шагам, брать на себя ответственность и проявлять инициативу им не свойственно.
Семья на первом месте. Здесь принята шестидневка, иногда посменная. Многие работают по ночам, и к этому все привыкли. Но вот умирать на работе никто точно не будет. Семья и личное время для индийцев важнее всего, и трудиться они будут ровно столько, сколько прописано в договоре.
А если что-то случится, вам в любой момент могут позвонить и сказать, что заболел любимый дядюшка и только ваш дорогостоящий сотрудник может отвезти родственника в больницу и быть сиделкой.
Фальшивое «непонимание». Сразу поясню на примере. Если сотрудник работает на удаленке и у него отключили электричество — он просто сообщит, что сегодня работать не может. На что ему нужно прямо сказать, что в таком случае он может приехать в офис или поработать из ближайшего Старбакса. И тогда проблема сразу решается. Но сам сотрудник делает вид, что не додумался до такого решения.
И вообще время у них течет по другому, они не спешат и часто ждут, что все решится как-то само собой, без их активного участия:)
Настоящие болливудские драмы. Если решите кого-то уволить, особенно фрешера, будьте готовы, что к вам в офис явится вся его семья и будет умолять взять его обратно на работу. А Пускающим слезу женщинам в сари не так-то просто отказать =)
Особенности чаепития. Когда мы открыли офис, оборудовали кухонный уголок, закупили чай кофе и т.д. А коллега из соседнего офиса сообщил, что я сделала все зря — никто тут не пьет чай из пакетиков и не будет делать его себе сам. Нужно нанять специального человека, который будет варить масала чай всем желающим. Он же может быть курьером и уборщиком. А покупать нужно не кулер и чайник, а плиту, кастрюльку и специи.
Но при этом здесь не важно, зарплата 200 долларов или 3000 — любой сотрудник может спокойно есть на обед руками рис с бананового листа, приготовленный в ближайшей к офису палатке на улице. И стоя у дороги пить чай за 5–10 рупий, который продает чайвалла с велосипеда.
В Индию редко нанимают сотрудников из-за рубежа — тут хватает своих. И шанс попасть сюда у разработчика из России довольно невысокий. Но все равно хочу немного рассказать, как тут живется — вдруг вас сюда занесет как туриста или отправят в командировку по обмену опытом от вашей компании: )
Климат. Здесь он гораздо лучше, чем в большинстве индийских городов. Практически весь год стоит одинаковая температура: никогда не бывает очень холодно или очень жарко. Сезона муссонов почти нет. В это трудно поверить, но все семь лет я не пользуюсь кондиционером в квартире.
Кстати еще интересно, что в окрестностях Бангалора добывают мрамор и он тут очень дешевый. Поэтому вокруг все из мрамора: полы, ступеньки, столешницы. И от этого в зданиях, особенно старой постройки сохраняется комфортная температура на протяжении всего года.
Страшные пробки. Это не преувеличение — по официальным данным Бангалор занимает первое место в мире по пробкам. Каждый раз попадая в трафик вне Индии я улыбаюсь, представляя, сколько здесь бы еще уместилось машин, мотоциклистов, рикш, коров и хаотично бегающих пешеходов.
Касты по факту еще существуют. Официально кастовая система в Индии отменена, но все живут по ней — определяют касту по фамилии, требуют справку о касте при приеме в школу, соблюдают границы при общении. А белый человек вне каст, и до сих пор в диковинку. Если вы подружитесь с индийцем, он будет звать вас домой и показывать родственникам и соседям. Кстати, сотрудники и коллеги делают тоже самое.
А в добавок к цвету кожи еще их впечатляет высокий рост. И у меня есть смешная история — я не только белая, но еще и высокая, 182 сантиметра. Мало того, что многие прохожие просят сфотографироваться вместе, так однажды ко мне подошли с рулеткой и начали измерять мой рост прямо на улице. Затем пригласили в храм для присутствия на какой-то церемонии, где я должна была стоять держа в руках кокос, если бы, конечно, согласилась принять такое интересное приглашение.
И, если честно, у меня нет никаких историй об «индусском коде» и неквалифицированных сотрудниках. Может, и попадаются программисты, которые работают плохо — но это характерно и для России, и для Европы, и для США. Здесь достаточно легко найти хороших, сильных сотрудников. Часто даже легче, чем в других странах, потому что IT-специалистов очень много — есть из кого выбирать. Правда, процесс рекрутинга может занять больше времени.