face

Я смотрел лаже в лицо и не боюсь называть её по имени

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

Я наблюдаю, как машина глохнет, потом ещё раз глохнет, потом, после снятия с ручника, рывками начинает движение и на середине дистанции врезается в бордюр. Даёт задний ход, снова глохнет, теперь поперёк дороги. Ещё раз врезается в бордюр, поднатужившись, наезжает на него и тут же цепляет зеркалом дерево. Кандидат выходит, поправляет зеркало, догоняет скатывающуюся назад машину, ставит на ручник. Машина глохнет. После снятия с ручника трогается и врезается в дерево уже бампером. Задний ход, машина съезжает с поребрика на дорогу и каким-то чудом становится по направлению движения. Газу! Заветный знак «P» маячит вдалеке, как мираж, не становясь ближе, — но это потому, что кандидат газует на нейтрали. Новая попытка, и машина с визгом трогается с места, поднимая асфальто-резиновую пыль. Чуть было не пролетев мимо нужного поворота, машина в последний момент останавливается со скрипом тормозов. Не вписываясь в поворот, она ещё раз проезжает по поребрику и останавливается на противоположной от знака «P» стороне дороги.

Кандидат выходит из машины и объясняет свою езду так: «Вы знаете, я вообще-то готовился к собеседованию. Мне не сказали, что будет практический тест».



На самом деле, конечно, всё было не так. Собеседование было на должность не водителя, а программиста, в резюме пять лет одного языка программирования и восемь — другого, а задание… я не буду его здесь публиковать, но, в общем, если вы умеете программировать, оно будет для вас почти оскорбительно простым. Я провожу собеседования по Skype и пользуюсь Google-документом c общим доступом, чтобы наблюдать, как кандидат решает задачу, в реальном времени.

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

Я сейчас не говорю о кандидатах, которые не дотягивают до заданного нами высокого уровня. Я говорю о способности решить задачу, которую может без проблем решить любой минимально компетентный программист. Это как для водителя проехать по прямой и свернуть за угол. Как для автомеханика подкачать шины. Как для медсестры дать больному таблетку. Как для шеф-повара приготовить бутерброд. Как для парикмахера подстричь налысо. Улавливаете, к чему я? Как для врача выписать слабительное. Как для сисадмина перезагрузить компьютер. Как для физрука покрыть коня матом. Как для электрика заменить лампочку. Уже стало наглядно, или продолжать? Как для преподавателя поставить студенту «автомат». Как для депутата проголосовать как все. Как для фотографа сделать селфи. Как для блогера убрать простыню под кат.

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

Помимо классической отмазки «я готовился к устному собеседованию» (и поэтому башку с собой не взял — в ней цветы стояли, не хотелось выбрасывать), почти от каждого из безнадёжных кандидатов я слышу просьбу разрешить им писать код в другом редакторе (IDE) и сразу отлаживать его, а уж потом показать мне результат. Заманчиво, но протокол собеседований неумолимо требует, чтобы я пил чашу страдания до дна и наблюдал каждую судорогу, с которой появляется на свет мертворождённая программа.

Раньше перед собеседованиями эти люди ещё присылали образцы кода, которые они писали для себя или по работе. Качество этих образцов обычно было не самым лучшим, но это хотя бы как-то ездило, а не хромало на месте вприпрыжку. Разгадку подсказал мне однажды сам кандидат: он объяснил, что обычно, когда пишет код, то сразу же пытается его запускать и редактирует вусмерть, пока хоть как-то не заработает. Вот как это делается! Если достаточно долго месить чан с перловой кашей, в синтаксическом мусоре можно рано или поздно узреть лик Ларри Уолла. Когда удалось нашаманить, чтобы текст компилировался, то можно выпускать бета-версию, а когда программа сможет хоть раз не упасть и не зависнуть — финальный релиз. Остальные баги найдут пользователи.

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

UPDATE: Меня уже пару раз спросили, кто такой бельк.

Понравился этот текст? Разместите, пожалуйста, его в своём журнале, а также подпишитесь на мои публикации.

