piggymouse: (fuckingtoad)
[personal profile] piggymouse

Не даёт мне покоя вот какая мысль.

Допустим, некоторая абстрактная контора нанимает C/C++ программиста. Никаких других требований, кроме того, что человеку придётся писать на C или C++, не оговаривается. Помимо прочего кандидатам на интервью предлагается такая задача: для произвольных целых n, M1 и M2 запишите на C условие "в n установлены все биты из M1 и сброшены все биты из M2".

[Poll #122247]

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

Ваши дополнительные соображения в комментах безусловно приветствуются.

Date: 2003-04-09 09:05 am (UTC)
From: [identity profile] alexclear.livejournal.com
Нет, не имеет смысла. Я себе с трудом представляю человека, который знает как записать это условие в логических операциях, но не помнит, как это записать на языке C.
Если же человек не знает битовой арифметики, то он не является профессиональным программистом.
Если же конторе нужно взять именно этого человека, тут никакие задачи не помогут его не взять. :)

Date: 2003-04-09 09:15 am (UTC)
From: [identity profile] malenkiy-scot.livejournal.com
Это смотря о чем беседовать.

Date: 2003-04-09 09:23 am (UTC)
From: [identity profile] mbravo.livejournal.com
Для _произвольных_ M1 и M2 имеет значение последовательность действий. А?

Date: 2003-04-09 11:36 pm (UTC)
From: [identity profile] piggymouse.livejournal.com
Я этого не вижу.

Date: 2003-04-09 10:40 am (UTC)
From: [identity profile] silpol.livejournal.com
вообще-то говоря, решение этой задачи неоднозначно - судя по вопросам из побитной арифметики, речь идет скорее о тестировании на real-time, которое НЕ всегда эффективно кодируется даже на C, но...

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

зы. я практически не касался C кода больше двух лет ;)

Date: 2003-04-09 03:17 pm (UTC)
From: [identity profile] alexclear.livejournal.com
судя по вопросам из побитной арифметики, речь идет скорее о тестировании на real-time, которое НЕ всегда эффективно кодируется даже на C, но...

Вот уже несколько часов пытаюсь понять, что Вы хотели сказать этой фразой... Вы имели в виду, что, судя по вопросу, компания принимает на работу разработчика realtime-приложений (устройств, ...)?

вот лично мне видится минимум два решения, причем в зависимости от контекста (для чего архитектор решился на побитность, то ли изза реалтаймовости,

А как побитность может напрямую помочь в случае написания realtime-приложений? Я вот не могу сейчас найти прямой связи... Вы имели в виду показатели быстродействия? Я исхожу из предположения, что операции по передаче данных в RT-системе выполняются существенно дольше чем любой простой счет (сложный счет выносится на спецвычислитель) или доступ к объекту в памяти.

то ли из-за экономии места на диске)

Такой подход также экономит место и в памяти, что неплохо работает в случае использования микроконтроллеров, различных RT и embedded устройств на промышленных процессорах, там, где много оперативки может и не быть. Это тот случай, который приходит мне в голову, как объяснение выигрыша в использовании битовых операций при программировании RT систем. А вот место на диске я бы таким образом не стал экономить - выигрыш получается не настолько заметным, лучше вообще не накапливать данные на RT уровне, если есть проблемы с их хранением.

Date: 2003-04-10 12:49 am (UTC)
From: [identity profile] piggymouse.livejournal.com
Нащот экономии места на диске. Мне вот всё-таки кажется, что в случае очень больших баз данных, в которых записи содержат большое количество non-null булевских атрибутов, упаковка этих атрибутов в виде битовой маски оправдана. RT тут, само собой, ни при чём.

Date: 2003-04-10 01:11 am (UTC)
From: [identity profile] silpol.livejournal.com
1) да, я именно это и имел в виду - у кандидата тоже есть свои estimates и порою важно знать в какую сторону "нагибать" код, чтобы ответ по крайней мере не выглядел шокирующим

2) я уже писал в другом комменте, что можно писать с упором на портабельность/сопровождаемость (и тогда "заточка" кода должан быть одна) или с упором в скорость исполнения (и тогда ответ выглядит несколько иначе).

Побитность здесь собственно при том, что если человек всю жизнь писал на Intelx86 то он наверняка начнет лепить код, исходя из привычной ему длины слова и т.п., базируясь таким образом на неких estimates по поводу архитектуры. А интервьюер будет тихо смеяться в усы (у них стоит какой-нибудь PowerPC или наоборот, моторолеррный микроконтроллер), зная заранее что это кандидат имеет очь мало шансов.

3) собственно, я про диск сказал несколько неудачно - речь скорее шла о том, насколько проект готов идти на компромисс между эффективностью кода и его (кода) дальнейшей судьбой.

