Джихад-интервью или кофе в пятницу

Ikemefula Ikemefula
Получил намедни рассылку о новых вакансиях. Всё такое новое, в глянце, команду надо набирать, код писать чуть не с нуля, заказчик толковый, планы большие. Технологический стек — не мечта, но близко к этому и именно там, где я три последних года качался. План минимум — узнать побольше, проверить скилы. Кроме всего этого была интрига примерно такого плана: "Если бы ты пообщался с нашими специалистами, ты бы смотрел на мир другими глазами". Собственно именно это и побудило откликнуться на рассылку. Каких то осязаемых планов менять работу не было.

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

Про кофе. Американо умеют делать очень немногие. Более того, мало кто понимает, что же за кофе такой, американо. Идея такого напитка — получить более мягкий вкус, который очень трудно получить в эспрессо с помощью экспериментов с помолом. Из тех немногих, кто умеет делать эспрессо, совсем немногие умеют делать американо. Вроде бы никакого кунгфу здесь нет — сварил эспрессо, долил горячей воды в правильной пропорции. Однако, не всё так просто. Умельцы варить кофе делают иначе. Зачем варить хороший эспрессо, если все равно разбавлять водой ? На этом оптимизаторы не останавливаются. Зачем доливать воду, если можно через заварку пропустить больше воды ? И вот фокус, кофе, мягко говоря, так себе. Проблема в таком американо в том, что слишком большое количество воды даёт перевареный кофе и вымывает труднорастворимые вещества. Такие вещества в правильно завареный эспрессо или не попадают, или попадают в небольшом количестве. Например кофеин. Правильный эспрессо содержит относительно мало этого вещества. Отсюда понятно, что американо получится адски крепким, а вкус будет так себе. У тех, кто эспрессо делать не умеет, американо никогда не получится. Часть оптимизаторов не останавливается даже на этом и делают смесь арабики и робусты, что бы дополнительно усилить крепость снижая цену. От такого кофе начинает молотить сердце, вылезают глаза, весь мир превращается в туннель, мышки — в ёжиков, а мухи — в слонов.

С утра выпил две чашки кофе. Вообще кофе пью каждый день и ничего необычного для меня не было. Тут, вероятно, был первый косяк. Кофе был незнакомый, но похоже слишком крепкий, самой адской заварки. От такого кофе я зверею, а от большой усталости становлюсь многословным. Я был хорошо выспавшись, можно было бы и без кофе потрещать. Фактически, усталость уже была просто чудовищной на начало дня. Все стимуляторы, даже легкие, как чай, кофе или сигареты, действуют очень неадекватно, если в наличии упадок сил и эмоциональный хаос. Стало быть, кофе был лишним, практически последней каплей. Я это понял уже после собеседования.

Собеседование началось сумбурно. Я заметил вопросник в руках интервьюера, попросил взглянуть и вычеркнул там всё, о чем смысла спрашивать никакого нет. Думал, сэкономлю время. Ан нет — два часа сражались за каждый паттерн, разницу в понимании ООП, принципов, оценок, короутин и прочих интересных вещей. Битых два часа у интервьюера было недоумение на лице и желание вернуть себе привычное кресло, отпраздновать Новый Год или хотя бы Рождество.

Первый вопрос — "Что такое ООП ?" Второй вопрос — "Что такое SOLID ?" Потом вопросы про каждую букву в SOLID, далее вопросы про MVC, MVP и MVVM. Потом в ход пошли паттерны Банды Четырёх, архитектурные изыски Node.js и разное другое. В самом конце пошли вопросы про "О-нотацию", структуры данных и тд. Слишком поздно я заметил, что интервьюер идет прямо по вопроснику, не отступая ни на йоту. Пудозреваю, кофе сделал своё дело. Я и так был уставшим, а под кофе я будто бежал непойми куда, непойми откуда, что бы раскрыть миру неизвестно какую истину. В целом, вопросы были интересные, но очень уж холиварные. К сожалению, беседовать пришлось без вспомогательных инструментов, как вайтборд или карандаш.