Featured Posts from This Journal

  • Забивание шурупов гаечными ключами

    Развитие информационных технологий иногда напоминает извечный поединок сил Добра с силами Разума. Какие бы замечательные технические решения не…

  • Ворчание о дружественности

    Жило-было программное средство, никого не трогало, на массовый рынок не зарилось, а довольствовалось полупроцентом постоянных пользователей. Те, в…

  • XXI век: прощай, качество?

    Согласно одной истории с невыясненной степенью достоверности, на рубеже XIX и XX веков инвесторы считали автомобиль коммерчески бесперспективным…

Ну в общем писать код на бумажке или в гугльдоксе - действительно странное занятие. Как минимум там куча опечаток будет (а на бумажке ещё редактировать нельзя). Ты действительно думаешь, что человек должен потоком генерить сразу работающий код?
Ну и кстати многие ИДЕ действительно делает много всего такого что без неё тяжело с непривычки, даже принт и тот на память не помнят.
Кстати, если задачка на JS, я отдельно говорю кандидатам, что она не на знание DOM API, поэтому если он не помнит, как называется, к примеру, getElementsBy…что-то там, то можно выдумать правдоподобное название функции, которая могла бы там быть, и мы будем считать, что она есть.
Задание в студию.

Я с 90% вероятностью не напишу в гугль доке с первого раза программу, которая работает. Это не значит, что я херовый программист, это значит, что я часть работы просто делегирую IDE, компилятору и прочим подобным вещам.
Я не могу раскрывать задачи, которые использую на собеседованиях, но вот задачка примерно такого же уровня сложности. Подсчитать, сколько раз в текстовой строке встречается заданное сочетание из двух букв (именно в указанном порядке, регистронезависимо).

count(str, char1, char2)
Ну вообще то Вам повезло, что у Вас есть возможность
Устроить драйв тест, а вот при поиске менеджера по продажам и думаю ряда других технических профессий с этим труднее
Re: Ну вообще то Вам повезло, что у Вас есть возможность
Конечно. Но сделать что-то чуть более практическое, чем вопросы вроде «почему Вы хотите работать в нашей компании» и «кем Вы видите себя через пять лет», можно почти всегда. С продажником можно, например, разыграть по ролям звонок клиенту.
Я много занимаюсь с детьми, учу их решать задачи по физике и математике. И часто замечаю, что если после решения сложных задач с которыми он справился, дать ребенку простую он начинает городить такую чушь, что глаза на лоб лезут. Извините, если не к месту.
Ах, бедняжки кандидаты не привыкли к таким простым задачкам и от шока не могут оправиться всё собеседование.