Date: 2003-04-10 12:36 am (UTC)
From: [identity profile] piggymouse.livejournal.com
Извиняюсь, но ты не очень понятно выразился. Разъясни пожалуйста.

Date: 2003-04-10 12:54 am (UTC)
From: [identity profile] silpol.livejournal.com
если коротко, то... можно написать портабельно/сопровождаемо, но не эффективно (с точки зрения скорости исполнения), и наоборот, не шибко портабельно/сопровождаемо, зато быстро-как-метеор... с точки зрения проекта, который очень комплексный (начиная с миллионов строк), первый случай единственно допустимый, а ковбои побитного программирования пусть идут писать real-time code куда-то еще... с точки зрения проекта в духе "контроллер АТС размером с пол-указательного-пальца" наоборот, первый случай - явный кандидат на отсев, зато второй вполне приемлемый кандидат...

другими словами, набирать человека без обьяснения бэкграунда проекта ("некоторая абстрактная контора нанимает C/C++ программиста") и требовать от него корректного решения этой конкретной задачи с последующим командирским решением без обсуждения результата - это по крайней мере не совсем честно с моей точки зрения.

извини за путаницу вчера - уставший был сильно.

(no subject)

From: [identity profile] piggymouse.livejournal.com - Date: 2003-04-10 01:06 am (UTC) - Expand

Re:

From: [identity profile] silpol.livejournal.com - Date: 2003-04-10 01:32 am (UTC) - Expand

(no subject)

From: [identity profile] piggymouse.livejournal.com - Date: 2003-04-10 01:39 am (UTC) - Expand

Re:

From: [identity profile] silpol.livejournal.com - Date: 2003-04-10 02:34 am (UTC) - Expand

Date: 2003-04-09 12:18 pm (UTC)
From: [identity profile] oxfv.livejournal.com
Это впрямую перекликается с моим удивлением, когда я обнаружил, что практически ни один выпускник Беркли (BS Computer Science, не хрен собачий!) не пытается решить мою любимую интервьюшную задачу с применением битовой логики и битовых сдвигов. Задача, напоминаю, такая: распечатать число в строку в двоичном виде. Я представляю себе, что сказали бы в Транзасе выпискнику матмеха, который в решении такой задачи делил бы на два и сравнивал с нулем остаток от деления. Возможно, впрочем, специфика нашей лавки такова, что нам битовые умения нужны позарез, а многие обходятся и так (джава там, я не знаю). Но я с подозрением смотрю на людей, которые.

Date: 2003-04-09 02:14 pm (UTC)
From: [identity profile] msh.livejournal.com
Хм, а где в этой задаче подвох?

for(i=0;i<sizeof(a)*8;i++,a<<=1) putchar(a < 0 ? '1' : '0');

Date: 2003-04-09 02:23 pm (UTC)
From: [identity profile] oxfv.livejournal.com
Да я и не говорил, что есть подвох (за исключением того, что такая простая задача на удивление вызывает затруднения). Но так вот никто из них не напишет, гарантирую. Некоторые из этих продвинутых детей 21 века вообще рекурсию приплетают.

Другая моя любимая тупая задача - обратить односвязный список. Я уж про пузырьковую сортировку и спросить боюсь!

(no subject)

From: [identity profile] msh.livejournal.com - Date: 2003-04-09 02:40 pm (UTC) - Expand

(no subject)

From: [identity profile] piggymouse.livejournal.com - Date: 2003-04-10 12:05 am (UTC) - Expand

(no subject)

From: [identity profile] oxfv.livejournal.com - Date: 2003-04-10 02:02 am (UTC) - Expand

(no subject)

From: [identity profile] piggymouse.livejournal.com - Date: 2003-04-10 02:07 am (UTC) - Expand

(no subject)

From: [identity profile] oxfv.livejournal.com - Date: 2003-04-10 02:16 am (UTC) - Expand

(no subject)

From: [identity profile] piggymouse.livejournal.com - Date: 2003-04-10 02:22 am (UTC) - Expand

Бывает и не 8

From: [identity profile] potan.livejournal.com - Date: 2003-04-23 01:02 am (UTC) - Expand

(no subject)

From: [identity profile] msh.livejournal.com - Date: 2003-04-10 07:10 am (UTC) - Expand

v 2.0

From: [identity profile] msh.livejournal.com - Date: 2003-04-10 07:17 am (UTC) - Expand

Re: v 2.0

From: [identity profile] piggymouse.livejournal.com - Date: 2003-04-10 07:18 am (UTC) - Expand

Date: 2003-04-10 06:59 am (UTC)
From: [identity profile] piggymouse.livejournal.com
By the way, вкусная опечатка получилась: "выпискник".

Date: 2003-04-09 02:23 pm (UTC)
From: [identity profile] msh.livejournal.com
Условие задачи должно включать еще зачем мы его берем и сколько будем платить. Может мы вполне можем себе позволить всучить ему книжку и пусть учит полгода