"Что такое ООП" — оч-чень спорный вопрос, слишком дискуссионный, слишком общий. ООП нынче имеет две основные ветви и некоторое количество побочных. Основные направления — симуловское ООП(популярное, но устаревшее) и смоллтолковское ООП(древнее, но актуальное). Побочные — уточнения Страуструпа, Скота Мейерса и отдельно — цельная теория у Бертрана Мейера. Мейер как бы объединяет симуловское и смолтолковское, неявно вписывая сюда и функциональное программирование. Отправной точкой в проектировании Мейера являются абстрактные типы данных(АТД). Несмотря на давнюю историю, АТД слабо известно в кругу адептов ООП. Но именно АТД и даёт ответы на очень многие вопросы. Вобщем, с идеями Бертрана Мейера я сильно согласен. Первым делом я приоткрыл свой взгляд на ООП (Абстракция, поведение, взаимодействие(управление), состояние). Мой собеседник, вероятно, не был готов к такому ответу и поначалу опешил. Было заметно, что он не согласен. Как он оценил такой мой ответ — не знаю. Пришлось переключиться на симуловский вариант. Интересный факт — яркий представитель симуловского ООП это язык С++. Про него автор парадигмы (и языка Смолтолк) Алан Кей сказал примерно так: "I can tell you that C++ wasn't what I had in mind" Смолтолковское ООП под этим углом можно назвать Истинное ООП. Нашло применение в динамически типизированых языках.

Принципы SOLID — от неожиданности я чуть не свернулся в трубочку. Это сильный звоночек, но я его проигнорировал.
Что же есть проектирование и как его проверить ? Это очень интересный вопрос. Факт в том, что синьор-разработчик собтсвенно тем и отличается от джуниора или миддла тем, что умеет проектировать. Я знаю слишком много людей, которые знают и умеют проектирование, но при этом не знают или не используют SOLID. SOLID вдруг стал вершиной проектирования ? Или самой распространенной техникой такого рода кунгфу ? Сильно вряд ли. Проектирование навроде SOLID или паттернов проектирования, это скорее уровень конструирования, нежели собтсвенно проектирование. То есть, когда проблема/задача уже решена, нужно только записать мысли кодом да оформить в виде компнентов и модулей. И вот на этом поле SOLID всего лишь один из многочисленных игроков. В самих буквах я слегка запутался. Что характерно, даже не услышал подсказки интервьюера.

Сам по себе SOLID довольно интересный подход. Принципы придумал/позаимствовал Дядя Боб Мартин, известный автор множества книг. На мой взгляд, Мартин в своих книгах притягивает принципы как бы за мошонку, хотя примеры кода и компонентов в его книгах местами просто шикарные. В аббревиатуре SOLID сомнения не вызывают только несколько букв — принцип замещения Лисков и принцип инверсии управления(Мартин его формулирует чуть иначе). Остальные принципы немного мутные, чему в интернете и литературе полно доказательств. Проблема паттернов, принципов в виде аббревиатур в том, что это фактически набор шаманских практик. Работающих, но не у всех, без гарантии стоимости результата (и других свойств) и тд. а потому — шаманских. Требования, ограничения, абстрактные типы данных, coupling, cohesion, dependency, responsibility, агрегирование, делегирование, композиция — все это вобщем то базовые вещи. А вот паттерны и принципы — сильно вторичны. Смешно, но про SOLID я сам узнал на собеседованиях не помню в какой давности. Прочтя несколько книг Мартина, я вобщем не открыл для себя ничего нового. Liskov и IoC были известны, а остальные слишком относительны или спорные. Скажем, если бы я решил проповедовать принципы вещая всякое на каждом углу, я бы предложил чтото навроде АТД, принципы Лисков, инверсии управления, закон Деметры и принцип непрерывности(очень важное кунгфу с точки зрения экономики проекта). На мой взгляд, сам SOLID и подобные вещи появились потому, что само по себе симуловское ООП 'не летает'. Скажем, тот же Мейер уверенно отделяет класс-модуль от класса-типа, в отличие от Мартина. Отсюда ясно, для чего ему нужны абстрактные типы данных или принцип замещения Лисков. Мартин этого делает крайне невнятно, а потому вслед за SOLID у него появляется FIRST — как проектировать тесты. У Мейера ответ находится в теории АТД — контракты, предусловия, постусловия, инварианты и тд.

В целом, мой взгляд на проектирование такой — это непрерывное решение проблем, от старта обсуждений по проекту до конца суппорта с обязательной обратной связью. Принципиальная особенность проблемы — риски и наличие неопределенности. Исключая эту неопределенность, управляя рисками мы получаем набор задач или проблем помельче. Обратная связь дает шансы держаться на маршруте. Собственно, поскольку мы говорили о принципах SOLID, я не стал делиться разными гениальными идеями, откровениями и смачными историями Я немного ожидал, что на собеседовании будет чтото навроде 'спроектируйте' или 'что проектировали и каким образом' или 'как разрешить вот такую проблему'. Сильно думаю, обсуждение принципов сроди вопросам жонглёру навроде: 'А как вы шарики подбрасывате, так или иначе ?'

