среда, 7 сентября 2022 г.

[prog.flame] LOR-овского lovesan-а не взяли в Тинькофф и понеслось говно по трубам...

Есть на LOR-е специфический персонаж lovesan. Имел удовольствие несколько раз с ним сраться на LOR-е про C++. На меня он произвел впечатление рядового программиста, самомнение и наглость которого заставляет завидовать даже меня. При этом, не сильно вменяемого и способного воспринимать чужую точку зрения.

Как-то в одном из срачей всплыл его C++ный код, по которому я слегка прошелся. Код так себе, совершенно рядовой, его несложно было бы написать и получше. Но в сочетании с апломбом автора, который ведет себя как будто круче него только горы и яйца, получается эффект "на словах ты Лев Толстой, а на деле х*й простой". Желающие составить собственное мнение могут пройти по ссылке и полюбопытствовать. Ниже будет еще одна ссылка на lovesan-овский GitHub-репозиторий с .NET-кодом, можно заглянуть и туда, .NET разработчикам может быть интересно сделать собственную оценку.

Так вот давеча lovesan разразился большим постом в Facebook. Полагаю, дерьмо по трубам уже понеслось, поэтому если и я выскажусь по этому поводу, то сильно хуже не станет. Полный текст поста lovesan-а будет под катом, для истории и для тех, кто в FB без VPN зайти не может (ну и чтобы самому этот образчик изящной словестности искать проще было).

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

И надеюсь, что специалисту Тинькофф, который lovesan-а собеседовал, не прилетит по шапке.

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

Скоро намечается серия постов "Ад Русских Собесов".Первым делом будет про Тинькофф. Может даже не серия, а единичный пост, потому что кроме них компании попадались как-то более-менее вменяемые. Я очень постараюсь без матюков, но, не обещаю. Потому что это пиздец. Рашид Фатыхов тебе на заметку - если вы продолжите так нанимать людей, и так относиться к собеседованием, вы растеряете возможность нанять последних оставшихся вменяемых специалистов. Прошу лайк, шер, Усманов Алишер, и так далее. Надеюсь хоть какие-то остатки известности в среде технических специалистов у меня остались.

Сразу скажу, я пишу не потому, что я не прошел, и якобы обиделся. Я пишу потому что я натурально ОХУЕЛ. Может, потому, что я очень давно находил работу чуть ли не исключительно по знакомству, я ко всему этому был не готов, но честно говоря, такой хуйни даже вот сейчас, в процессе поиска работы, я еще не встречал.

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

Значит, да, это я отвлекся. Начну с того что я заапплаился в Тинькофф сам. Просто потому, что у меня там работает друг и бывший одногруппник, на андроиде, и вроде как ему всё нравится. Интервью с HR прошло хорошо, стандартно, поговорили про опыт, и все остальное. HR адекватные, к ним претензий нет. Единственно, я попросил HR, чтобы технический специалист познакомился с моим Github, но видимо HR забыла, но ладно. Далее назначается первый этап из серии технических интервью, как у них это называется - "по платформе и языку". Вот его то я и не прошел, но обо всем по порядку.

Значит, началось все с того, что в Zoom появился ровно один человек, который будет меня собеседовать. Окей, поздоровались. Но люди с опытом уже поймут, что запахло какой-то ссаниной, правильно? Правильно, скажу я вам, как человек, сам отсобеседовавший кучу людей - потому как ни одна вменяемая компания не проводит собеседования 1-to-1. Почему это плохо? Да хотя бы потому, что мнение одного человека - всегда субьективно, и, особенно, если это не ваш непосредственный руководитель - то этот человек на вас, грубо говоря, срал с большой горы, по большому счету. Ну и плюс, вдруг на него с утра наорала жена, заебала работа, а тут вот его еще отвлекают на вас. Поэтому, вменяемые компании всегда проводят собес с несколькими людьми. И человек, который принимает решение о найме, проводит потом их перекрестный опрос, чтобы составить хоть сколько-нибудь объективную картину.

Человек оказался, по виду, моложе меня. Это было бы вполне в порядке вещей, собеседуйся я в "молодую, динамично развивающуюся компанию(крепких накачанных рубистов^WWW)". Но неужели во всем банке не нашлось действительно опытных специалистов по дотнету? Ооокей.

Дальше начинается самое интересное. Предлагается открыть страничку внутренней системы для собеседования, простое приложение, на ангуляре, которое состоит примерно из трех вещей - картинка с кодом вопроса(Про markdown с подсветкой мы не слышали, нет), формочкой и кнопкой. И тут ХУЯК, после первого, банального вопроса, эта система падает. Просто натурально падает, да еще так, как надо бы постараться. Статика, т.е. вот та самая пресловутая картинка, начинает отдавать 500. Пацаны и девчата, вы когда последний раз видели чтобы статика отдавала 500? Я видел, однажды, когда в AWS ебанулся CloudFront. Больше, наверное, не видел, ну или забыл. Собеседующий меня человек теряется, и начинает судорожно со всеми общаться по внутренним каналам, выяснять что же там произошло и когда это починят. Через N времени, система возвращается в хоть сколько-нибудь рабочее состоянии, но почему-то вместо картинки там появляется уже редактируемая форма для ввода кода, с подстветкой. Поле для ответа исчезает. Нет, я видел разные баги в разных системах, но этот прямо очень интересный, мягко так скажем. Человеку пришлось кидать мне картинки в зуме. Круто! IT-банк, все-таки, не хуй собачий.

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

