Индусский код лукоморье. Жёлтая плохая: я её не знаю

05.04.2019

Как Индия стала одним из главным поставщиков кадров в сфере IT

«Таких указаний из уст гольфиста мне раньше слышать не приходилось: «Цельтесь в Майкрософт или Ай–Би–Эм».

Дело происходило в южноиндийском городе Бангалоре, на поле, принадлежащем гольф–клубу».

Томас Фридман, Плоский мир , 2004 г.

В 1980-х годах среди программистов возникло выражание «индусский код» или «glitch». Интернет-мем, жаргонное выражение – можно называть это как угодно, но все же попробуем разобраться, почему именно «индусский» и что происходило с IT Индии в последние десятилетия.

«Есть мнение, что понятие « индусский код» уходит своими корнями ещё во времена дружбы СССР с Индией и широко распространенной практики обучения иностранцев программированию в наших ВУЗах. Именно тогда, по поверьям, на лабораторных практикумах по программированию появились первые зачатки «индусского кода».

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

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

IT-Индия

Основную роль в истории индийского программирования сыграл все же не СССР. История Индии как мирового экспортера программного обеспечения и одной из важнейших аутсорсинговых площадок для мультинациональных корпораций, началась с ее сотрудничества с США.

В 1951 году первый индийский премьер-министр Джавахарлал Неру основывает первый Индийский Технологический Институт (IITs) в восточном городе Хагапуре, Западная Бенгалия.

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

Так, примерно в конце 1980-х – начале 1990-х, в основном благодаря Дженерал Электрик, Индия обрела связь с миром, в первую очередь с США, и это было началом индийской аутсорсинговой революции.

Следующим важным этапом для Индии стала “проблема 2000”. Встроенные часы во многих старых компьютерах были запрограммированы таким образом, что отсчитывали даты с помощью только шести цифр: две цифры – день, две – месяц и две – год, то есть 31.12.99 должно было стать последней датой, которую способен воспроизвести компьютер.

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

Индия сегодня

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

Южный город Бангалор – это индийская силиконовая долина. Там находится штаб-квартира одной из лидирующих индийских компаний по разработке ПО Infosys Technologies Limited. Компания была основана в 1981 году и сейчас насчитывает около 100 000 сотрудников. Для сравнения – это приблизительно на 10 000 больше, чем у Microsoft. Это при том, что и в самом Microsoft не обошлось без индусов.

Яркий успех Индии в сфере IT не отменяет того, что выражение “индусский код” всегда употребляется в негативном значении: “код плохо написан”; “с ним невозможно работать”; “пришлось все переделывать” и так далее.

С одной стороны, не стоить винить во всем индусов. Когда в проектах по всему миру задействовано такое огромное количество программистов из Индии, естественно, много индийских странностей, хитростей и глупостей придаются огласке. Самое распространённое мнение на этот счет можно сформулировать так – в любой стране встречаются и хорошие и плохие программисты.

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

Исторически сложилось, что в Индию обращаются за быстрой работой, очень часто сами клиенты не особо пекутся о качестве выполнения, и оплата осуществляется построчно (ну а качество кода от его количества, конечно, не зависит, если даже не сказать, что оно с его количеством точно уменьшается). И к этому готовы сами индусы - порог входа в профессию невысокий, задач много и они могут работать конвейером, особенно не вникая. Сейчас ситуация лучше и есть хорошие аутсорсинговые компании, а стереотипов, да и примеров, их поддерживающих, все еще очень много».

Андрей Овсянников:

«Надо понимать, что само понятие «индусский код» - это устоявшийся интернет- мем, а не какая-то национальная особенность.

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

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

Существуют специальные сайты по поиску таких аутсорсинговых специалистов, например, , где наименьшие цены на самые различные услуги предлагают выходцы из Азии».

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

