Про тестовое задание. Попинайте пожалуйста.
От: _FRED_ Черногория
Дата: 04.09.12 06:17
Оценка:
Во время собеседования интересно выявить у кандидата умение использовать имеющиеся знания и навыки. По-моему, то, на сколько человек умеет пользоваться тем, что знает гораздо важнее (в профессиональном плане и долгосрочной перспективе) …широты, так сказать, знаний, которые "лежат без дела" (или используются не по назначению, что суть одно и то же). Позиция, конечно, спорная (велкам).

Для выявления сего я решил использовать не сложное задание, которое можно сделать тут же (возможно, немного прикинув на бумажке, обдумав ответ и что-либо вспомнив) или "дома", от чего некоторые отказывались, в виду принципиальной позиции. Все собеседования, на которых такая задачка предлагалась, проводились удалённо, по скайпу и кандидат мог использовать всё, что только пожелает и имеет в доступности — книги, гугл, …вычислительные мощности амазоновского облака

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

Суть задачи была в следующем: требовалось спроектировать элементарный, простейший, практически примитивный тип данных самого "широкого профиля" (как будто он будет добавлен в mscorlib на ровне с Int32, String, DateTime и т.п.). Например, тип данных, который представляет из себя отрезок времени между двумя датами (двумя точками на временной оси). По большому счёту, даже код показывать не нужно, достаточно рассказать, каким этот тип должен быть — что в нём было бы полезно учесть, что нужно было бы сделать, что не нужно.

Конечно, единственного правильного решения не существует (или их может быть много, не суть важно). Само решение даже не так важно — важно обсудить с кандидатом его же решение: "Это вот" было сделано за "тем-то", "это" для "того-то", а "это" не стали делать "потому-то" и "потому-то". Подвохов каких-то вроде нет: тут сам себе устанавливаешь правила-цели (что будешь делать), потом сам же выбираешь стратегию достижения-реализации (как будешь делать).

Для чистоты эксперимента, что ли, уберу под кат пару вещей, которые, как мне казалось, данное задание поможет проверить (возможно, не всем кандидатам я об этом говорил).
  Скрытый текст
Хотелось таким заданием проверить, на сколько кандидат
  • умеет обращаться с самыми (с одними из, на мой, конечно, взгляд) базовыми вещами библиотеки, с которой приходится работать (.NET/BCL)
  • сумеет спроектировать нечто непротиворечивое, сбалансированное что ли, согласованное с самим собой и с другими важными частями BCL решение (это, пожалуй, самое главное)

Я сам считаю задание достаточно сложным: при обсуждении решения можно поговорить очень о многом, да практически обо всём ключёвом как в дотнете так и в проектировании/архитектуре. Потому и интересным с точки зрения "задачки на собеседовании". "обо всём" расказывать никого не прошу

Поскажите пожалуйста следующие вещи:

Ну вот, теперь снова придётся что-то другое выдумывать, если меня ещё допустят к собеседованиям после таких каверз
Help will always be given at Hogwarts to those who ask for it.
Re: Про тестовое задание. Попинайте пожалуйста.
От: namespace  
Дата: 04.09.12 07:48
Оценка:
Если получаю такие задания/вакансии по почте, то сразу отправляю в корзину.
Либо ожидается четкая постановка задачи, либо подразумевается длительное ее обсуждение.
Второе тестирует аналитические способности,и здесь сразу возникают вопросы по процессам разработки в компании, дабы не попасть в CMM-1.
Работа в компании, где много свободы, и столько же хаоса, сильно на любителя.
Не забывайте, что собеседующий — лицо компании.
А задачки на собеседовании — отражение рабочих заданий, и делать то-не-знаю-что занятие не из приятных.
Re[2]: Про тестовое задание. Попинайте пожалуйста.
От: _FRED_ Черногория
Дата: 04.09.12 07:50
Оценка:
Здравствуйте, namespace, Вы писали:

N>Если получаю такие задания/вакансии по почте, то сразу отправляю в корзину.

N>Либо ожидается четкая постановка задачи, либо подразумевается длительное ее обсуждение.