Дальнейшие вопросы — паттерны, моки, MVC и разные другие тонкости. Поначалу я начал рассказывать паттерны не по той книге, но быстро переключился на GoF. К слову о GoF — несмотря на долгую историю до сих пор находится слишком много трактовок как конкретных паттернов, так и паттернов в целом. Очень странно было отвечать на вопросы в этой теме, не имея ни доски, ни ручки, ни бумаги и потиху я начал терять спокойствие. В каком то смысле пришлось приоткрыть некоторые секреты стиля Журавля — размахивать руками, таращить глаза, чесать затылок и разные другие месте. Интервьер моих взглядов не разделял, изредка возражал голосом и в целом демонстрировал несогласие. После MVC галопом пронеслить по вебу, асп.нет, node.js и разным другим вещам. Из очень забавных вопросов были вопросы про вычислительную сложность и разные вычислительные модели. Тут, правда, интервьюер сам 'подставился', когда начал задавать вопросы навроде "сколько будет поискать в дереве ?" В каком дереве ? По какому принципу размещены данные ? Что искать ? Как искать ? Я так разошелся, что решил слегка пошутить. Было подозрение, что товарищ спёкся, я задал встречный вопрос и после ответа брякнул: "Вам светит Нобелевка !". Мулька в том, что у товарища не было ни времени(чем я и воспользовался), ни сил (он сам 'подставился') дать корректный отпор даже с учетом того, что его ответ был абсолютно правильным. Шутка была получилась очень смешной для девушки HR и менеджера. Вообще, они и до этого отпускали смешки в некоторых моментах.

Оглядываясь назад, замечаю, что моё выступление вызывает некоторую долю недоумения у меня самого

Итоги:

Контора
0 офис в стратегическом месте
1 SOLID в вопроснике откровенно неудачная идея. Прежде всего потому, что
а знание принципов и само проектирование две большие разницы.
б далеко не факт, что кандидат читал именно те книжки, которые писал Дядя Боб Мартин
2 Отсутствие доски, бумаги что бы отвечать про паттерны, принципы, архитектуру это сильно ниже среднего. Именно умение выражать мысли с помощью рисунка очень много говорит о кандидате
3 Девушке HR и менеджеру! не стоит смеяться вслух, как это было на интервью
4 было ощущение путаницы и неразберихи в некоторых вещах
5 Вопросы кастомера остались за кадром, их 'заполнили' на последней минуте одной транзакцией. Сильно думаю, с них и надо было начинать, ибо кастомер первичен, а большинство участников в цепочке всего лишь посредники.

Эксперт
0 выдержал эмоциональную атаку довольно достойно и вел себя корректно
1 хорошо отвечал на мои встречные вопросы
2 хоть я с ним и не согласен во многом, но товарищ достойный
3 незачем идти по вопроснику, что бы проверить все темы из него. Тут помогает несложное кунгфу с рисунками на доске.
4 один час на ООП, мягко говоря, многовато
5 структуры данных всё таки требуют точных вопросов, например список и массив это немного разное, в абстрактном списке например нет рандомного доступа к элементам.

По мне
0 рад, что выяснил многие важные для себя вещи
1 "Паттерны из какой книги мне нужно перечислить ?" Ответы в таком духе мне вобщем и самому не нравятся, понты
2 Шутка про Нобелевку — примерно как удар если не ниже пояса, то близко к этому
3 Эмоциональное спокойствие было утрачено и очень рано
4 устал еще сильнее и фактически к вечеру был близок к нервному срыву
5 пропало желание развивать вопрос с этой организацией. Пока не рефлексировал детально на эту тему.
6 В целом, ощущения после собеседования — как будто бодун после хорошей пьянки

С другой стороны, эта самая другая сторона могла увидеть происходящее несколько иначе. Что именно они — боюсь даже предположить Собтсвенно, сам я провожу много собеседований и всегда стараюсь бережно обращаться с кандидатом, кроме специальных случаев. Произошедшее в пятницу никак не укладывается в мой многолетний опыт собеседований с обоих сторон. Однажды я хотел написать книгу про забавные истории на собеседованиях. Буде появится желание начать такую книгу, думаю, такое "Джихад-собеседование" будет не самой скучной историей.
wildwind
wildwind
22.12.2015 04:02
Здравствуйте, Ikemefula, Вы писали:

I> Про кофе. Американо умеют делать очень немногие.


Первый раз встречаю ИТ-шника, разбирающегося в кофе. Респект.
Я привык, что в интернете можно найти ответ на любой вопрос. Я не люблю думать. Зачем думать, если всё уже придумано до меня? © Zenden@RSDN ::: avalon/1.0.442
consign
consign
25.12.2015 05:35
Здравствуйте, Ikemefula, Вы писали:

Здравствуй, дорогой дневничок...
По моему, тебе по прежнему остро необходимо отдохнуть.
Ikemefula
Ikemefula
25.12.2015 06:46
Здравствуйте, consign, Вы писали:

C>По моему, тебе по прежнему остро необходимо отдохнуть.


Да