Сами вопросы простые, но собеседующий начинает по каждому задавать свои, наводящие, дополнительные вопросы.

Длится это 2.5 часа.

По ходу дела выясняются три вещи.

Первая - человек явно имеет куда меньший опыт, чем я.

Вторая - никакой мой github никто, естестественно, не смотрел.

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

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

Еще, отдельно про гитхаб. Может быть, я отстал от жизни, но если человек настоятельно рекомендует посмотреть свой гитхаб, может быть его стоит хотя бы мельком глянуть то? Я лично перед тем как кого-то собеседовал, вот всю жизнь это делал, это не так уж и сложно.

Зачем спрашивать человека тупые вопросы аля "а в каком случае в catch теряется стектрейс" и вообще "а что вот тут с исключением", если этот человек писал интетграцию рантайма .NET с Common Lisp, маршалил там эти исключения, и более того, разбирался с проблемами, которые возникают в этом случае в плане взаимодействия двух рантаймов, слал патчи(!) в рантайм и компилятор(!) языка программирования для того чтобы решить проблему на одной платформе, и кооперировался и выделял деньги, чтобы решить косвенную проблему на другой? Я не знаю. Чтобы, извините, заебать?

https://github.com/Lovesan/bike/tree/master/src/BikeInterop

Сюда же про "какие возникают проблемы с дедлоками в тасках". Нет, серьезно, я не знаю, какие они возникают? У меня вон в том проекте немного об этом в README есть.

Окей, оттарабанив 2.5, часа и выдохшись похлеще чем иной раз при деплое в дедлайн, я думаю, что в целом все неплохо рассказал. Начинаю думать, как бы готовиться к алгоритмическому собеседованию, и тут через несколько дней мне приходит фидбек от HR. Фидбек просто шедевральный, но обо всем по порядку:

===

Дмитрий, добрый день!

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

Но к сожалению, не хватило знаний по темам: шардирование, GRPC, HTTP, HTTP/2, Outbox-паттерн, SQL и корректные индексы для запроса.

К сожалению, с данным результатом мы не сможем подобрать для тебя проект.

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

Спасибо за уделенное время!

===

Возникает вопрос - этот фидбек вообще проходил через технического специалиста, ответственного за найм?

Не видно взаимоисключающих параграфов? Это вообще, что такое? HR, возможно, этого не понимает, но видимо, к HR фидбек пришел напрямую от того парня.

Далее разберемся по хардкору.

Первое - так, базовые у меня знания аля вчера из универа, или большой практический опыт? Как-то определиться надо. У меня в linkedin все написано.

Но теперь технологии.

1) Шардирование - окей, был вопрос про шардинг по ID-шникам, с захардкоженным алгоритмом. Я описал почему это говно, и что возможно, если надо шардировать, то стоит рассмотреть также вынос части данных в NoSQL(потому что Web Scale, да). Претензия не совсем понятна, но спишем на то, что я не стал углубляться в то, какой бы алгоритм я применил. И без этого 2.5 часа все про всё заняло.

2) gRPC - честно сказал, что не работал конкретно с ним, но много работал с протобуфами. Извините, это что, проблема? Вы вообще понимаете, что вы пишете? Полдня, нужные для чтения документации по gRPC, это проблема? Или собеседующий решил что я какой-то вася который вообще не понимает в RPC, хотя я, уже бородатый дед, видел и DCOM, и .Net Remoting, и WCF, и не говоря уже про кролик в котором тоже можно устроить RPC.

3) HTTP - от собеседующего было ноль вопросов, то есть вообще 0. Но далее в продолжении этого rant и про это будет.

4) HTTP/2 - да, сказал что не лез в нутро и всякое такое, и что вам нахер не нужен этот HTTP/2 если вы не пишите свой HTTP клиент. А если вы его пишите, то с вероятностью 99.999% вы долбоеб ебаный, наебываете работодателя и занимаетесь велосипедостроением, потому что примерно для _всех_ существующих, и не совсем мертвых, языков и платформ, Http-клиенты как бы есть. И для Common Lisp, и для Haskell, и да уж тем более для сраного .NET - он даже там так и называется HttpClient, этот класс. Вот если бы вы не о хуйне какой-то типа реализации Http/2 спрашивали, а например о том, какие особенности с этим HttpClient есть, его переиспользование итд - и я бы на этом завалился - вопросов у меня бы не было. Но это? Вы там что, Тинькофф, свои реализации Http-клиентов под дотнет пишете? Ебанулись чтоли? Ну и, что вам еще рассказать? Какие оптимизации в мать его TCP/IP стеке FreeBSD есть? Пиздец, короче. Ладно.