Если посмотреть на сливки индийского it -мира - такие компании как и имеют за своими плечами огромный опыт, их капитализации могут позавидовать наши отечественные it -монстры . В штате практически каждой крупной американской it -компании обязательно найдется пара индусов. C реди индусов из привелигированных семей очень много ответственных и умных людей. Родители обычно отправляют ребенка учиться за границу, где они проявляют усидчивость и приезжают «поднимать целину на родину», а вообще не возвращаются.

Если посмотреть на количество пользователей фейсбука по странам, то, если не ошибаюсь, Индия находится в топ-5. Это наводит на мысль, что Интернет пользуется популярностью среди индусов, а особенно у молодого поколения».

«Началось все с того что я решил сделать маме сайт, попросил друга, друг оказался занят, – ну, думаю, ничего страшного,пошел на ФрилансерКом, запостил проект, тут же подконнектились разные индусы – там это обычное дело. В целом я, не предвзятый человек, нашел одного в скайпе (взрослый такой дядя) и говорю: «Нужен сайт». Показал ему картинку дизайн а и сказал, что нужно с Инстаграма собирать, он, буквально перебивая меня, сказал что все понял и готов заняться прямо сейчас, показал админку какую-то, где заготовки всего есть, разные графики и т.п. – я должен был из нее выбрать функции, которые мне нравятся.

Я все выбрал, затем прошло 4 дня, он мне показывает что собрал фотографии из Инстаграма внутрь базы, ну, думаю, процесс идет, потом проходит неделя, он показывает мне кривой макет, судя по всему, в dreamviewer сделанный, и просит деньги, я ему говорю, что надо что-то изменить и т.п., он поддакивает говорит: “Да-да, изменю…”. Я больше о нем не слышал».

Как-то раз я бродил по интернету и наткнулся на главу «Первичный ключ и интуитивная интерпретация реляционных понятий». Это был толстый нудный учебник для ВУЗов. Недолго думая, я решил написать то же самое, но оставить только самое нужное.

В этом выпуске - таблицы, индексы, ключи, нормальные формы и немного практики. Целевая аудитория - интересующиеся школьники или IT-студенты, прогулявшие лекцию по БД.

Здравствуйте! Недавно на хабре была , позволяющая «легко» складывать числа. Рад предложить вам свою новую библиотеку phpSequence , которая позволяет получить число из цифр.

В качестве бонуса появляются константы «ONE», «TWO», «THREE», ..., «NINE», «ZERO», имеющие значения от 1 до 9 и 0 соответственно.

Преамбула

Началось всё с того, что я в тестовых целях (выяснить, есть ли принципиальное различие), поставил Windows Server 2012 . Для тех, кто не знает, это такая Windows 8 , только дороже. Ну, а ещё, от него можно оторвать GUI и поставить всякие разные роли.

Ну так вот, одна из наиболее приятных вещей в Windows 8 для меня - новый Таск Менеджер, и красивый и удобный. Какое же было моё удивление, когда я открыл его в WinServer 2012 и не увидел некоторых данных.
Вот пара картинок для понятности.

Понадобилось быстро подключить SD-карточку к микроконтроллеру, и задача казалась простецкой - добрый микрочип предлагает библиотеки для всего чего угодно (ах, поставить линк на библиотеки - не судьба) , но после первого взгляда на их код , волосы на голове начали шевелиться.

Те кто общался с саппортом микрочипа, наверное замечал что зачастую попадает на индийский департамент конторы, и все-бы ничего если бы не подозрение что весь микрочип разом переехал в Бомбей и набрал индийских бездомных школьников для написания своих библиотек.


Не подумайте, что я сейчас пытаюсь гнуть расово верную линию - не имел опыта общения конкретно с индусами, но точно знаю что среди наших их тоже достаточно (не верите - наберите «95» в гугле), но понятие «индусского кода» появилось давно и закрепилось довольно прочно, хотя вы и не найдете его в политкорректной википедии (но гугол о нем точно знает).

