avva: (moose)
avva ([personal profile] avva) wrote2013-05-13 01:17 am

альтернатива физзбаззу

Цитирую из подзамочной записи с разрешения автора, который работает в американской компании и интервьюирует программистов:
Интесная закономерность выявляется. Мы начинаем интервью с того, что просим кандидата прочитать вот такой код, и сказать, что он делает. Как бы он назвал эту функцию?

private static int ok(int a, int b) {
   while (a >= b) a -= b;
   return a;
}

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

[identity profile] tybr.livejournal.com 2013-05-12 10:21 pm (UTC)(link)
Штирлиц выдал себя написав ok(0,0); :)

[identity profile] vasja-iz-aa.livejournal.com 2013-05-12 10:23 pm (UTC)(link)
а как ее цензурно можно назвать? она при нулевом б повисает навсегда
oryx_and_crake: (oryx_and_crake)

[personal profile] oryx_and_crake 2013-05-12 10:25 pm (UTC)(link)
За такой код надо выгонять с работы с волчьим билетом.
Какой смысл предъявлять на интервью код, с которым _в нормальной компании_ человек никогда не столкнется?

[identity profile] vasja-iz-aa.livejournal.com 2013-05-12 10:26 pm (UTC)(link)
и при отрицательных. кофе надо пойти выпить

[identity profile] dzz.livejournal.com 2013-05-12 10:27 pm (UTC)(link)
Пожалуй, это самый "прямолинейный" способ найти остаток от деления положительного a на положительное b, который мне встречался.

Но, IMHO, это не гарантирует знания других важных концепций. Например, контроля области определения входных параметров функции ;)
Edited 2013-05-12 22:36 (UTC)

[identity profile] summerdream-t.livejournal.com 2013-05-12 10:39 pm (UTC)(link)
Agree

[identity profile] dzz.livejournal.com 2013-05-12 10:46 pm (UTC)(link)
Смысл - посмотреть, поймёт ли разработчик, что в этом коде не так.

[identity profile] dmarck.livejournal.com 2013-05-12 10:46 pm (UTC)(link)
вот тут немножко неоднозначно.

в учебном коде, конечно, надо проверять и ассертить всё что можно

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

Но, быть может, я в чём-то ключевом неправ (некий червяк меня, как профессионального параноика, ест, да ;-P)

[identity profile] archaicos.livejournal.com 2013-05-12 10:47 pm (UTC)(link)
Мне думается, что в любой компании, где вообще есть код, найдутся похожие «произведения искусства».

[identity profile] xxqs.livejournal.com 2013-05-12 10:47 pm (UTC)(link)
poor man's modulo :)

[personal profile] ichthuss 2013-05-12 10:48 pm (UTC)(link)
Вот как раз насчёт контроля входных значений в ответе тоже можно услышать. Если, конечно, речь об устном собеседовании, а не письменном тесте с одним полем "впишите название".

[identity profile] mea-sententia.livejournal.com 2013-05-12 10:48 pm (UTC)(link)
ok(a, b) = a mod b, where a >= b > 0
so ok == modPos

[identity profile] dzz.livejournal.com 2013-05-12 10:55 pm (UTC)(link)
По опыту, если функция допускает возможность впихнуть неправильное значение параметра, всегда найдётся умник, который это радостно сделает.

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

[identity profile] 0x8.livejournal.com 2013-05-12 10:55 pm (UTC)(link)
Плохой код, он как мыши. Самозарождается в грязном белье.
В хорошей компании его нет не потому, что он там магически не появляется. А потому, что кто-то постоянно с ним борется, выкидывая и рефакторя такое говно.
А вот уже чтоб с ним бороться, его надо понимать. И именно люди могущие его распознавать и его воевать - отчаянно нужны индустрии.

[identity profile] lazy-clown.livejournal.com 2013-05-12 10:57 pm (UTC)(link)
Вроде, должно работать и для отрицательных a и b...

[identity profile] morfizm.livejournal.com 2013-05-12 10:57 pm (UTC)(link)
Удивлён, что в комментариях ещё никто не обратил внимание на самое главное. Название функции подсказывает, что её результат будут интерпретироваться как bool, соответственно, что она делает - это проверяет, что положительное a не делится на положительное b. То, что в случае true возвращаемое число является остатком от деления a на b, это всего лишь любопытный побочный эффект.

[identity profile] dmarck.livejournal.com 2013-05-12 10:58 pm (UTC)(link)
Ну, да, закон Чизхолма (IIRC) ;)

Ок, проверки суём под #ifdef WITNESS ;P

[identity profile] lazy-clown.livejournal.com 2013-05-12 10:59 pm (UTC)(link)
Если a отрицательное а b положительное, функция вообще не рработает..

[identity profile] dzz.livejournal.com 2013-05-12 10:59 pm (UTC)(link)
Я вообще не вижу смысла в письменных тестах такого рода без собеседования при приёме на работу.

[identity profile] lazy-clown.livejournal.com 2013-05-12 10:59 pm (UTC)(link)
+1

[identity profile] egorfine.livejournal.com 2013-05-12 11:00 pm (UTC)(link)
Это невероятно суперсинтетический тест. Я очень отрицательно к ним отношусь. За свою жизнь видел немало программистов, которые понимают такие приколы и могут их отлаживать, но не в состоянии создать ничего прикладного.

[identity profile] dmarck.livejournal.com 2013-05-12 11:01 pm (UTC)(link)
стоп-стоп, откуда там обработка результата как логического?!

[identity profile] dzz.livejournal.com 2013-05-12 11:01 pm (UTC)(link)
написано int, значит - никаких bool-ов ;)

[identity profile] dmarck.livejournal.com 2013-05-12 11:02 pm (UTC)(link)
ну, точнее -- оставляем на откуп коллеру ;-P

[identity profile] morfizm.livejournal.com 2013-05-12 11:02 pm (UTC)(link)
Она будет в вызывающем коде:
if (ok(a, b)) {
...

Вы когда-нибудь видели целочисленное выражение, в котором один из членов вычислялся бы функцией с названием "ok"? :)

Page 1 of 11