Не смешите. Я провёл достаточно много собеседований, чтобы отличить несколько растерянного профессионала от полного дилетанта.
Бывший коллега проводит массовые собеседования, дает задачу - проверить правильность расстановки скобок в строке, где нет ничего, кроме скобок. Тех, кто справляется, просит написать решение для двух видов скобок. Потом для трех (:

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

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

Хуже, когда команда уже набрана, и в ней уже есть коллеги, которые любят вот так петлять, и руководитель у тебя, тимлида, спрашивает - ну почему ты не хочешь поручить N писать важную и большую функцию X? У него же есть опыт? А если что не так, ты проведи ревью и объясни, что, чтобы он больше так не делал? Ыргх.

PS. Кстати, тестовое задание от того самого коллеги, который так хотел поддержку SPDY. Вам было интересно, почему - я у него спросила, он сказал, что для его текущего проекта это актуально, чтобы не тратить трафик на handshake в интенсивном общении по REST.
Что-то я не помню контекста, мы с Вами уже обсуждали историю про SPDY?

Да меня все время интересует, как так, bbc.ru грузится моментально, а наши новостные сайты нужно терпеливо ждать. Видимо рукожепые побеждают.

Это не обязательно именно рукожопие, вернее, не только оно. Я подозреваю, что у BBC, помимо прочего, хорошие дорогие CDN.
Теперь понятно, почему так радовались на недавнем собеседовании, когда я смог написать пару строк в примтивнейшем задании. Видимо, уровень действительно так себе, и намучились ребята.
меня тут недавно на собеседовании попросили на листке бумаги написать простейшую иерархию классов и небольшой запрос с одним джоином

я дико оскорбился сначала, потом написал
на меня смотрели как на Б-га и сказали что берут меня прям вот сейчас

вообще, хорошо что уровень в ит так сильно упал
без работы на общем фоне не останемся никогда

Edited at 2016-01-05 03:49 pm (UTC)
Ай, придумать тестовое задание, написать к нему юнит-тесты, и тупую форму для загрузки.
Можно даже показывать человеку сколько тестов прошло.
А так да тока время терять.
Мы проводили эксперимент. Практика показывает, что люди, которым удаётся сносно выполнить домашнее задание, на собеседовании после этого часто не могут решить даже аналогичную задачу. Значит, пользуются всемогущим гуглом, помощью зала и т.п.
never mind the leaks, the RAM is cheap.

это я к тому, что избыточная производительность и дешевизна железа рождает вот таких вот чудовищ - а чо, сервер всё переварит.
Да уж лучше пусть сервер переваривает, чем такие вот авторы, которые предлагают самолично выдумывать tolower. Первым моим вопросом на эту задачу было бы - а не подскажите контекст, в котором вы пытаетесь эту задачу решить, у меня есть подозрения, что вы что-то намудрили с оптимизацией, вполне вероятно эту проблему можно решить более эффективно на несколько ином уровне. Правда, судя по заданию и по личной напыщенности, автор ищет code-monkeys и с профессионалами дела не имел.
бельк)))))))))))))))))))))))))))))))))))))
(упало лицом в чернику со сливками и захлебнулось)
Бельк, это, как зелёньк, только - бельк!
(Anonymous)
s = '1Adfg1a dfg1afdghfdgh1A'
ptrn = '1a'
count = len([1 for ch in s.lower().split(ptrn.lower())]) - 1 if len([1 for ch in s.lower().split(ptrn.lower())]) > 0 else 0
Тут я попросил бы кандидата попробовать обойтись без lower и split.
если вы хотите профессинональных автогонщиков, а собеседуете по факту неумелых велосипедистов, то кто здесь неудачник ?
Только эти велосипедисты заявляют почему-то о многолетнем опыте автогонок.
Здравствуйте!
Ваша запись попала в топ-25 популярных записей LiveJournal. Подробнее о рейтинге читайте в Справке.
На практике пока никто не отказался, узнав о такой форме проведения собеседования.
Мне даже любопытно стло что за задание... я не программист а админ, но кое что написать в состоянии, естественно.
И в чём сходство? У Вас теоретический тест, у меня практическое задание.
Однажды... лет 12 назад, меня попросили заценить творение небезызвестного Паруса.
Парус его втюхал минэкономразвитию, под мудрым руководством Грефа-без-процентов, кажется за 5 с половиной миллионов рублей.
Но это мелочь. Немелочь заключалась в стоимости "внедрежа". Маленькие регионы по три, средние по пять. Особо активные - по десять миллионов рублей за внедрение софтинки. Ну в целом чес получался около полумиллиарда за всю Россию.

Теперь о софтинке.
Это была клиент-серверная база "госзакупки" с классификатором товаров и интернет-подрядчиками.
Фактически - точная копия стандартного интернет магазина наоборот.
Красная цена продукту 1 килобакс.
Она была нежизнеспособна. В том смысле, что в практическом использовании ей пользоваться было нельзя. Классификатор одномерный, а юридически программа противоречила законодательству РФ.
Моему региону предлагалось заплатить за внедреж 3,2 миллиона, чиновники хотели честно понять за что. Я с ними приехал в парус. В течение двух часов нашего пребывания в парусе руководство не смогло найти специалиста, способного ответить на два моих вопроса. Мы уехали и решили отказаться.

