индийский код в программировании что это
Индусский код в Микрочипе
Те кто общался с саппортом микрочипа, наверное замечал что зачастую попадает на индийский департамент конторы, и все-бы ничего если бы не подозрение что весь микрочип разом переехал в Бомбей и набрал индийских бездомных школьников для написания своих библиотек.
Не подумайте, что я сейчас пытаюсь гнуть расово верную линию — не имел опыта общения конкретно с индусами, но точно знаю что среди наших их тоже достаточно (не верите — наберите «95» в гугле), но понятие «индусского кода» появилось давно и закрепилось довольно прочно, хотя вы и не найдете его в политкорректной википедии (но гугол о нем точно знает).
Индусский код (не индийский или индейский) — жаргонное нарицательное название для программного кода крайне низкого качества, использующего простые, но порочные принципы «copy-paste».
Почему именно индусский?
По слухам в Индии с некоторых времен существует практика оценки производительности труда программиста на основе количества написанного кода. Чем больше кода, тем больше программист работает, и, следовательно, выше его оклад. Шустрые индусы быстро сообразили, как обманывать неквалифицированных заказчиков.
Полезное замечание от kaladhara
Житель Индии — индиец, а индус — это последователь любого направления индуизма. Таким образом даже чукча преклонных годов, исповедующий шиваизм (и, вероятно пишуший на с++) — индус.
0. Больше кода — больше профит!
Самое важное, что надо запомнить нанимаясь получив работу в микрочипе: «Они-таки платят за строки кода!». Поэтому любыми способами увеличивайте объемы исходных текстов. Совет общий, так что без примеров, включайте фантазию.
1. Классика жанра
Классика жанра индусского кино кода незыблема со времен его появления, для разминки попробуйте угадать что скрывается за этим куском кода, содержащемся в файле «MDD File System\SD-SPI.c» на строчке 1042:
2. Копипаст
В отсутствии фантазии подойдет и копи-пейст, хотя по слухам многие работодатели проверяют код на копипаст, микрочип видимо не из их числа. Запомните, для срубания бабла индусским кодом никогда не используйте макросы — они зло и безобразно уменьшают код. В пример кусок, повторяющийся раз двадцать в файле «MDD File System\FSIO.c»:
Соотношение 10:1 в пользу первого варианта, а с учетом двадцатикратного повторения в абсолютных величинах это несколько сот рупий!
3. Линейный код
Использование циклов — зло. Линейная программа работает значительно быстрее, не тратя времени на операторы условий и переходы, и содержит больше строк кода.
Инициализация структур должна быть побайтной, не надо писать простые инициализаторы типа:
4. Изобретаем велосипед или деньги из пробелов
На очередную мысль меня навела идея функции FileObjectCopy в файле «MDD File System\FSIO.c» на строчке 6065, подозреваю что если бы у них было больше разных структур то появились бы и другие SomeObjectCopy
The FileObjectCopy function will make an exacy copy of a specified FSFILE object.
Если «exacy» == «exact» как следует из кода, то это профитная замена прямого присвоения структур — стандартной операции в ANSI C, a сделанное компилятором, оно должно быть и быстрее и компактнее так как используются аппаратные FSR/INDF регистры. Для разных объектов подойдет memcpy(d, s, sizeof(s)) и работает он тоже быстро, во всяком случае его ассемблерная реализация.
Ну есть еще мелочи для раздувания кода, которыми можно добавить пару — тройку строк, типа:
Даже если это исключительно для того чтобы сделать переменную read-only то такого макроса вполне достаточно, чтобы компилятор выругался где надо:
5. Комментарии с фанатизмом
Комментируйте все подряд, кроме самых не очевидных кусков (см пример 1.) Если вы еще не достигли полного просветления и в вашей индусской программе случайно осталось две-три функции — создайте «шаблон описания функции», включите туда умные слова-разделы, в разделе «Description» перечислите еще раз все что было написано выше, но развернуто. Особенно эффект умножения строк кода проявляется с функциями типа «FSerror()» из примера выше.
6. Используйте особенности архитектуры
Все что было написано выше — общие советы для новичков на пути просветления, применимые к любой программе, практически на любом языке. Но настоящие поклонники Шивы используют все возможности для создания хаоса. Учитывая кучерявость гарвардской архитектуры PIC контроллеров, настоящие гуру индусского кода откроют для себя невообразное число возможностей использования специфических директив и прочих особенностей кривизны реализации си в компиляторах.
Пишите код таким образом, чтобы он даже не мог компилироваться под разными версиями компиляторов, и используйте все специфические #pragma. В этом случае каждая функция будет присутствовать в версиях как минимум для двух компиляторов и трех-четырех архитектур PIC, итого до 8 крат увеличения кода.
Еще раз удвоить количество кода вам поможет то, что указатели RAM и ROM в компиляторах под PIC разные, то есть «char*» не может быть преобразован явно или неявно к «const char*» в хайтеке или «const rom char*» в микрочипе. Что вобщем-то проблем в хайтеке не вызывает совсем, так как void, far и const указатели могут адресовать всю память и применяться как к ROM так и RAM. Но в микрочиповской реализации си это может привести к созданию двух функций: одной работающей с ROM, а второй с RAM — чистый профит. Никогда не следует довольствоваться одной функцией, работающей с оперативной памятью (а при необходимости загружающей туда константы из ROM).
И последнее, всегда используйте инлайн-ассемблер даже в случаях когда ваш код значительно длиннее и медленнее чем то, что делает компилятор из нормальной си программы. Ассемблер выглядит круто и большинство не заподозрят какое скудоумие было приложено при его создании, а также будут считать что программа написана одним из оптимальнейших из возможных методов.
Индусский код
Алсо аутентичный индусский код пишется на хинди и транслитерируется в C, C++ или java.
Настоящий индусский код
Примеры индусского кода
Пример № 1 (C#)
uint i;
.
if (i.ToString().Length == 1)
<
.
>
Не сразу можно понять, что в этом коде просто-напросто выполняется проверка i [ Еще чуток ]
Пример № 2 (C#)
double rest(float a, float b)
return res;
>
Далеко не сразу можно понять, что этот код выделяет дробную часть произведения a*b. кроме того, функция выдаст ошибочное значение при a*b>999999999 или a*b <
.
>
В этом примере проверяется, какое действие нужно выполнить. Вместо того, чтобы создать одну переменную со значением следующего действия, создается три «быдлокодерских» переменных.
К тому же, это пример ужасного стиля именования переменных, 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 <
//
// А вот здесь чистые деньги 🙂
//
>
Ну и еще примеров можно посмотреть на лурке
Удачи, вам, коллеги, и поменьше иметь дел с индусским кодом
«Индусский код»
«Если программист поёт и танцует — значит, он написал индусский код»
(Народная примета)
Проблема назревала, назревала, да и вызрела.
Подразделение «аутсорсеров в полосочку» будет создано в одной из тюрем южного штата Андхра-Прадеш. Штат подразделения будут комплектовать только из образованных зэков, которые знают грамоту и умеют считать – их в тюрьме, где развернут эксперимент, аж 40%. На начальном этапе в IT-специалисты возьмут 200 человек. Их научат азам обращения с компьютером, после чего заключенные в три смены бригадами по 70 человек заступят на трудовую вахту – будут обрабатывать данные, выполняя контракт некоего банка.
К вопросам оплаты труда заключенных чиновники подошли с прямо-таки буддистской мудростью. Новоиспеченным IT-специалистам в день будут платить по 100-150 рупий ($2,2-3,32). Это поистине царское вознаграждение. Зэки, занятые менее интеллектуальным трудом типа изготовления стальных коек, получают по 15 рупий (чуть больше 30 центов). Вполне возможно, что IT-аутсорсинг руками заключенных примет действительно промышленные масштабы. Авторы проекта не исключают, что будут комплектовать «сидельцами» даже колл-центры. В общем, конкурентам Индии в области оффшорного программирования (среди них есть и Россия) нужно готовиться к худшему. Использование труда заключенных уронит цены на IT-аутсорсинг буквально ниже плинтуса.
Вне всякого сомнения, даже простейшие операции по обработке данных, которыми нагрузили индийских заключенных, есть труд намного более благодарный, чем прочие занятия, которые пенитенциарная система придумывала для лиц, отбывающих наказание. Комментируя свое начинание, идеологи проекта не без гордости замечают: на свободу – не только с чистой совестью, но и с новой профессией, которая в Индии считается престижной. Вот только интересно: как кадровые менеджеры IT-компаний Бангалора отнесутся к судимостям кандидатов?»
Чем же так достали индийские айтишники остальных тружеников клавы и мыши?
Да всем.
В Индии с некоторых времен существует практика оценки производительности труда программиста на основе количества написанного кода. Чем больше кода, тем больше программист работает, и, следовательно, тем выше его оклад. Сообразительные индусы быстро сообразили, как обманывать неквалифицированных заказчиков. И это только одна из проблем, с которыми сталкивается фирма, работающая с индийцами.
Фантастическая дешевизна рабочей силы служит основным фактором приема на работу этих неприхотливых и покладистых смуглолицых людей. Я даже не хочу думать, что есть еще какие-то стимулы, позволяющие главам HR департаментов выгонять на улицу профессионалов, родившихся, выросших, получивших образование в Канаде и проработавших в фирме десять-пятнадцать лет, и брать на их места парочку-другую плохо говорящих по-английски людей с подозрительными дипломами и одинаковыми, написанными под копирку, резюме. Откаты? Какие откаты? Да вы что! И не я это сказала, заметьте!
И люди из индийских провинций, оплатив наскоро сделанные липовые дипломы, нескончаемым журавлиным клином летят по маршруту «Индия – Канада», зажав в кулачках временные рабочие визы и заселяют целые кварталы в Скарборо, снимая квартиры по 5-6 человек на радость лендлордам. Курочка по зернышку клюет, а владелец дома по 300 долларов собирает с индийца, который много не требует, исправно платит и живет кучно, – неплохая в итоге с дома сумма собирается.
Заработанные деньги, а это немалые суммы, учитывая количество работающих в Канаде индийских программистов, вывозятся на историческую родину этих людей, а не остаются в Канаде в виде налогов, платы за бензин, моргиджей и прочего.
Уход от налогов индийцами происходит с восхитительным изяществом – после года пребывания по рабочей визе в Канаде приходит пора платить налоги, но как раз в этот момент почему-то программисты вдруг уезжают обратно в Индию, а на их место приезжают другие, которым платить налоги придется только через год (и вы уже знаете, что случится через год, когда наступит время подачи налоговой декларации).
Средства массовой информации Канады предпочитали закрывать глаза на эту проблему, но она достигла таких размеров, что оставаться индифферентным стало невозможно. Пару месяцев назад по всем канадским каналам прошли новостные сюжеты о Royal Bank of Canada (RBC), в котором были уволены постоянные сотрудники, а на их место приняты на работу индийцы, приехавшие по временной трудовой визе.
29 апреля журналистка CBC NEWS Kathy Tomlinson опубликовала нашумевшую статью, собравшую около тысячи комментариев, под названием «Insiders say Canada ‘scammed’ by foreign worker industry», в которой вскрыла возмутительные факты, касающиеся ввоза в страну и работы в канадском бизнесе программистов из Индии: «Инсайдеры утверждают, что канадские менеджеры, принимая на работу индийцев, получают бонусы за то, что закрывают глаза на их низкую квалификацию и явные нарушения в оформлении рабочих виз, по которым они прибыли в Канаду».
Можете ли вы поделиться фактами дискриминации канадских программистов?
— Да, конечно. Я работал с 2008 по 2010 и с 2012 по 2013 годы в компании AVIVA (Canada Insurance), это очень крупная страховая компания, имеющая около десяти дочерних фирм. В сентябре-октябре 2010 года AVIVA уволила около 300 постоянных сотрудников. Около 200 из них были уволены по причине замены их на аутсорсинг. В марте 2013 около 10 человек из IT-департамента были вынуждены от двух недель до месяца тренировать индийские кадры, обучая их элементарным азам программирования, после этого тренинга их уволили, заменив на «обученных» новых сотрудников. На моих глазах разворачивался конфликт одного из менеджеров с руководством компании. Менеджер на общем собрании заявил, что AVIVA поступает неправильно, лишая рабочих мест канадцев и заменяя их непрофессиональными кадрами из Индии. Его выгнали с работы через три недели после этого собрания, и начальник сказал на прощание: «Если бы ты молчал, тебя бы не уволили».
Так чем же программисты из Индии насолили канадским коллегам?
IT-индустрия в Канаде умирает, потому что корпорации заменяют профессионалов на дешевый аутсорсинг, имеющий иностранное происхождение. Все заказы уходят на оффшор, в страны с дешевой рабочей силой, в частности, в Индию, и мы никак не можем этому помешать – действуют законы рынка и, видимо, откаты, но об этом не принято говорить вслух, слишком агрессивно в последнее время преследуется критика, высказанная по этой проблеме. Задействованы целые адвокатские конторы. Собственно, поэтому я не раскрываю свое имя – я не хочу преследований за свои слова.
Как вы считаете, существуют ли пути выхода из сложившейся ситуации?
Да, они есть. Прежде всего необходимо создать организацию, защищающую права работников IT-индустрии. Мы сейчас лишены элементарной правовой и финансовой поддержки государства и юридической защиты от действий работодателя, выкидывающего профессионалов на улицу. В наших услугах нуждаются все – но когда тебя увольняют, тебе некуда жаловаться. Кроме того, такая организация, сочетая профессионализм и независимость, – назовем ее профсоюз – могла бы осуществлять экспертные функции, тестируя программы при необходимости, определяя профессиональный уровень принимаемых на работу айтишников и выступая экспертом в спорных вопросах. Я со своей стороны готов принять участие в этом экспертном совете, если понадобится.
Наверное, существуют еще какие методы борьбы с проблемой, например, бойкотирование предприятий, дискриминирующих канадцев и использующих дешевую рабочую силу?
Бойкотирование – это не метод, к сожалению. Вы можете не покупать обувь или продукты питания определенных марок, но вы не можете бойкотировать продукцию предприятий-монополистов – основных банков, крупных страховых фирм, utility компаний. Они будут продолжать удешевлять свои издержки за счет привлечения неквалифицированной рабочей силы, а вы будете подвергать опасности свои банковские счета и свое здоровье.
Нет ли опасности увести проблему в сторону дискриминации по национальному признаку?
Разработчики в России и Индии — взгляд технического директора
Disclaimer: Я в курсе, что «индусский код» это очень сильный негативный брэнд среди разработчиков в России и у большинства в голове масса предрассудков на эту тему. Очень не хотелось бы получить шовинистский срач в комментариях, хотя я почти уверен что этого не избежать. Также я почти уверен, что мои индийские коллеги этот пост прочитают хотя бы в переводе. Поэтому давайте постараемся выглядеть цивилизованными профессионалами в вопросах и комментариях.
Моя профессиональная карьера сложилась таким образом, что в настоящий момент я работаю техническим директором в компании Knoema и в моем подчинении оказалась очень необычная команда состоящая из российских (Пермь) и индийских (Bangalore) разработчиков. За почти 2 года такой работы накопилось много полезных наблюдений. Да и вообще тема достаточно интересная поскольку практически все мои знакомые из ИТ интересуются как оно там в Индии и чем русские разработчики отличаются от индийских. До этого я более 10 лет работал в разработке ПО в России и США, из них более 7 лет руководителем разных рангов. Вот я и решил поделиться накопившимся «интернациональным» опытом.
Начать я хотел с того, что хотя и есть достаточно существенные отличия, но в общем и целом работают в ИТ конкретные люди, а не индусы или русские и гораздо больше флуктуаций я наблюдаю на персональном уровне, чем вижу отличий в менталитете или местной специфике.
Найм сотрудников
На мой взгляд наибольшие отличия между Индией и Россией заключаются в процессе найма сотрудников и надо сказать честно ситуация в Индии мне нравится гораздо меньше, чем в России. Основное отличие заключается в том, что в Индии резюме специалистов доверять нельзя совершенно и нужно проводить тщательный отбор перед приемом людей на работу.
В России (в Перми) редко встретишь резюме технического специалиста длиною больше чем 2 страницы. У нас большинство технарей совершенно не умеет себя рекламировать и подать через резюме, многие его пишут лишь бы было. Но если уж резюме есть, то, как правило, сведениям в нем можно в общем и целом доверять. Если человек пишет, что он эксперт в C# и MS.NET, то вероятно оно так и будет.
В Индии типовое резюме представляет собою портянку страниц на 10 с перечислением кучи самых разных технологий, массы проектов, выполнявшихся ролей и задач. В общем по резюме золото, а не люди. На практике если человек когда-либо участвовал в проекте в котором используется технология Х и сам никогда к ней не прикасался, то он совершенно спокойно может указать ее в резюме. Знание всех необходимых вам технологий и фреймворков нужно обязательно и тщательно проверять на собеседованиях. Неоднократно я сталкивался со случаями откровенного вранья, когда по резюме человек должен иметь неплохой опыт работы с какой-то технологией, а в реальности знаний ноль. С такими я расставался сразу же.
Другой неприятной проблемой в Индии является то, что даже после пройденного собеседования и принятого оффера нет никакой гарантии что человек выйдет на работу. Стандартной практикой в Индии является так называемый notice period по которому сотрудник обязан отработать на компанию обычно 45-60 дней после подачи заявления об увольнении. В России, как правило, если уж человек написал заявление об увольнении с текущей работы, то с большой степенью вероятности ты увидишь его у себя через 2 недели, ну или чуть больше если он так договорился с работодателем. В Индии человек подписавший job offer пропадает из твоего поля зрения на полтора-два месяца и это часто приводит к тому что он пропадает вообще. Нормальной ситуацией является невыход на работу в оговоренный срок хотя до этого с человеком еженедельно созванивались и подтверждали дату выхода на работу.
Позитивным моментом в Индии является все-таки значительно более широкий рынок специалистов и в абсолютных цифрах большее количество интересных кандидатов. В одном только Бангалоре в ИТ отрасли работает за сто тысяч человек. Конечно далеко не все из них разработчики и качественные, но все-таки интересных кандидатов значительно больше. Нужно отметить также что в Бангалоре и значительно выше конкуренция среди работодателей, т.к. практически все крупные мировые софтверные компании там открыли центры разработок.
Вообще быть разработчиком в Индии весьма престижно и это хороший социальный лифт для многих. На общем достаточно бедном социальном фоне опытные разработчики имеют весьма неплохие зарплаты и могут многое себе позволить относительно других социальных слоев. Соответственно многие стремятся в этот сектор и естественный отбор делает свое дело. Не забывайте что в Индии 1.2 миллиарда населения и действующий чемпион мира по шахматам — индус.
Уровень специалистов
На мой субъективный взгляд принципиальной разницы между разработчиками в России и Индии нет. У меня работают талантливые ребята в Индии и точно такие же талантливые в России. Какой либо фундаментальной разницы в уровне и знаниях я не вижу. Весьма вероятно это связано с моими жесткими критериями отбора. С моей точки зрения «индусский код» — это такой российский миф, основанный на не самом удачном опыте работы. В Индии действительно много тех кого мы называем «говнокодерами» (извините за выражение), работающих на аутсорсе делающих кабы что кабы как и выдающих «индусский код». Но и в России полно непризнанных гениев, которых у нас принято называть быдлокодерами. Просто в силу несравнимых абсолютных величин в Индии этот эффект значительное заметнее чем в Росcии (1200 против 140 миллионов населения).
Одним очень важным и серьезным конкурентным преимуществом Индии является то, что все более или менее серьезные специалисты владеют английским на хорошем уровне. В этом плане российские специалисты вчистую проигрывают индийским и на мой взгляд именно поэтому так мало известных русских имен международного уровня в ИТ.
Зарплаты
Зарплаты разработчиков одного уровня в Перми и в Бангалоре почти одинаковы. Если сравнивать с Москвой или Питером, то толковый разработчик в Бангалоре обойдется заметно дешевле. По сравнению с США и Европой разница будет еще более заметной. Вкупе с качественным английским именно это сделало Индию столь привлекательной для аутсорсинга ИТ-разработок.
Менталитет
В плане менталитета есть два существенных отличия. Индусы, как и многие другие азиатские нации, не очень любят прямые и жесткие разговоры на сложные или неприятные темы. Зачастую приходиться выпытывать ответы на простые, бинарные вопросы на которые люди, если ответ им неприятен, пытаются отвечать уклончиво, а не да или нет. Заметно, что требование прямого ответа вызывает у них разрыв шаблона. С другой стороны меньше резкости в повседневном общении, люди общаются более культурно что-ли и более ответственно относятся к сказанному. В России все-таки нередки случаи когда сначала скажут, а потом подумают. Еще один важный культурный момент заключается в том, что некоторые индусы скорее соврут, чем условно потеряют лицо. Это нужно пресекать на корню и объяснять людям, что облажаться это не смертельно и со всеми случается.
Второе важное отличие заключается в том, что на мой взгляд русские более креативны и творчески подходят к работе, а индусы более исполнительны и контролируемы. Я думаю явление «творческого кризиса» знакомо многим менеджерам в ИТ в России: «меня не ценят», «занимаюсь какой-то фигней», «нет бесплатного биллиарда». У индусов я практически не замечаю этих творческих заморочек, они более что-ли меркантильны и уровень зарплаты и должность для них более важны чем для русских.
Подытоживая хотел бы отметить, что у нас в команде русские и индусы совместно работают над общим кодом, совершенно нормально общаются через Skype, почту и на выходе вроде даже что-то толковое получается 🙂 Может я и жестоко ошибаюсь, но мне кажется что это нравится и индусам и русским поскольку возможность регулярного общения с представителями другой страны и культуры как ни крути полезный опыт хорошо расширяющий кругозор. Мы все вместе как и впрочем хаброжители свято верим в карму 🙂 и стараемся ее только повышать выдавая качественный код, делая ревью кода и помогая друг другу.
В статье я затронул только основные моменты. На появившиеся вопросы постараюсь ответить в комментариях. Спасибо за внимание.