Индусский код (не индийский или индейский) - жаргонное нарицательное название для программного кода крайне низкого качества, использующего простые, но порочные принципы «copy-paste».
Почему именно индусский?
По слухам в Индии с некоторых времен существует практика оценки производительности труда программиста на основе количества написанного кода. Чем больше кода, тем больше программист работает, и, следовательно, выше его оклад. Шустрые индусы быстро сообразили, как обманывать неквалифицированных заказчиков.

Итак, если вы хотите научиться программировать так как это делают в микрочипе следуйте следующим простым советам…

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

Уже более пятнадцати лет я наблюдаю пляски разработчиков игр вокруг рандомизаторов, и мне слегка несмешно временами, такое ощущение, что матчасть даже не пытались изучать:

    if (rand(10000)==1) и прочие подобные глупости при использовании генератора с нормальным распределением.

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

    Генерация энтропии на основе данных игрока/сессии/сервера. Обычно легко прослеживается и явно заметна.

    Выборка случайного элемента из некоторой части списка для придания «большей случайности». За пределами добра и зла. В одной известной игрушке про убийство монстров это привело к тому, что можно было сутками пытаться выбить шмотку, которой просто не может выпасть в текущей сессии.

    Скрытая манипуляция выборкой под видом случайного выбора.

    И даже сочетание всего вышеперечисленного.

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

Очень хотелось бы обратиться ко всем коллегам: если вы пользуетесь радномизаторами в своих приложениях, прикиньте, как их поведение будет отражаться на ваших пользователях, разберитесь в алгоритме, подумайте тщательно. А то уже глаз дергается, ей богу.

13427

Неуловимый Джо

Индусы, индусы, индусы… Пару часов назад столкнулся с тем, что коренные американцы способны накосячить не хуже индусов.

Вставляем в программу проверку входных бинарных данных (_fpclass) - вдруг нам NaN пришёл (или ещё какой мусор). И неожиданно для себя получаем три жирных бага в совсем других местах: зависание, некорректное отображение данных, движение времени «большими рывками».

Пара часов отладки - и становится понятно, что дело в том, что _fpclass портит режим сопроцессора. И вместо long double у нас сопроцессор считает всё как float.

Открываем сорцы. Ну странно же, когда стандартная подпрограмма из системной библиотеки не восстанавливает регистры оборудования. Гм, она восстанавливает. Угу, восстанавливает. Но с перепутанным порядком параметров в вызове _control87.

Дата написания кода - © 1998, 2000. Версия библиотеки 10.0. Как этот баг прожил 15 лет? 15 лет, Карл!

13333

Самопроизвольное индоизвержение

А я теперь официально признаюсь быдлокодером.

Дело в том, что мне приспичило написать обёртку на Go для сишного API Eggdrop. Всё было хорошо до тех пор, пока я не попытался реализовать подобие Tcl-функции bind для C-функций. Полдня я потратил на исследование исходников, так как всемогущий поисковик мне не помог, но не нашёл ничего, кроме функций добавления и бинда Tcl-функций. В результате у меня получился такой механизм: генерируется имя вида eapi:bind_xxx , затем под этим именем добавляется привязываемая функция, затем получившаяся Tcl-функция привязывается как обычно. Возвращаемым значением этого монстра является номер бинда (то самое xxx в названии функции).

Простите меня, оно само.

13129

Нет предела безобразию

Прочитал тут про страдания одного программиста . Слёзы наворачиваются. Хочу в этот санаторий, там, где функция в 400 строк - предел безобразий. Видимо, у всех болевой порог разный, а у меня болевые рецепторы на заднице стёрлись давно. Итак, что у меня.

Есть программы на Фортране. Язык весёлый. Констант в нём нет, а параметры в программу передаются исключительно по ссылке. То есть вызов call subr(1) на самом деле передаёт в подпрограмму адрес переменной, в которой лежит единица. Значение переменной в подпрограмме можно изменить. Так я узнал, что в любой фортрановской программе есть как минимум четыре единицы (и четыре нуля, кстати), в общем случае не равные между собой. То, что print *, 0 выдаст именно «0», не гарантируется.