Что в постановке не чётко сформулировано?
Help will always be given at Hogwarts to those who ask for it.
Re: Про тестовое задание. Попинайте пожалуйста.
От: Handie  
Дата: 04.09.12 08:08
Оценка:
_FR>Суть задачи была в следующем: требовалось спроектировать элементарный, простейший, практически примитивный тип данных самого "широкого профиля" (как будто он будет добавлен в mscorlib на ровне с Int32, String, DateTime и т.п.). Например, тип данных, который представляет из себя отрезок времени между двумя датами (двумя точками на временной оси). По большому счёту, даже код показывать не нужно, достаточно рассказать, каким этот тип должен быть — что в нём было бы полезно учесть, что нужно было бы сделать, что не нужно.

Сферический универсальный конь в вакууме сделать проще чем понять Ваше немыслимое задание.

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

Keep it simple stupid еще никто не отменял. Если отрезок между двумя датами отлично определяется double, то нефиг придумывать универсальный супертип с блэеджеком и шлюхами
Re: Про тестовое задание. Попинайте пожалуйста.
От: Donz Россия http://donz-ru.livejournal.com
Дата: 04.09.12 08:12
Оценка:
Здравствуйте, _FRED_, Вы писали:

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


ИМХО, задачка не стыкуется с тем, что написано в первом абзаце. Новый тип, который будет добавлен в базовую библиотеку, вряд ли создает 99.9% программистов. И вряд ли в ее решении будет что-то от реальных проектов.
Но такие задачки нужны, просто нужно понимать, что они мало пересекаются с повседневными задачами. Но это не отменяет необходимости знать базовые вещи. Короче, задача нужна, но проверяет она не то, что ты описываешь в первом абзаце.
Для начала стоит FizzBuzz задачку дать, можно сэкономить время.
Re[2]: Про тестовое задание. Попинайте пожалуйста.
От: _FRED_ Черногория
Дата: 04.09.12 08:21
Оценка:
Здравствуйте, Donz, Вы писали:

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


D>ИМХО, задачка не стыкуется с тем, что написано в первом абзаце. Новый тип, который будет добавлен в базовую библиотеку, вряд ли создает 99.9% программистов.


То есть, если програмист _рисовал_ например финансовые графики, то _рисование_ температурных уже не его профиль? (я специально выделил важное — рисование, а не предметную область)? Как можно браться за проектирование каких-то репозитариев/визиторов/контролов/билдеров и прочего (сейчас у любого в резюме сказано про паттерны проектирования) не умея проектировать …гвоздь?

D>И вряд ли в ее решении будет что-то от реальных проектов.


Ну вот конкретно в нашем проекте такой тип есть и используется очень и очень широко.

D>Но такие задачки нужны, просто нужно понимать, что они мало пересекаются с повседневными задачами. Но это не отменяет необходимости знать базовые вещи. Короче, задача нужна, но проверяет она не то, что ты описываешь в первом абзаце.

D>Для начала стоит FizzBuzz задачку дать, можно сэкономить время.

Это не для начала, это типа самое сложное
Help will always be given at Hogwarts to those who ask for it.
Re: Про тестовое задание. Попинайте пожалуйста.
От: dimaka Россия http://dmitry-pavlov.com
Дата: 04.09.12 08:24
Оценка:
_FR>Поскажите пожалуйста следующие вещи:
_FR>
Для задач не имеющих одного однозначного решения лучше не ставить рамок, а дать возможность кандидату показать себя. Многое выясняется даже по тому, как и какие кандидат задает уточняющие вопросы.

P.S. Вообще — моя личная практика показывает, что лучше разговаривать на собеседовании предметно — о конкретном проекте и конкретной работе. А потом на испытательном сроке кандидата — уповать, что ты не ошибся с его оценкой
Remote ASP.NET / C# Developer
Re[2]: Про тестовое задание. Попинайте пожалуйста.
От: _FRED_ Черногория
Дата: 04.09.12 08:26
Оценка: +1
Здравствуйте, Handie, Вы писали:

H>Keep it simple stupid еще никто не отменял. Если отрезок между двумя датами отлично определяется double, то нефиг придумывать универсальный супертип с блэеджеком и шлюхами


Будьте добры, ответьте в таком случае, зачем нужен тип DateTime, ведь если по вашим словам "отрезок между двумя датами отлично определяется double", то и точка на этом отрезке определяется даблом же и "нефиг придумывать универсальный супертип с блэеджеком и шлюхами"? Не касаясь конкретной реализации DateTime в BCL — что же, специальный тип для даты не нужен? А сделали его просто за ради переусложнить?
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Про тестовое задание. Попинайте пожалуйста.
От: Donz Россия http://donz-ru.livejournal.com
Дата: 04.09.12 08:31
Оценка: +1 :))
Здравствуйте, Handie, Вы писали:

H>Отрезок времени между двумя датами измеряется в секундах и для этого идеально подходит тип double.


А задачка действительно работает!
Re[3]: Про тестовое задание. Попинайте пожалуйста.
От: Donz Россия http://donz-ru.livejournal.com
Дата: 04.09.12 08:35
Оценка:
Здравствуйте, _FRED_, Вы писали:

D>>ИМХО, задачка не стыкуется с тем, что написано в первом абзаце. Новый тип, который будет добавлен в базовую библиотеку, вряд ли создает 99.9% программистов.

_FR>То есть, если програмист _рисовал_ например финансовые графики, то _рисование_ температурных уже не его профиль? (я специально выделил важное — рисование, а не предметную область)? Как можно браться за проектирование каких-то репозитариев/визиторов/контролов/билдеров и прочего (сейчас у любого в резюме сказано про паттерны проектирования) не умея проектировать …гвоздь?

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

D>>Для начала стоит FizzBuzz задачку дать, можно сэкономить время.

_FR>Это не для начала, это типа самое сложное

Так я и говорю, что перед твоей задачей стоит дать FizzBuzz, возможно и не придется тратить время на проектирование типа
Re[3]: Про тестовое задание. Попинайте пожалуйста.
От: namespace  
Дата: 04.09.12 08:45
Оценка:
_FR>Будьте добры, ответьте в таком случае, зачем нужен тип DateTime
Это вопрос риторический. И так можно скатиться до вопросов необходимости языков высокого уровня.
А вот зачем нужен Ваш новый тип — очень даже практический.
Кидаться проектировать, не поняв задачу до конца — не есть гут.

Очень часто люди делают вид, что поняли больше, чем на самом деле.©
Re[2]: Про тестовое задание. Попинайте пожалуйста.
От: _FRED_ Черногория
Дата: 04.09.12 08:46
Оценка:
Здравствуйте, dimaka, Вы писали:

_FR>>На сколько задание адекватное, то есть соответствует поставленным целям?


D>Если цель — это "пилить свой кусок проекта", то задание неадекватное. Если надо "пилить свой кусок проекта" — опишите человеку проект в двух словах (заодно сами будете четко понимать, что в нем и как ) минут за 10-15. А потом скажите что дескать вот в этом проекте вам надо будет "пилить свой кусок", интересно? Может человеку проект не интересен совсем и даже если он круто рубит — работать он не захочет нормально.


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

D>Или (если ему/ей таки интересно) пусть расскажет как будет "пилить". Тут вы сможете посмотреть — насколько человек "правильный" с точки зрения "гайдлайнов вашей партии" — а то может у кандидата принципиально иной (и что самое страшное — принципиально) взгляд на то как надо писать ваш проект. А это будет просто смерть тому многострочному мракобесию сложно-архитектурированному решению, которое создавалось годами


"Иной" — не страшно. Мне кажется, что не правильно, когда взгляд такой, что допускает не согласованные, непродуманные (возможно поспешные, когда необходимости в этом нет никакой, а наоборот важна некая фундаментальность что ли — при этом возможность продумать есть) решения. Неудачный дизайн одного куска приводит к необходимости делать что-то криво в другом месте или воротить костыли-адаптеры или т.п. Без этого конечно никуда, но чем больше продуманности будет в дизайне, тем проще будет рефакторить в дальнейшем.

_FR>>На сколько реально или даже должно выполнить его "тут же" за пятнадцать скажем минут (напоминаю, писать реализацию даже не обязательно, главное — обозначить решаемые проблемы, указать способ решения, не забыть перечислить все необходимые вещи, которые вы считаете обязательными).


D>Для задач не имеющих одного однозначного решения лучше не ставить рамок, а дать возможность кандидату показать себя.


Какие рамки в данном задании вам показались лишними? Какие вообще рамки вы видите?

D>Многое выясняется даже по тому, как и какие кандидат задает уточняющие вопросы.


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

D>P.S. Вообще — моя личная практика показывает, что лучше разговаривать на собеседовании предметно — о конкретном проекте и конкретной работе. А потом на испытательном сроке кандидата — уповать, что ты не ошибся с его оценкой


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