Date: 2003-04-09 11:38 pm (UTC)
From: [identity profile] piggymouse.livejournal.com
Согласен. См. также заключительное замечание здесь: "Если же конторе нужно взять именно этого человека, тут никакие задачи не помогут его не взять."

Date: 2003-04-09 03:28 pm (UTC)
From: [identity profile] alexclear.livejournal.com
Да, кстати, а чем эта абстрактная контора занимается-то?
Если они под Atmel AVR на тамошнем C пишут, то это одно, а если они делают COM-объекты для последующего использования их в ASP страницах, то это совсем другое.
В последнем случае никакие битовые операции знать не обязательно и много еще чего другого знать не обязательно, [и не знают!].

Date: 2003-04-10 12:07 am (UTC)
From: [identity profile] piggymouse.livejournal.com
В последнем случае им нахер сдался язык Це. Если только речь не идёт о нетехнических критериях (тут все наши рассуждения пас) или о каких-то специальных требованиях по производительности (тогда и люди будут нужны более грамотные).

Date: 2003-04-09 06:31 pm (UTC)
From: [identity profile] 109.livejournal.com
((n & M1 == M1) && (n & M2 == 0)) пойдёт, или надо что-то более тщательное?

Date: 2003-04-09 07:01 pm (UTC)
From: [identity profile] alexclear.livejournal.com
С такой формулировкой, как в тексте полла, и ((n == 0xFFFF) && (n == 0x0000)) пойдет.
Все биты из M1 установлены и все биты из M2 сброшены. :)

(no subject)

From: [identity profile] piggymouse.livejournal.com - Date: 2003-04-09 11:33 pm (UTC) - Expand

Re:

From: [identity profile] 109.livejournal.com - Date: 2003-04-10 06:01 am (UTC) - Expand

(no subject)

From: [identity profile] 109.livejournal.com - Date: 2003-04-10 06:13 am (UTC) - Expand

(no subject)

From: [identity profile] alexclear.livejournal.com - Date: 2003-04-10 07:39 am (UTC) - Expand

Re:

From: [identity profile] 109.livejournal.com - Date: 2003-04-10 08:04 am (UTC) - Expand

(no subject)

From: [identity profile] alexclear.livejournal.com - Date: 2003-04-10 08:43 am (UTC) - Expand

(no subject)

From: [identity profile] 109.livejournal.com - Date: 2003-04-10 08:58 am (UTC) - Expand

(no subject)

From: [identity profile] alexclear.livejournal.com - Date: 2003-04-10 09:20 am (UTC) - Expand

Re:

From: [identity profile] 109.livejournal.com - Date: 2003-04-10 09:48 am (UTC) - Expand

(no subject)

From: [identity profile] alexclear.livejournal.com - Date: 2003-04-10 06:54 am (UTC) - Expand

(no subject)

From: [identity profile] piggymouse.livejournal.com - Date: 2003-04-10 06:57 am (UTC) - Expand

Date: 2003-04-09 11:43 pm (UTC)
From: [identity profile] piggymouse.livejournal.com
По моему личному мнению пойдёт.

Date: 2003-04-10 12:08 am (UTC)
From: [identity profile] sema.livejournal.com
Я извиняюся, это таки про нас? :)
Тут имхо всё просто - нам (были :( ) нужны программеры именно с такими (в частности) навыками, вот и всё.
В том виде как ты поставил задачу - ответ, конечно,- "да", т.к. в куче задач битовая арифметика не требуется никогда и я бы не стал упираться рогом? продолжать разговаривать конечно можно, хотя это и повод задуматься.

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

Date: 2003-04-10 01:01 am (UTC)
From: [identity profile] piggymouse.livejournal.com

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

Отвечу краткой банальностью — всё-таки тесты измеряют нечто большее, чем способность проходить тесты.

Date: 2003-04-21 05:51 am (UTC)
From: [identity profile] chemodax.livejournal.com
Всегда умение работать с битами сопровождалось тайными знаниями о, например, назначении виртуальных деструкторов, и наоборот.
Асболютно согласен. Если человек программирует на Си, но не удосужился разобраться с битовой арфметикой, то IMHO это значит что у него нет желания/возможности/способов разбираться что и почему работает. А мне кажется что это очень важное качества сотрудника, если конечно нет желания его воспитовать/учить/растить.

Date: 2003-04-10 08:53 am (UTC)
From: [identity profile] alexclear.livejournal.com
OOPS... к тебе эти рассуждения не относятся ни в коей мере! :)

Profile

piggymouse: (Default)
איש אי הכלבים

April 2011

S M T W T F S
     1 2
34 56 789
10 1112 13141516
17181920212223
24252627282930

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 20th, 2026 12:12 pm
Powered by Dreamwidth Studios