Есть программы на Паскале. Все пользовательские типы там именуются по простой схеме: Т1, T2, T3, T4… T55. Что вы, конечно же, есть распечатанный документ, где эти типы подробно описаны, для чего и как, но его потеряли. А переменные экономили, поэтому в разные моменты времени переменная используется для вычисления и хранения совершенно различных по смыслу значений. Поэтому называют их А1, А2, А3. Это не обфускатор. Люди реально так писали.

И, наконец, любимый С++. Реальная программа, которая лет десять назад неплохо продавалась по всему миру. Там есть три функции. Первые две содержат 45 и 35 тысяч строк. Раньше это была одна функция, но Visual C++ отказался компилировать файл больше 65К строк, и автор разбил функцию на две. Третья функция поменьше - 20 тысяч. Практически все 20 тысяч строк запиханы в отрисовку окна. Инициализация программы, парсинг DXF-файла с картой Земли, расчёт всякой астрономической фигни и, собственно, отрисовка.

Есть ещё 16 файлов машинно-генерённого С++ по мегабайту каждый, которые иногда приходится править вручную.

Могу продолжить, но мне уже грустно. А вы над 300 строками плачете…

13123

Валерьянки за вредность

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

Один класс (имя не отражает сущность - кого это волнует?) и сотня функций. Казалось бы, нормально. Нормально?! Ни хрена это не нормально, когда поля класса расположены случайным образом между функциями. Именование переменных, бизнес-правила? Да ну их в большой сочный болт! Метод, внутри которого переменные t , p , x , а некоторые и глобальные - вот что здесь норма.

Вы думаете, это всё? Да я молился, чтоб этом было «всем». Это творение подключалось к базе Аксесса. Банально через датасеты. Банально? Ну да, слишком банально. Один датагрид, пять таблиц, поэтому что? Правильно: надо пять датасетов! Имена… А что имена? Имя как имя: 50 символов, начинается латиницей, продолжается русским капсом (тысяча блудниц!) и заканчивается цифролатиницей. И их пять. Пять таких датасетов в одной форме. На один датагрид. А знаете, какой запрос в каждом из пяти датасетов? Глаза вытекают: SELECT * FROM ; .

Про форматирование кода после предыдущего даже писать как-то мелочно.

Функция. Да-да, именно так: Функция. Особая примета: входной параметр - y , выходной - x . 150 строк. Шта? Ладно. Следующая. 230. Шта-а-а? А дальше скромная ФУНКЦИЯ. 320 строк. Мои глаза невозможно было представить, пока я не увидел следующую (правда, всю закомментированную однострочными комментариями) на 400 строк. Я не знаю, как про это говорить.

Похоже, я должен требовать ящик валерьянки в неделю как расходные материалы.

12990

Код и небрежный обормот

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

Мне попадались дизайнеры, ухитрившиеся сделать главную страницу весом в 20 мегабайт. Художники, не имевшие понятия об анатомии и перспективе. Системные администраторы, которые при копировании данных ухитрились потерять все файлы.htaccess и после трёх напоминаний всё равно забывшие, что нужно установить определённый набор библиотек, но выпустившие все это в продакшн.

И, наконец, мои коллеги-программисты, писавшие if на пятнадцати строках с десятком вызовов функций с невменяемыми названиями и параметрами внутри без единого комментария ко всему блоку кода. Программисты, делавшие SELECT * на таблице с сотней миллионов записей (на тестовом сервере было всего тысяч десять, так что всё работало, а вот в продакшне…) Программисты, презирающие ссылки и пересылающие в подпрограмму массивы по миллиону элементов. Программисты, считающие, что ссылки вида parent.parent.parent.parent["funcRecalc"](a,b,c) - это нормально. Программисты, считающие, что defensive programming - пустая трата времени даже при разработке биллинговой системы.

Небрежность, лень, тупость, запутанный и некомментированный код, отсутствие комментариев к коммитам, игнорирование соглашений по коду и полное безразличие к работе в целом - всё это встречается настолько часто, что лишь чудовищный дефицит кадров позволяет всем этим людям иметь работу (во всех смыслах). А вы говорите - менеджеры…