ЗЫ: при цитировании в списках форматер "ломается" и всё красит зелёным в некоторых браузерах (здесь
Автор: _FRED_
Дата: 19.06.09
). Можно просто в отквоченном убрать тег [list] (и даже уже [*] кажется надо убирать ).
Help will always be given at Hogwarts to those who ask for it.
Re[3]: Про тестовое задание. Попинайте пожалуйста.
От: _FRED_ Черногория
Дата: 04.09.12 08:47
Оценка:
Здравствуйте, Donz, Вы писали:

H>>Отрезок времени между двумя датами измеряется в секундах и для этого идеально подходит тип double.

D>А задачка действительно работает!

А то, я долго этот вопрос не решался задать, не хотелось терять такой повод для беседы
Help will always be given at Hogwarts to those who ask for it.
Re[3]: Про тестовое задание. Попинайте пожалуйста.
От: Handie  
Дата: 04.09.12 08:49
Оценка:
_FR>Будьте добры, ответьте в таком случае, зачем нужен тип DateTime, ведь если по вашим словам "отрезок между двумя датами отлично определяется double", то и точка на этом отрезке определяется даблом же и "нефиг придумывать универсальный супертип с блэеджеком и шлюхами"? Не касаясь конкретной реализации DateTime в BCL — что же, специальный тип для даты не нужен? А сделали его просто за ради переусложнить?

Для даты нужен тип DataTime, для разницы между датами DateTime не нужен.
DateTime — DateTime = number;

Если надо хранить DateTime начала — не проблема
Re: Про тестовое задание. Попинайте пожалуйста.
От: denisko http://sdeniskos.blogspot.com/
Дата: 04.09.12 08:52
Оценка:
Здравствуйте, _FRED_, Вы писали:


_FR>Конечно, единственного правильного решения не существует (или их может быть много, не суть важно). Само решение даже не так важно — важно обсудить с кандидатом его же решение: "Это вот" было сделано за "тем-то", "это" для "того-то", а "это" не стали делать "потому-то" и "потому-то". Подвохов каких-то вроде нет: тут сам себе устанавливаешь правила-цели (что будешь делать), потом сам же выбираешь стратегию достижения-реализации (как будешь делать).


Типы в стандартной библиотеке (любого языка) это все-таки инструменты, а не эйдосы по распространенному заблуждение. Поэтому и проектируются они как инструменты. Т.е. сделал заготовку исходя из своего опыта -- отдал народу на использование, собрал требования и исключил противоречия (обтесал заготовку), дальше в течение жизненного цикла точишь этот инструмент. Если ты предложишь спроектировать эйдос и тебе его спроектируют, то либо тебе повезло (маленькая вероятность) и ты поймал звезду, либо не повезло (гораздо более вероятно) и ты поймал человека в кризисе переусложнизма, который характеризуется очень широкими знаниями и малой продуктивностью в работе. Кстати, насчет DateTimeInterval с дабловым содержимым я могу привести кучу примеров, когда это будет удобно и уместно. Это инструмент, очень узконаправленный, но инструмент, поэтому такого человека имхо надо брать.
<Подпись удалена модератором>
Re[4]: Про тестовое задание. Попинайте пожалуйста.
От: Handie  
Дата: 04.09.12 08:52
Оценка:
_FR>) А то, я долго этот вопрос не решался задать, не хотелось терять такой повод для беседы

C# компилять не хочу, а вот что есть отрезок между двумя датами в JavaScript

> var d1 =new Date();

undefined
> var d2 =new Date();
undefined
> d2-d1
3562

3562 — 3,62 секунды.
Re[4]: Про тестовое задание. Попинайте пожалуйста.
От: _FRED_ Черногория
Дата: 04.09.12 08:55
Оценка:
Здравствуйте, Donz, Вы писали:

D>>>ИМХО, задачка не стыкуется с тем, что написано в первом абзаце. Новый тип, который будет добавлен в базовую библиотеку, вряд ли создает 99.9% программистов.

_FR>>То есть, если програмист _рисовал_ например финансовые графики, то _рисование_ температурных уже не его профиль? (я специально выделил важное — рисование, а не предметную область)? Как можно браться за проектирование каких-то репозитариев/визиторов/контролов/билдеров и прочего (сейчас у любого в резюме сказано про паттерны проектирования) не умея проектировать …гвоздь?

D>Если работа состоит в проектировании широко используемых типов, то да, все нормально. Если в формоклепательстве, багоисправлении или даже проектировании узких мест, где нужна жесткая оптимизация, то эта задача будет несколько оторвана от реальной работы.


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

D>>>Для начала стоит FizzBuzz задачку дать, можно сэкономить время.

