Колесо сансары або как работать с южными братьями и не ебнуться рассудком
Предстояло как-то мне впервые работать с индусами, и скинули мне такой вот текстик, чтобы ободрить. Он когда-то лежал в ЖЖ, потом пропал оттуда, потом я нашёл его на каком-то другом ресурсе. Далее копипаста:
"Привет, тора гой дневничок. Пока свежи еще воспоминания про геенну огненную и еще дымится прожженый стул - хочу заделиться с тобой прохладными былинами о плодотворном сотрудничестве с братьями нашими по крови и генотипу из солнечной юго-восточной Азии.
Как вы знаете, существует в природе понятие “индусский код”. Это понятие не связано ни с какими религиозными верованиями или обрядами, а имеет самое прямое отношение к ремеслу вколачивания нетленного кода в бездонные просторы интернетов. Об чем ниже и пойдет собственно ретчь.
Человека, по одной из версии, создает труд. А также бытие определяет сознание, или как-то так. Эти книжные истины избиты донельзя, однако они находят самое яркое и неожиданное подтверждение в том случае, если судьба повернулась к вам жопой и вывалила на вас команду из какого-нибудь Бангалора. С этого момента жизнь в целом разделится на до и после.
Начнем с того, что разница в менталитете - это совсем не только лишь слова. Это реально разница в способах реакции на внешние раздражители и механизм принятия решений. Это офигительно заметно практически сразу - в том месте, где любой западный или условно западный человек начнет думать - восточный человек сядет под пальму и будет ждать просветления. Потому что Гаутама Будда в свое время так делал, а он между прочим уважаемый человек был.
Далее небольшой лирический отступ от канвы повествования.
Одной из основных ветвей религиозных воззрений, которые культивируются в восточных кругах - диктуется принцип равновесия. Этот принцип примерно гласит, что всякое злодеяние должно быть компенсировано добром, и тогда Шива будет доволен и Кали-Юга пройдет без белых ходоков и прочих неприятностей. Бангалорцы же очень последовательно следуют этой схеме, и практически любая полезная штука должна быть компенсирована бесполезной. В этом смысле человеки с северных гор очень продуктивно причиняют разнообразную пользу, соответственно ребятам приходится сильно напрягаться для того, чтобы восстановить баланс.
В восстановлении равновесия есть множество способов, но самый главный из них - не навредить. В комплекте с теории о перерождении и колесом сансары - это означает что у любого представителя заморского племени есть бесконечное время на сидение под условной пальмой и произведение недеяния. И что характерно - они так могут пересидеть всех и вся. И ничего им не будет. Пословица про сидеть жопой на камне возле реки и ждать пока по ней не проплывет труп твоего врага - это то, что должен помнить каждый программист, которому судьба послала испытание в виде условного Кумара Ракшида Банапати, веселого и доброжелательного парня который вот-вот пустится в пляс на фоне Тадж-Махала. Но толку от него будет ровно нихуя, потому что нельзя увеличивать энтропию и гневить Кришну.
Итак, вы уже подготовились к принятию мудрости в себя, и вот она есть.
Эту пословицу придумал стопудов один из великих мыслителей индийского континента. Она бездонна в своей глубине. Здесь нет ни слова про мыслительную деятельность - только бездумное повторение и пере-повторение ритуала отмеривание перед тем как через три недели четко и безжалостно закоммитить три строчки кода, которые неизбежно сломают билд. Я уже писал выше - у них бесконечное терпение, и ритуал проверки и перепроверки будет радостно выполняться 24/7/365. Результат должен обязательно быть нулевой - если чиним баг тут, то делаем баг там. Желательно в неожиданном месте, и можно еще закомментировать тест. Потому что красный цвет - цвет войны, а все должно быть зеленое, чтобы можно было сесть в позу лотоса и умильно смотреть на зеленый билд. Месяцами. Желательно ничего там не трогать. Энтропия же.
Первую часть они осилили, до второй не добрались. Я уверен что человеку, придумавшему скрам и прочий эджайл - лично платили кшатрии и прочие раджи, потому что это альфа и омега, писечька мякотки и карри рисового поля. Нет ничего эффективнее общения - оно позволяет создавать видимость работы и повышать чувство собственной значимости, одновременно сохраняя статус кво и равновесие недеяния. Иными словами пиздеть - не мешки ворочать - эта сакральная мудрость пустила корни, которым позавидует любой баобаб. Митинги можно собирать по совершенно любому поводу, а если повода нет - то это тоже повод. Любой процесс, каким бы простым бы он не был - можно скрасить разными улучшениями вида “пришить к пизде рукав” или “выдать зайцу пятую лапу”.
Вопрос не имеет решения, потому что вкручивать лампочку - это уже hardware. Как уже было упомянуто выше - процесс улучшается до неузнаваемости, а что может быть лучше чем ввести узкую специализацию? Так появляются менеджеры менеджеров и помощники менеджеров менеджеров, вся задача которых - присутствовать на митингах, назначать фоллоу-ап митинги, менять статус тикетов в джире и склеивать рабочий процесс. Все это тщательно выверяется так, чтобы конечный результат был нулевым. Если кто-то начинает что-то перформить и выдавать результат - то нужно срочно добрать еще людей, которые смогут уравновесить дисбаланс и смазать колесо сансары. Кроме шуток, я видел JIRA Ticket Manager Associate, не прям так официально - но основная функция товарища была - на скрам-митинге возить тикеты туда-сюда в джире. И менять им статусы. И еще назначать ответственных. Все. Не пижжу.
Кто не играл в Старкрафт - там есть самые дешевые и довольно хилые юниты, на которые тратится минимум ресурсов - но которые в массе своей могут запилить нихуевый урон. В целом это работает примерно так - допустим у вас есть команда из трех человек, которые что-то умеют делать, и внезапно даже дают отличный от нуля результат. Видя такой прогресс, высокий менеджмент решает - а круто было бы усилить юнит подсобным хозяйством, и нанимают одного индуса. Проходит некоторое время и индусов уже два. Затем четыре. Через пару месяцев их уже двадцать в команде, у них у каждого по 5 тикетов и митинги уже все забиты. Никто не может в точности сказать, когда начался процесс деления - но результат налицо. Процесс становится экспоненциальным в случае если одна из личинок вылупляется в индоменеджера. Тут они уже строят улей и процессу деления позавидует любой ядерный реактор. Суммарный результат осцилирует вокруг нуля, это как закон термодинамики.
Любая скучная задача, от которой любой нормальный программист уже бы сошел с ума или автоматизировал бы ее скриптами и кодом - это манна небесная и священная корова любой индолавки. Они с удовольствием наладят процесс копирования файлов с места на место вручную, сделают под это L1 support team и будут наращивать производство в геометрической прогрессии. Перемещать строчки в CSV файлах - это вообще работа мечты. У тамошнего народа очень стереотипное мышление и полностью атрофированное креативное мышление. Переосмыслить проблему - это не для них, всегда нужны максимально подробные и четкие указания - что, и главное - какнужно сделать. Ну например - если сказать что нужно увеличить размер памяти виртуалки до 16 гиг - то товарищ старательно и добросовестно пропишет все эти параметры во все 300 файлов конфигурации. Вручную. И отчитается о том, что работа выполнена успешно. И неважно что физически некоторым контейнерам выдано всего 8 гиг, и соответственно они отвалятся при старте. Команда-то была - поменятьнастройки. Команды - запустить - не было. Все честно. Не придерешься. Сумма-то нулевая. Подумать даже на шаг вперед - это ментальный барьер, и вообще не нужно.
Истории - это то, что оживляет любой блог. Конечно же вся связь с реальными персонажами совершенно случайна и все является продуктом фантазии.
У меня год была команда мечты в Бангалоре, они полтора года до этого программировали что-то на скале, до меня
Потом я им показал что такое case class и как им пользоваться, и как можно делать композицию двух трейтов, на этом отсеялось половина команды, они просто не смогли в себя впитать эту мудрость и ушли на другой проект. Оставшиеся умели просто копировать мой код в разные места, без понимания что там происходит, ну просто - сделал магию и дал нам огонь
Из яркого - чувак попросил показать ему как там сделать FSM для простого случая с правилами проверки, назначил мне митинг, начал задавать вопросы - я по итогу зашарил скрин, показал что куда и как, написал примерно 80% того что ему надо было сделать, подумал - зачем пропадать добру. Написал комментарии - вот тут вставить этот вызов, тут прочитать этот конфиг, тут написать вон то - и добавил ???чтоб компилировалось. Отослал измененные файлы в письме мол фоллоуап, сделай и добавь в PR. Через два дня чувак прислал мне PR, в котором был только мой код, мои комментарии и ???, без никаких других изменений.
Я ему сделал DECLINE с пометкой “реализовать нереализованное“. Чувак мне назначил еще один митинг, но я уже был умный - я его просто кансельнул и написал письмо чуваку и менеджеру чувака, и своему менеджеру что мол собирать митинги по каждому вопросу - неэффективно, если ты не выяснил все два дня назад - это твои проблемы. Чувак обиделся, менеджер чувака написал на меня кляузу моему манагеру и производной манагера, что я не collaborative.
Вторая яркость - это когда я взял задачу из бэклога и сделал ее за полдня, запушил и создал PR. Потом утром меня вызывал шеф и говорит - ты что сделал - и показывает мне мой PR. Я на него смотрю вдумчиво, и говорю - ну вот, код, вроде хорошо все, а в чем проблема? Оказалось, что на этот тикет чуваки “из оттуда” сделали планирование на спринт, придумали себе целый epic и impact analysis, спланировали митинги и все такое - и тут короче я беру и закрываю их эпик одним коммитом. Это был эпичный срач, там даже какое-то высокое индийское начальство вписалось что я “is not a team player and doesn’t do any good to the team spirit” или чота такое. Сломал людям спринт короче, уронил мораль.
Понадобилось нам как-то сделать одну штуку, но надо было проверить что в конце файла есть CR/LF. И если нет - то добавить. Файлы там могут быть большие, по 50 гиг в GZIP-е. Ну казалось бы, что можно тут накосячить? Оказывается, можно. Например, можно прочитать файл в байтовый инпутстрим, потом из него взять массив байтов и сделать ему new String. И потом проверить на .endsWith("\n"). А когда все уебется по OutOfMemory - взять в амазоне виртуалку потолще, ну типа x1.16xlargeна 976 Gb RAM. И гонять там вот это все.
Если уж вам довелось вступить в это все - то чтобы сохранить нервы в целости и не заработать нервных расстройств, нужно придерживаться примерно следующих рекомендаций:
- требования в любой задаче должны быть максимально точные, до абсурда. Если что-то очевидно вам - то оно неочевидно им с вероятностью 146%- если что-то можно накосячить - это будет накосячено. Если накосячить нечего - это будет изобретено и накосячено, причем самым неожиданным образом
- если тебе сказали “Да, я все понял” - это значит “Я тебя выслушал и с тобой согласен, хотя я понял ровно нихуя”.
- нельзя перефразировать задачу, это ломает шаблон и может оказаться что в разработке находятся сразу две идентичные задачи, просто сформулированные по-разному
- нужно всегда контролировать количество менеджеров в проекте. Иначе внезапно может оказаться, что 3/4 команды вы вообще не знаете кто это
- они не умеют программировать. Это нужно брать за аксиому. Тех, кто умеет - надо срочно вывозить перемещать из окружения в более благоприятную среду обитания
- задавать вопросы считается проявлением слабости и тупости. Человек будет сидеть до последнего с проблемой и никому про нее не скажет, пока не припрут к стенке. Бесполезно это менять, это hard-wired. Нужно искать другие пути и всегда знать, что в проекте есть проблемы о которых станет понятно только в день релиза.
- изучать какие-то методологии и штуки будут только в тех пределах, которые нужны для написания кода. Никто и никогда не полезет читать документацию. Использовать незнакомые методы, которые ранее не использовались - страшно.
Резюме
Работать с товарищами из совершенно другой культуры - это в целом развивает кругозор и позволяет по-новому взглянуть на своих коллег. Даже конченые уебаны внезапно оказываются вовсе даже ничего, ну так, с особенностями."