И еще о поддерживаемости кода
Mar. 4th, 2009 05:36 pmВдогонку к этой
и немного этой записям. И еще немного к боковому хвосту у Витуса.
Один из типичных приемов собеседования с программистами - показ зубодробительной конструкции на языке, на котором собирается программировать соискатель, и вопрос, что она делает. Наиболее часто мне попадался C-шный пример, когда вместо переменной объявлялась функция.
Так вот, господа. Когда вам показывают такой пример (если он выходит за пределы разумного понимания языка и знания ключевых слов или общепринятых идиом), то скорее всего - одно из двух.
1. Собеседующий пытается срезать соискателя. То есть самоутвердиться. Вам нужен такой начальник?
2. Код реально используется в проекте? Вы действительно хотите это поддерживать?
Да, и главное, без чего пп.1-2 не действуют. Понимать, что предъявленный пример собой представляет - все-таки надо. Чтобы было ясно, что объявлена таки переменная, а не функция.
и немного этой записям. И еще немного к боковому хвосту у Витуса.
Один из типичных приемов собеседования с программистами - показ зубодробительной конструкции на языке, на котором собирается программировать соискатель, и вопрос, что она делает. Наиболее часто мне попадался C-шный пример, когда вместо переменной объявлялась функция.
Так вот, господа. Когда вам показывают такой пример (если он выходит за пределы разумного понимания языка и знания ключевых слов или общепринятых идиом), то скорее всего - одно из двух.
1. Собеседующий пытается срезать соискателя. То есть самоутвердиться. Вам нужен такой начальник?
2. Код реально используется в проекте? Вы действительно хотите это поддерживать?
Да, и главное, без чего пп.1-2 не действуют. Понимать, что предъявленный пример собой представляет - все-таки надо. Чтобы было ясно, что объявлена таки переменная, а не функция.
no subject
Date: 2009-03-04 02:49 pm (UTC)no subject
Date: 2009-03-04 02:57 pm (UTC)(no subject)
From:no subject
Date: 2009-03-04 03:22 pm (UTC)no subject
Date: 2009-03-04 03:24 pm (UTC)no subject
Date: 2009-03-04 03:30 pm (UTC)c=3;
d=++c++;
printf("%d\n",d);
Но всегда подразумеваю, что если кто-то правильно ответит, то это плюс, а не минус, если не ответит. Отвечают крайне-крайне редко.
no subject
Date: 2009-03-04 03:42 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-03-04 03:31 pm (UTC)Вы же не считаете, что большинство собеседующих не понимают этих трёх тезисов?
no subject
Date: 2009-03-04 03:43 pm (UTC)no subject
Date: 2009-03-04 03:36 pm (UTC)1. Если нанимают программиста на C++ (то есть весь код у нас плюсовый и всё такое), то как--то логично проверить, знает ли человек подводные камни этого самого C++. Тем более, что приведенный пример может получиться и сам по себе.
2. Иногда приходится лезть в чужой код. Вообще чужой, а уж что бывает в чужом коде никому объяснять не надо.
3. Я не очень понимаю, чем это принципиально отличается от предложения отсортировать терабайтный файл, если у нас есть только 2 гига памяти.
no subject
Date: 2009-03-04 03:45 pm (UTC)2. Согласен. А с другой стороны - стоит ли связываться с этим чужим кодом?
3. Тут несколько сложнее. В идеале стоит думать о том, что ресурсов не хватит объективно. И описывать границы применения предложенного решения. Любого.
(no subject)
From:(no subject)
From:no subject
Date: 2009-03-04 04:00 pm (UTC)no subject
Date: 2009-03-04 04:01 pm (UTC)(no subject)
From:no subject
Date: 2009-03-04 04:06 pm (UTC)Зачем нужно вот такое макроопределение
#define MACRO(a,b) (&((b*)NULL)->a)
Работает как из пушки :)
no subject
Date: 2009-03-04 04:10 pm (UTC)void print(std::vector& v)
{
for (unsigned i = 0; i < v.size(); i++)
printf("%d\n", v[i]);
}
Или чем STL-ный vector хуже чем имплементация списков из /usr/include/linux/list.h?
P.S. В плюсовом синтаксисе могу ошибаться :) Это не на подкорке
no subject
Date: 2009-03-04 05:04 pm (UTC)Из той самой, из которой нужно пристрелить того, кому эта информация в программе понадобилась?
(no subject)
From:(no subject)
From:no subject
Date: 2009-03-04 07:36 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-03-04 04:11 pm (UTC)А с зубодробительными конструкциями на собеседованиях обычно сразу отвечаю, что выпорол бы того, кто это написал, и заставил переписать более просто, ибо пишется - раз, а поддерживается потом - доооолго ...
Но любителей подсунуть что-нить на undefined behavior, и заставляющих объяснить почему неправильно ... или всякие неоднозначные штуковины ... Я вот считаю что проще сказать что не правильно, и как - правильно, чем объяснять ... С другой стороны - собеседование, это ж взаимный экзамен, проще отсеять невменяемое место сразу, чем потом мучаться :)
no subject
Date: 2009-03-04 07:37 pm (UTC)Ты, кстати, окопался где-нибудь?
(no subject)
From:no subject
Date: 2009-03-04 04:30 pm (UTC)Попробуй применить твои выводы к этому случаю. а) Он пытался срезать учеников. Нам нужен такой преподаватель? б) Вы действительно хотите заниматься такой наукой, где могут спрашивать столь сложные вещи?
А когда речь доходит до дела, как бы мы отнеслись к медикам, не сдавшим такой коллоквиум?
no subject
Date: 2009-03-04 07:49 pm (UTC)если бы людям можно было менять органы, как блоки в программах, я бы тоже ответил - "я бы этот дефектный череп поменял бы на нормальный", а не стал бы рассуждать как креативней пару этих дырок прокрутить ...
(no subject)
From:no subject
Date: 2009-03-04 04:49 pm (UTC)... За окном сверкает пол-луны ...
no subject
Date: 2009-03-04 09:01 pm (UTC)main () {}
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-03-04 04:54 pm (UTC)no subject
Date: 2009-03-04 08:54 pm (UTC)У меня вообще проблемы с такими вопросами - понимать я многие вещи понимаю, непонятных конструкций избегаю как активно, так и пассивно, а синтаксис помню так себе - указатель на функцию для меня каждый раз является основанием заглянуть в Страуструпа. И ничего, код писал вполне успешно.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-03-04 08:23 pm (UTC)Но есть тут некоторое "но".
Токость тут в том, что твой пост, как мне кажется, предполагает, что данный программист заведомо достаточно владеет языком настолько, что его мнение о "зубодробительности" конструкций заведомо верно. Т.е. того, что кто-то данными конструкциями пользуется легко, как говорится "играючи" (т.е. получает преимущества таких конструкций, не страдая от ожидаемых тобой недостатков), и что это остижимо даже без смены прошивки собственного мозга - ты уже не допускаешь? Да, конечно, ответ типа: "Я просто не считаю для себя нужным подниматься на такой уровень виртуозности, потому что за тоже время я луше освою что-то более востребованное на рынке," -- тоже принимается (и даже, сажу честно, ожидается ;) ).
no subject
Date: 2009-03-04 08:58 pm (UTC)Я, например, долго не любил конструкцию a?b:c; И сейчас недолюбливаю. Понимать я ее прекрасно понимаю, но эта конструкция, в отличие от честного if-а, неустойчива к малым воздействиям типа добавления отладочной печати.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-03-04 09:59 pm (UTC)no subject
Date: 2009-03-05 05:40 am (UTC)Здесь идет речь о псевдоидеомах, которые чаще всего - "выпендрись как я".
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-03-06 07:23 pm (UTC)Мне самому нравятся всякие красивости языка, но задавать их на собеседовании? Уж нет.