12559

Честный просвещённый индус

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

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

И потом, как честный просвещённый индус, вставил себе этот неведомый кусок чужого кода.

12535

Жёлтая плохая: я её не знаю

Сменилось руководство, притащило своих программистов кодить 1С. Не знаю, кто они, но точно не программисты жёлтой. И начали они кодить…

«Что такое ссылка? Я не понимаю!» - восклицал их начальник. Он же в запросе ставил условие ЭтоГруппа = 2 . В этот момент мне вспомнился фрагмент из «Футурамы», когда Бендеру снится кошмар, где всплывают единицы и нули, и он просыпается с криком: «Кажется, я видел двойку!» При моей поправке, что нужно поставить 0 или 1, мне ответили тоном мудреца: «Не надо! У нас тут своё». Естественно, ничего не выполнялось и указывало ошибку на это условие. И все эти эксперименты - на рабочей базе.

Дальше - больше. Был показан крутой отчёт, над которым ребята трудились месяц. Параметров нет, отборов нет, группировок нет, поля поменять местами или убрать нельзя: всё жёстко забито в коде и выполняется только при открытии. Чтобы посмотреть данные, нужно переоткрыть отчёт. Функциональность на высоте: запросы написаны на T-SQL и к базе обращаются через ADO в обход RLS и всего остального «ненужного». Пофиг, что теперь все смогут увидеть информацию, которую не положено; пофиг на то, что мы полгода потратили на разборку, что и кому показывать…

Появляется второй отчёт. Нет, теперь 1С не нужна. Они из Экселя макросом дёргают инфу из базы. Ага, с полными правами и открытым паролем, вписанным в код (безопасники рукоплещут). 1С же «тупит», так быстрее. А ещё информацию можно менять напрямую.

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

12429

Отставить неопределённость!

«Отменить» и «Отмена» - можно ли это переплюнуть? Авторы одного андроидного калькулятора переплюнули. «Division by zero» - и три кнопки: «OK», «Cancel», «Help». Реакция при нажатии любой из них одинакова: выскакивает помощь.

Меня много спрашивали что такое "индусский код" и почему все ак на него матерятся. Вот, спёр несколько примеров, наслаждайтесь, коллеги:)
Особо мне нравится пример №4:)

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

Алсо аутентичный индусский код пишется на хинди и транслитерируется в C, C++ или java.
Настоящий индусский код

Примеры индусского кода

Пример № 1 (C#)
uint i;
...
if (i.ToString().Length == 1)
{
...
}

Не сразу можно понять, что в этом коде просто-напросто выполняется проверка i < 10. Алгоритм достаточно прост: выполняется преобразование i в строку, после чего вычисляется её длина. Если число больше 9, то его десятичная запись содержит больше одного символа. Отрицательные числа переменная типа uint содержать не может. Проверку проходят лишь числа от 0 до 9.

Алгоритм ресурсоёмок, не очевиден и не поддается сопровождению даже теоретически.

Пример № 2 (C#)
double rest(float a, float b)
{float res=a*b;
for (int i=0; i< 999999999; i++)
if (i<=res && i+1>res) {res = res-i; break;}
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 английский словарный запас.

Пример № 6

TurDuckEn Code - разновидность быдлокода, чаще всего встречающаяся в веб-приложениях. Как спагетти-код, только хуже. ТурДукен (en.w:Turducken) - декадентская расовая пиндосская нямка, cостоящая из индейки (turkey), нафаршированной уткой (duck), зафаршированной курицей (chicken).

Турдукен Код, например, состоит из PHP, фаршированным SQL, нафаршированным HTML, зафаршированным Javascript"ом. Вот так.

Почему именно индусский

В Индии с некоторых времен существует практика оценки производительности труда программиста на основе количества написанного кода. Чем больше кода, тем больше программист работает, и, следовательно, выше его оклад. Шустрые индусы быстро сообразили как обманывать неквалифицированных заказчиков.