Надо ли говорить, что в итоге наш регион все равно оплатил требуемую сумму? 3,2 миллиона получил парус, из них 0,4 млн вернул назад в регион гупу, из них 0,1 млн получило мое ооо, из них 0,002 млн получил наш сотрудник за работу. Внедреж он сделал за два дня. Ну и ладно...
Через полгода агоний эта ФЦП умерла и про нее забыли окончательно. Повесили вместо клиент-серверной системы тупо доску объявлений.

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

Edited at 2015-08-07 12:22 am (UTC)
Возможно, это специфика именно России, причём именно определённой области в рамках отрасли. Впарить государству задорого фигню — это традиционный способ обогащения, с нормальной коммерческой разработкой не имеющий почти ничего общего.

Вы же не станете отрицать, что сейчас происходит бум разрабоки программного обеспечения? Реально нужного. Начиная от Spotify, Uber, Duolingo, Airbnb, которые так заметно меняют нашу жизнь, и заканчивая тысячами мелких сервисов и приложений — их же пишут разработчики. Вот это и есть «мясо» отрасли, по сравнению с которым сегмент распилочных госзаказов нервно курит в сторонке.
Слаборазвитых большинство.
Слаборазвитые обыватели составляют большинство любого государства.
Вот вы не знаете естественных взаимосвязей всех общих понятий русского языка и не переживаете.
Ни в толковых словарях их нет, ни в школе не учат.
Попроси любого политика или чиновника назвать антагонизмы для понятий: общество, человек, толерантность, свобода, права...
НИКТО НЕ ОТВЕТИТ ПРАВИЛЬНО.
Re: Слаборазвитых большинство.
Вы читали пост, который комментируете? В нём разве написано, что я задаю кандидатам вопросы на знание теории?
Еще один вариант на C
ideone it!
char mytolower(char ch) {
    return (ch >= 'A' && ch <= 'Z' ? ch-('A'-'a') : ch);
}

int count(const char * str, char a, char b) {
    int cnt = 0;
    a = mytolower(a);
    b = mytolower(b);
    for (; str[0] && str[1]; ++str)
        mytolower(str[0]) == a &&
        mytolower(str[1]) == b &&
        ++cnt;
    return cnt;
}

int main() {
    assert(count("eEe", 'E','e') == 2);
    assert(count("repetITion", 't','i') == 2);
}
Re: Еще один вариант на C
Здесь я попросил бы избавиться от избыточных вызовов mytolower. Сейчас делается больше вызовов, чем необходимо.
Самый дикий случай в моей практике.

Консультировал чувака по допечатке. Насторожили вопросы. Вроде чувак адекватный, хоть и не специалист, но вопросы задает в стиле "какое слабительное выписать от ангины".

В общем, выяснил. Парень связался с типографией и запросил профиль (что является признаком аккуратного специалиста). В типографии ему сказали, что профилей они не дают (!), но могут прислать фотографию, чтобы он сам привел цвета на мониторе под искажения при печати (!!!).

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

Я прям представил, как пара мужиков решила печатью заняться, купила в кредит пару ушатаных печатных машин, арендовала подвал и вышла на рынок. Причем московский. Пареньку снял лапшу с ушей, надеюсь у него все хорошо.
Примеры халтуры есть везде, да. Отрасль разработки софта в этом совсем не уникальна.
A язык на выбор?
Function CountChars (s as string, ch1 as string, ch2 as string) as integer
Dim nPos as integer
nPos=Instr(s,ch1 & ch2)
Do while nPos>0
nCount=nCount+1
nPos=Instr(nPos+1,s,ch1 & ch2, vbTextCompare)
loop
CountChars =nCount
End Function
Всего-то делов


Я на собеседованиях предлагаю язык на выбор из тех, что мы используем в работе: C, JS и Java.
Конечно, «белёк». В тексте слово употреблено в винительном падеже: «Господь убивает белька». И если читатель этого слова не знает, то вполне может спросить, кто такой бельк.
Интересные собеседования у программеров)).. У сетевиков как то все проще - можно оценить знания человека не только синтаксическими задачами ,но и специфическими вопросами о протоколах...