_FR>>Это не для начала, это типа самое сложное
D>Так я и говорю, что перед твоей задачей стоит дать FizzBuzz, возможно и не придется тратить время на проектирование типа

Нет. Тут вот какое дело. FizzBuzz это мелочи. Я хочу проверить самым ненапряжным для кандидата образом именно умение комплексно мыслить, смотреть на проблему с разных углов зрения (а на дизайн именно так и требуется смотреть).
Help will always be given at Hogwarts to those who ask for it.
Re[5]: Про тестовое задание. Попинайте пожалуйста.
От: Handie  
Дата: 04.09.12 09:03
Оценка:
_FR>Это задачка не на какую-то супер-мега-анти-коуплинг-кохесинг-ажайл-архитектуру. Это попытка проверить, знает ли архитектор, какие бывают кирпичи. Чего такого свехъестественного, ну пускай даже просто сложненького в ней? Мне кажется, это даже проще должно быть для кандидата, чем обсуждение сортировок.

В C# есть замечательный тип TimeSpan

DateTime departure = new DateTime(2010, 6, 12, 18, 32, 0);
DateTime arrival = new DateTime(2010, 6, 13, 22, 47, 0);
TimeSpan travelTime = arrival - departure;


тот-же аналог double, но c тнтерфейсными плюшками.

Вы хотите заставить написать аналог существующего типа?
Re[2]: Про тестовое задание. Попинайте пожалуйста.
От: _FRED_ Черногория
Дата: 04.09.12 09:06
Оценка:
Здравствуйте, denisko, Вы писали:

_FR>>Конечно, единственного правильного решения не существует (или их может быть много, не суть важно). Само решение даже не так важно — важно обсудить с кандидатом его же решение: "Это вот" было сделано за "тем-то", "это" для "того-то", а "это" не стали делать "потому-то" и "потому-то". Подвохов каких-то вроде нет: тут сам себе устанавливаешь правила-цели (что будешь делать), потом сам же выбираешь стратегию достижения-реализации (как будешь делать).


D>Типы в стандартной библиотеке (любого языка) это все-таки инструменты, а не эйдосы по распространенному заблуждение.


Что такое "эйдосы"?

D>Поэтому и проектируются они как инструменты. Т.е. сделал заготовку исходя из своего опыта -- отдал народу на использование, собрал требования и исключил противоречия (обтесал заготовку), дальше в течение жизненного цикла точишь этот инструмент. Если ты предложишь спроектировать эйдос и тебе его спроектируют, то либо тебе повезло (маленькая вероятность) и ты поймал звезду, либо не повезло (гораздо более вероятно) и ты поймал человека в кризисе переусложнизма, который характеризуется очень широкими знаниями и малой продуктивностью в работе.


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

D>Кстати, насчет DateTimeInterval с дабловым содержимым я могу привести кучу примеров, когда это будет удобно и уместно. Это инструмент, очень узконаправленный, но инструмент, поэтому такого человека имхо надо брать.


Это противоречит исходной задаче спроектировать тип общего назначения. Позвольте допустить, что вы не совсем знакомы с BCL.Вот там например есть такой примитив как TimeSpan а вот DateTimeInterval нет. Если вы добавите DateTimeInterval на даблах, он будет _там_ (а не в вашем конкретном узком месте) выглядеть неестественно. Если вы не знакомы с дотнетом, то не нужно тут спорить об этом. А если считаете, что знакомы и не понимаете — то по моему мнению давать вам пилить кусок проекта рано.
Help will always be given at Hogwarts to those who ask for it.
Re[6]: Про тестовое задание. Попинайте пожалуйста.
От: _FRED_ Черногория
Дата: 04.09.12 09:11
Оценка:
Здравствуйте, Handie, Вы писали:

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

H>В C# есть замечательный тип TimeSpan

H>тот-же аналог double, но c тнтерфейсными плюшками.
H>Вы хотите заставить написать аналог существующего типа?

Вовсе нет. Во-первых, это совсем не "аналог double". почему — это следует обсудить в профильном форуме. Во-вторых, это тип, описывающий _расстояние_ между двумя точками на числовой оси. Я прошу другое: "отрезок времени между двумя датами". Конкретными датами. На недопонимании формулировки никого не ловлю — объясняю разницу, что нужно не просто "две секунды", а "от второго февраля 2012 по 13 марта 2014".
Help will always be given at Hogwarts to those who ask for it.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.