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;
}

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

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

[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] archaicos.livejournal.com 2013-05-12 10:47 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:59 pm (UTC)(link)
+1
oryx_and_crake: (Default)

[personal profile] oryx_and_crake 2013-05-12 11:09 pm (UTC)(link)
Да, пожалуй, вы правы.

[identity profile] cema.livejournal.com 2013-05-13 03:05 am (UTC)(link)
+1

[identity profile] panikowsky.livejournal.com 2013-05-13 05:08 am (UTC)(link)
++

[identity profile] meshko.livejournal.com 2013-05-13 12:57 am (UTC)(link)
А что такого ужасного? Как бы вы написали мод для неотрицательных чисел?

[personal profile] ichthuss 2013-05-13 01:20 am (UTC)(link)
int i=0;
while (b < a) {
b << 1;
i++;
}
while (i >= 0)
{
if ( a > b) a -=b;
b >> 1;
i--;
}
return a;

Это навскидку, конечно же. По хорошему тут ещё нужны проверки на переполнение.
Edited 2013-05-13 01:27 (UTC)

[identity profile] meshko.livejournal.com 2013-05-13 01:32 am (UTC)(link)
Ну это то же самое, только с premature optimization и менее читаемое.

[personal profile] ichthuss 2013-05-13 12:53 pm (UTC)(link)
Это не то же самое. Подобного рода код вполне может применяться на каком-нибудь железе, не имеющем аппаратного деления. А для кода из заглавного поста мне вообще трудно придумать применение. Разве что в какой-то специфической задаче заранее известно, что a будет больше b не более чем в единицы раз.

[identity profile] salas.livejournal.com 2013-05-13 02:03 am (UTC)(link)
Этот код содержит не менее двух ошибок. Я склонен прямо связывать этот факт с упомянутыми комментарием выше читаемостью и premature optimization.

[personal profile] ichthuss 2013-05-13 12:51 pm (UTC)(link)
Это понятно, я ведь код не тестировал, и вообще писал с ходу, с единственной целью - показать идею. В реальном применении я бы над ним думал не 40 секунд, а 5 минут, и проверил бы на тестах.

[identity profile] amosk.livejournal.com 2013-05-13 02:27 pm (UTC)(link)
Так и код из интервью тоже написан с целью показать идею :)

[personal profile] ichthuss 2013-05-13 02:29 pm (UTC)(link)
Поэтому я и не высказываю к нему придирки насчёт, скажем, неработоспособности при неположительных значениях аргумента. Но код с идеей из заглавного поста имеет очень узкую область реальной применимости (мне даже сложно такую придумать), а с моей идеей деления в столбик - вполне реальную область в микроконтроллерах. Этот вопрос совершенно ортогонален вопросу о работоспособности кода в смысле полноты реализации идеи.

[identity profile] variate.livejournal.com 2013-05-13 05:34 am (UTC)(link)
Это более-менее нормальный код, например, для навигации по кольцевому меню в микроконтроллере, где нет быстрого деления, и важно сэкономить место.

[personal profile] ichthuss 2013-05-13 12:57 pm (UTC)(link)
На яве? :)

А если серьезно, то в таком случае стоило бы добавить второй такой же цикл вроде while (a < 0) a += b; В указанном же виде мне трудно увидеть применение для этого кода (даже если считать его написанным на си).

[identity profile] dimrub.livejournal.com 2013-05-13 08:06 am (UTC)(link)
Вне зависимости от вопроса о том, хорош ли этот код, и каковы шансы с ним столкнуться, задача поставлена вполне ясно, как мне кажется: понять, что этот код делает. И учитывая, что хорошие кандидаты эту задачу решают, а плохие - нет, свою цель этот код выполняет.