5) Outbox-паттерн. Блядь! Я потратил довольно много времени, рассказывая собеседующему о том, как на одной из последних работ, мы этот кривой сраный велосипед вырезали, и заменяли на кролик. По ходу дела задели и RMQ и Kafka в обсуждении. Outbox-паттерн? Да, я блядь, даже забыл как это называется, или может даже не знал, потому что когда я вижу, что SQL базу начинают использовать хуй пойми для чего, для логов, или вот для этого говна, я называю это кривой велосипед и маркирую для удаления. И это, блядь, главный навык опытного разработчика, вообще, Senior, если хотите - знать не какие-то названия "паттернов", и как их писать, а знать что писать нахер не надо. Мало ли я видел кривых велосипедов, чтоли?

6) И самое главное, самый пиздец. Тут я просто охуел. Перечитал. Еще раз охуел. Пошел писать в чаты, где мне порекомендовали все же составить этот отзыв.

То есть вы понимаете, мне сказали, что я не знаю SQL?

Значит, там была простенькая типовая задачка. Я ее, естественно, решил, методом CTE + оконная функция.

Вообще без нареканий. Потом немного поговорили про оптимизацию запросов, я примерно рассказал пару вещей, приведя сторонний код, на тему того как я обычно читаю план запроса и куда смотрю. Ну и про nested loop-ы из семи залуп и все остальное.

Пиздец в том, что когда я начал писать row_number() over(...) собеседующий мне прямо сказал что он, лично подзабыл что это такое и зачем. Т.е. прямо, без всяких там подъебов, встречающихся на собесах. Понимаете да? Это как забыть как пишется foreach в C#. То есть человек, сам, нихера не знающий SQL, отправляет на меня фидбек что я полный долбоеб, и не знаю SQL.

То есть, как это не знаю, SQL? Я пошел, покурил, еще раз перечитал, и подумал. Нет, может это я реально шизанулся? Но тогда, а чем я занимался больше 10 лет, когда писал разнообразные Enterprise-Quality говна и подтирал вот в том числе за всякими аутсорсниками их парашу, написанную на очередном кривом ORM, которая на одно простое действие высирает кучу запросов? Что я делал когда добавлял в сраную джангу некоторые возможности LINQ? Как я это делал не зная SQL?

Как я блядь, ебаный в рот, внедрял PostgreSQL и оптимизировал там Spatial-индексы?

Почему, у меня, ебаный в рот, некоторое время были натурально въетнамские флешбеки от словосочетания Distributed Transaction Coordinator?

Нахуя я внедрял MongoDB и ElasticSearch, выявив проблемные места в одной крупной системе, Написанной Людьми, Знающими SQL? (и в этой системе до сих пор все заебись работает если что)

То есть, я получаю от человека, который, по факту, не знает что такое оконная функция, и который, наверное, кроме сраных кривых ORM, с базой в жизни никак не общался, фидбек, что я не знаю, блядь, SQL?

Я охуел.

Пойду, блядь, еще вспомню, в каких еще местах я не знаю SQL. И HTTP блядь.

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

Блядь.

"Предлагаю попробовать свои силы повторно через полгода"?

Тинькофф, через полгода, с такой политикой найма(ну и, Известными Событиями) - некуда будет собеседоваться, вы просто развалитесь потому что. Не будет никакого "IT-банка".

8 комментариев:

sv комментирует...

А что я кстати должен был увидеть по этой ссылке?

eao197 комментирует...

@sv

По какой из ссылок? В посте их пять штук.

sv комментирует...

Которая
https://github.com/Lovesan/D3DWorkshop/blob/master/D3DWorkshop/D3DWEffect.cpp

eao197 комментирует...

@sv

> Которая
https://github.com/Lovesan/D3DWorkshop/blob/master/D3DWorkshop/D3DWEffect.cpp

Качество C++ного кода от lovesan. Лично я от человека с его апломбом ожидал чего-то сильно получше.

sv комментирует...

А чего конкретно получше? Я конечно просмотрел только первую треть файла, но в глаза особо ничего не бросилось. Код как код

eao197 комментирует...

> А чего конкретно получше?

Я на LOR-е в свое время уже высказал ряд моментов, за которые мой взгляд зацепился: тут.

> Код как код

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

Но при этом любящим бить себя пяткой в грудь.

sv комментирует...

> А так обычный код, который написан средней руки разработчиком

А разве это плохо? В какой-то момент начинаешь ценить код, который написан без всяких изысков.

eao197 комментирует...

> А разве это плохо?

Для меня "средней руки" -- это не положительная характеристика. Программистов можно разделить на плохих (и откровенно плохих), средней руки, хороших и крутых (и очень крутых).

В команде желательно иметь хороших и крутых. И работать желательно с хорошими и крутыми.

А "средней руки" -- это значит, что косячить будет не сильно. Но и ничего толкового самостоятельно не сделает.

> В какой-то момент начинаешь ценить код, который написан без всяких изысков.

Я на LOR-е выдвинул ряд претензий, которые, на мой взгляд, объективны. Это не "без изысков", это как раз с "мелкими косяками".