Часть 1
19 августа 2017 г. в 23:58
В далекие смутные времена, когда я еще только окончил технический вуз и искал работу, мне довелось проходить собеседование в одной небольшой частной IT-компании.
Компания называлась «WonderSoftLand», но я так до сих пор и не понял, в чем заключалась ее деятельность. Провалив энное число собеседований в нормальные фирмы, я, отчаявшись, откликнулся на опубликованную на одном сайте вакансию «Middle C# Developer», предоставляемую «WonderSoftLand». Надо сказать, уже с первого знакомства с фирмой, она показалась мне странной. Хотя бы потому, что ответом на мой отклик было следующее:
Дорогой соискатель!
Прглашаем тебя ровно вшесть часо впройтиттсчсы заключительный этап собседоавния.
С собой иметь кружку и десять пряников.пппппппппппппппппппппппп
С ув Софья Садовая, HR-manager
По всей видимости, менеджер печатала ответ глубокой ночью, и окончание предпоследней строки было набрано носом. Тем не менее, тогда я не обратил на это внимания. Получив приглашение, тотчас же поехал в офис.
Компания располагалась на окраине города, на двадцатом этаже бизнес-центра, похожего на мухомор. Поднявшись на нужный этаж, я оказался в небольшом холле, который мне сразу же не понравился: ни одного окна, как следствие, спертый воздух, усугубляемый тяжелым запахом плесени и табака. В дальнем углу, у двери, за рабочим столом, также похожим на гриб, сидел охранник в синей шинели и, откашливаясь, курил трубку.
— Кто? — хриплым, пропитым голосом грозно спросил охранник.
— Амантий Буравсон.
— Куда?
— В 2048-й офис.
— Зачем?
— На собеседование.
— Зачем?
— Устраиваюсь к вам разработчиком.
— Зачем? — я уже начал думать, что охранник робот, который попал в бесконечный цикл и не мог остановиться.
— Затем, что мне нужна работа, — все так же невозмутимо отвечал я.
— Тогда иди работать грузчиком. Или, на худой конец, сантехником.
— Спасибо за совет, но я программист.
— Развелось этих программистов, — проворчал старый охранник. — Толку никакого, только жрут кислород.
— Очень признателен Вам за интересную информацию. С удовольствием бы послушал Вас, но опаздываю на собеседование.
— Я тебя не держу. Приложи пропускную карточку.
— Нет у меня карточки, я же здесь первый раз.
— В ящике с одной стороны пропуск «туда», с другой стороны пропуск «обратно».
— С одной и с другой стороны чего? — меня выводили из себя подобные неопределенности вроде «пойди туда», «принеси это», и тому подобное.
— Стола! — огрызнулся охранник и продолжил курить трубку.
Достав из обоих ящиков круглого стола два пропуска, я протестировал оба из них. Второй оказался «туда». Тот, что «обратно», я положил в левый карман и поспешил прочь от этого безумного философа.
Я вошел в переговорную, являвшую собой просторную комнату, без окон, с грибком на стенах. Разве что запах курева был менее выражен. Посередине комнаты стоял длинный стол из желтого пластика с хаотично разбросанными на нем листками бумаги и ручками.
За столом, положив голову на стопку резюме, спала миниатюрная дама в очках со светлыми спутанными волосами. Должно быть, HR-менеджер[0].
Тихо и аккуратно, чтобы не разбудить менеджера, я сел на первый попавшийся стул.
Как вдруг дверь в соседнюю комнату хлопнула, и оттуда выскочил долговязый тощий человек в ботинках пятидесятого размера, в сером свитере и серых тренировочных штанах.
— Мест нет! Тестировщиков больше не принимаем! — крикнул, шепелявя, человек в свитере. Я пригляделся повнимательнее: глаза сходились на переносице, два передних зуба сильно выступали, а огромные лопоухие уши напоминали эхолокаторы.
— Позвольте, — ответил я. — Но я соискатель на должность разработчика.
— Я Мартын Зайцев, менеджер по проектам, — представился странный человек.
— Приятно познакомиться.
— Хотите кофе или какао с чаем? — перевел тему Мартын.
— Кофе, если можно.
— Увы, кофе нет. И какао нет.
«Нечего и предлагать», — подумал я, но вслух ничего не сказал.
— Вы, я так полагаю, на собеседование?
— Так точно, — ответил я.
— Сейчас придет тимлид[1], и мы начнем. А я пока задам общие вопросы. Если Вы, конечно, готовы на них ответить.
— Я готов, — уверенно ответил я.
— Значит так, вопрос первый: почему Вы выбрали именно нашу компанию?
— Мне понравилась ваша идеология, — вдохновенно соврал я. Поскольку, как уже отмечалось, я не понял, в чем она заключалась.
— В резюме Вы указали желаемую зарплату. Вопрос, зачем Вам столько денег?
Если честно, я не был готов к такому повороту событий, так как указал зарплату чуть ниже средней по городу. Поэтому, немного подумав, ответил:
— Чтобы инвестировать в самообразование и, тем самым, совершенствоваться в выбранной профессии.
— А зачем Вам совершенствоваться? У Вас и так, судя по миллиардам строк кода, которые я насчитал в Вашем портфолио, все в порядке. Да, кстати, у меня строк кода все равно больше! Но Вам до меня как Меркурию до Нептуна — никакое совершенствование не поможет.
«Пустое бахвальство», — подумал я. Но промолчал. Все эти споры, касающиеся некоторых физических величин, обычно ничем не заканчивались. Разве что дракой.
— Я за оптимизацию кода, — ответил я. — Стараюсь писать лаконично и понятно.
— А я предпочитаю громоздкий, неуклюжий и зловонный код, от которого все программисты падают в обморок, а я с удовольствием потираю руки от чувства собственного превосходства.
«Все с тобой понятно», — подумал я. «Тот еще сноб. Чистой воды гуманитарий, в программировании толком не разбирается, однако уже считает себя экспертом».
— Последний общий вопрос: расскажите о своем хобби?
— Я певец в любительской опере, — ответил я, ничуть не стесняясь своего второго любимого занятия.
— Певец? Прекрасно! Какой у Вас голос?
— Сопрано, — так же невозмутимо ответил я, будто отвечал, какая сегодня погода.
— А какая у Вас ориентация?
— Мне нравятся женщины, — честно ответил я, хотя вопрос показался мне слишком личным и не подходящим для собеседования.
— Вы женаты?
— Почему Вас это интересует?
— Так, из любопытства. — Зайцев на минуту заткнулся. Воцарилась пауза, которую прервал храп HR-менеджера с другого конца стола.
— А мы с тимлидом тоже очень любим петь, на обеденном перерыве, — задумчиво произнес Мартын Зайцев.
Я пока воздержался от комментария, хотя и был возмущен характером «общих» вопросов.
— Что-то тимлид задерживается, — Мартын Зайцев взглянул на свои умные часы и со всей силы топнул ногой в деревянный пол.
В полу около стола с грохотом открылся люк, тщательно скрываемый квадратным ковром, и из люка вылез еще более высокий и тощий человек, с горбатым носом, бледным лицом и волосами дыбом. На нем были полосатые брюки, майка с изображением рекурсии (телевизор в телевизоре в телевизоре… и так далее) и отдельно натянутые на тощие руки ядовито-зеленые рукава.
— Приветствую, меня зовут Гарик Шапкин, я тимлид группы райтэнда[2], лефтэнда, заоблачных[3] технологий, дизайна интерьеров и прочее, прочее, прочее.
— Рад знакомству, я Амантий Буравсон, ваш будущий C#-разработчик.
— Оч-оч приятно, — пожал мне руку тимлид, если быть точнее, он изо всех сил ее тряс. Я вырвал руку из его клешни. — Вам доводилось работать в Абажуре?
— В Ажуре[4]? Да, приходилось, — ответил я.
— Нет-нет, мы не используем мелкомягковский ажур, у нас свой заоблачный абажур в форме ледяного гриба, — продолжал Шапкин.
Надо сказать, меня немного насторожило пренебрежительное отношение тимлида к компании, чья платформа (а именно, .NET Framework) использовалась здешними разработчиками и самим же тимлидом.
— Наш соискатель тоже любит петь, — сообщил Зайцев Шапкину.
— О! Это превосходно! Я недавно записал диск с итальянскими песнями в исполнении себя. Вот послушайте.
Тимлид взгромоздился на стул и пронзительным тенором, переходящим на крик, как заорет:
Нет интерфейса красивей консоли[5]!
В ней нету места ничему, лишь тексту!
Черный экран ее будто мгла ночная!
Нет интерфейса красивей консо-о-оли!
Пусть мо-о-оре текста тебе пришлю я,
Ты все поймешь, на все ответишь…
Console, console mio!
Write line to me, read line from me!
— Брависсимо, Вы просто Паваротти, — с натянутой улыбкой предпринял я попытку комплимента, хотя и незаслуженного.
— Неправда, я лучше, у меня текст оригинальный.
— Хорошо. Я так понял, вы используете свои собственные облачные технологии. А что насчет самой среды разработки? Mono?
— Нет, фу, это противная среда! — замахал руками тимлид. — А у нас даже не среда, а четверг!
Я не успел оценить шутку, как он сразу переключился на другую тему:
— Итак, у Вас сейчас пятьсот десять виртуальных баллов. За каждый вопрос, на который вы не ответили, снимается «два в степени (номер вопроса плюс один)» баллов. Нумерация начинается с нуля. Итак, поехали!
— Какой тип имеет Int33[6]?
— Кто написал «CLR via C Flat»[7]?
— Почему нельзя вызывать декомпозитор[8]?
— Когда придумали библиотеку Tumblr[9]?
К такому я был не готов: тимлид и менеджер, одновременно, с секундным перерывом, задавали мне разные вопросы, словно два потока, конкурировавшие за один ресурс — мой мозг. Мне пришлось осторожно их прервать.
— Господа, прошу вас. Можно по порядку?
— Поздравляем, тест на многозадачность Вы не прошли. Суммарно, минус тридцать баллов.
— Я указывал в резюме, что не являюсь мультитаскером, — ответил я.
— Неважно, продолжаем, — крикнул тимлид Шапкин. — Нужно отгадать пару загадок. Итак, первая.
— Шишел-мышел, первым пришел, последним вышел. Что это?
— Стек!
— Отлично. Следующая загадка. Шишел-мышел, первым пришел, первым вышел…
— Очередь! — ответил я, уже воодушевившись.
— Что такое очередь с приоритетом?
— Это структура данных, в которой обязательно должны быть две операции — добавить элемент и извлечь максимум…
— Не совсем! Это когда первым пропускают сынулю большой шишки, а не тебя!
Я в какой-то степени согласился. Но тимлид продолжал, не обращая внимания на мои ответы.
— Далее! Вопросы на позицию джуниора. Итак, чем классовое неравенство отличается от интерфейсного?
Я подумал, что это очередной вопрос на логику, наподобие тех, что задают в Google. С минуту поразмыслив, я предположил следующее:
— Если рассматривать иерархию классов в .NET, то мы увидим, что на самой вершине «иерархической лестницы» находится класс Object, а все остальные наследуются от него, тем самым образуя жестко заданную классовую систему. С интерфейсами ситуация аналогичная, с той лишь разницей, что «стоящие ниже» интерфейсы не наследуют реализацию…
— Стоп, стоп, стоп! — замахал руками Шапкин. — Это старо как C# 1.0! Я ожидал от Вас другого ответа.
— Минус тридцать два балла, — отметил Зайцев.
— Следующий вопрос: зачем сочинения Декарта занесли в Индекс[10]?
— Ну это совсем просто, — обрадовался было я. — Для того, чтобы быстрее эти сочинения находить в базе данных.
— Вздор! — крикнул тимлид. — Декарта занесли в Индекс, потому что он наследовался от ясеня.
— Что значит наследовался от ясеня? — я был в шоке от ответа ведущего программиста.
— Вот то и значит, — Шапкин показал пальцем наверх. На потолке дремал огромный паук.
— Минус шестьдесят четыре балла! — резюмировал Зайцев.
Я, собственно, ничего не понял, но пока счел все вышесказанное шуткой, хотя и весьма неудачной.
— Следующий вопрос: что представляет собой фельдмаршализация в .NET?
— Я знаю только, что такое маршализация: преобразование информации, которая хранится в оперативной памяти в подходящий для хранения или передачи формат.
— Нет! Фельдмаршализацией управляет фельдмаршал, а маршализацией Александр Маршал…
— Белый пепел растаял в белых глазах… — послышался голос с другого конца стола.
— Минус сто двадцать восемь баллов! — резюмировал Зайцев. Он отмечал баллы у себя в электронной таблице.
— И, наконец, главный вопрос! Чем мюмзики отличаются от светофоров?!
— Простите, Вы хотели сказать, чем отличаются мьютексы от семафоров? — переспросил я.
— Это я и без Вас знаю, молодой человек! — воскликнул тимлид. — А я хочу услышать, наконец, то, что я не знаю!
— Тогда, как Вы собираетесь оценивать ответ, который сами не знаете?
— Методом оценки сверху, — он посмотрел на меня свысока. — А если не поможет, методом оценки снизу, — он вновь взглянул на меня, но уже исподлобья.
— Все с вами ясно, — вздохнул я.
— Минус двести пятьдесят шесть баллов! — продекламировал Зайцев.
— Увы, Ваши баллы закончились.
— Иными словами, это отказ?
— Именно. Приходите лет, так скажем, через двести восемьдесят один.
— Мне тогда исполнилось бы триста лет, — подсчитал я.
— Даже если вам немного за триста, есть надежда стать крутым программистом… — вдруг послышался сонный женский голос с другого конца стола. HR-менеджер на минуту проснулась, приподнялась, а затем вновь уронила голову на стол. Зайцев с молниеносной скоростью успел подсунуть ей в качестве подушки тарелку с салатом «оливье».
— Всего доброго, господа, — я собрался было откланяться, но Зайцев меня не выпускал.
— По традиции, после каждого собеседования у нас чаепитие. Что, Шапка, хлебнем помоев?! — менеджер толкнул тимлида в бок локтем.
— Хлебнем, — угрюмо отозвался тимлид Шапкин и достал из-под стола три бутылки абсента.
Тут я уже вырвался из цепких лап менеджера и пулей вылетел из переговорной.
В холле сидела очаровательная блондинка лет восемнадцати и смотрела на часы.
— На собеседование? — поинтересовался я.
— Да.
— Тогда мой Вам совет. Бегите подальше от этой переговорной, от этого офиса, да и самого бизнес-центра. — крикнул я и через мгновение скрылся за дверьми лифта.
Примечания:
Справка:
0) HR-менеджер — специалист по набору персонала.
1) Тимлид — руководитель команды.
2) Райтэнд, лефтэнд — пародия на frontend (визуальная часть приложения), backend (логическая часть приложения).
3) Заоблачные технологии — пародия на облачные технологии.
4) Microsoft Azure — платформа облачных вычислений корпоративного уровня.
5) Это тимлид исковеркал песню "O, Sole mio". Консоль — программное обеспечение с текстовым интерфейсом. Console.WriteLine(), Console.ReadLine() — соответственно, команды в C# вывода на консоль и чтения с консоли.
6) Int33 — такого типа данных нет, есть Int32.
7) CLR via C Flat — видимо, тимлид написал свой аналог известной книги "CLR via C#" Дж. Рихтера только для языка С Бемоль.
8) "Почему нельзя вызывать декомпозитор?" — вероятно, он имел в виду деструктор.
9) Что за библиотеку Tumblr изобрели в этой шараге — остаётся лишь догадываться. Возможно, это набор классов для генерации фанфиков и публикации их на Tumblr.
10) "Почему Декарта занесли в Индекс?" — бедняга автор решил, что имеется в виду понятие индекса в базах данных, но что имел в виду тимлид, так никто и не понял.