?

Log in

No account? Create an account

Спрошу совета и поступлю по-своему - Общество дровосеков Бердичева по изучению Мишны

Apr. 13th, 2015

10:38 pm - Спрошу совета и поступлю по-своему

Previous Entry Share Next Entry

На следующей неделе мне нужно будет интервьюировать очередного кандидата в наладчики (НЕ разработчики). Меня попросили уделить внимание теме "thinking like a programmer", безотносительно к языкам и алгоритмам, так как разработческого уровня знания языков и алгоритмов от наладчиков не требуется, но мышление они должны иметь подтянутое и молодцеватое. Я другой методы думанья не знаю, и потому нахожусь в некотором недоумении, как это проверять, не пользуясь известными инструментами.

Что посоветуете? [Spoiler (click to open)]Только, пожалуйста, не надо про жирафа и холодильник!

Tags:

Comments:

[User Picture]
From:raydac
Date:April 14th, 2015 06:07 am (UTC)
(Link)
как же он может обладать разработческим уровнем мышления если пришел трудоустраиваться наладчиком? это логическое противоречие, при таком надо просто поинтересоваться посещает ли он психиатра и страдает ли раздвоением личности, если да то все ок и это наладчик-разработчик

Edited at 2015-04-14 06:08 am (UTC)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:April 14th, 2015 06:25 am (UTC)
(Link)
Речь не об уровне, а о стиле мышления.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:fatoff
Date:April 14th, 2015 06:20 am (UTC)
(Link)
А вот как он себе представляет игру 15 в компутере? Отставим в сторону графический интерфейс, одну абстракцию двигания клеток. Ну, массивы-то в колледже на программировании проходил, навереное.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:April 14th, 2015 06:28 am (UTC)
(Link)
Не совсем понимаю, в чем вопрос.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:vitus_wagner
Date:April 14th, 2015 06:36 am (UTC)
(Link)
Если вы не знаете другого стиля мышления, значит вы просто не считаете другие стили мышлением.
Поэтому проверяйте, может ли человек мыслить вообще.

Мне вот на вполне программистском собеседовании предлагали традиционную задачу про чашечные весы и монеты, из которых одна фальшивая. Только монет было не 9, а 8.
(Reply) (Thread)
[User Picture]
From:archaicos
Date:April 14th, 2015 06:44 am (UTC)
(Link)
Гады, монету зажали.
(Reply) (Parent) (Thread)
[User Picture]
From:archaicos
Date:April 14th, 2015 06:43 am (UTC)
(Link)
Чего налаживать-то? Маслом смазывать?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:April 14th, 2015 06:48 am (UTC)
(Link)
Эмуляцию дизайна, обычно на Верилоге, с применением I/O транзакторов на Си.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:sim0nsays
Date:April 14th, 2015 07:00 am (UTC)
(Link)
Вопрос номер один - кто такой наладчик???

Предложение - если знает хоть какой-нибудь язык, написать что-то совсем простое. Я спрашивал последовательные дубликаты в строке убрать. Или развернуть строку там. Что угодно.

Можно еще задачи в стиле книжки "Как сдвинуть гору Фудзи", про сверх-логичных пиратов, например.

(Reply) (Thread)
[User Picture]
From:spamsink
Date:April 14th, 2015 07:10 am (UTC)
(Link)
В данном случае наладчик - это человек, помогающий заказчику адаптировать его среду верификации хардверного дизайна к работе с поставляемым продуктом (эмулятором или симулятором). Ему нужно знать как языки описания хардвера, например, Верилог, так и Си, на уровне "могу заставить текст компилироваться и выполняться и могу локализовать ошибку до тестового примера разумного размера".
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:spamsink
Date:April 14th, 2015 07:11 am (UTC)
(Link)
По-видимому, действительно, проще будет просить писать на псевдокоде, если с активным владением Си будут проблемы. Убирание чего-нибудь в строке - хороший тест, да.
(Reply) (Parent) (Thread)
[User Picture]
From:b0p0h0k
Date:April 14th, 2015 10:09 am (UTC)
(Link)
Построить диаграмму состояний garage door opener.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:April 14th, 2015 08:03 pm (UTC)
(Link)
Это красиво.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:ak_47
Date:April 14th, 2015 10:21 am (UTC)
(Link)
Я думаю программистское мышление подразумевает следующие вещи:

1. Желание отделять данные от логики. Пример: есть некий скрипт do_A, которыей делает нечто с A. Надо теперь делать B, причём B очень похоже на A, либо вообще идентично. Нормальный человек просто скопирует do_A в do_B, потом откроет новый файл и заменит там везде A на B. (И будет жить счастливо ещё 10 лет.) Программист такого не потерпит и полезет в скрипт разбираться. Сделает из него do_wtvr и будет передавать параметром A или B. Такое выделение данных из логики обыденная вещь у программистов, но почти всегда удивляет остальных. Как следствие, программисты очень не любят всякое hardcoded, а обычные люди относятся к этому спокойно. Можно дать некий псевдокод, где много всего hardcoded и есть повторения. Спросить как можно было бы это улучшить. Или более абстрактно об этом поговорить.

2. Делегирование и indirection. Скажем, обычных людей не смущают вещи вида "#!/usr/local/bin/python27" . Программист напишет "#!/usr/bin/env python". Вообще, желание всё прошить хуками и колбеками - очень программисткая черта. "А вдруг понадобиться что-нибудь вставить, а я не готов?" - так рассуждают программисты. Другая грань этого свойства - вызывание уже готовых тулзов, функций и пр., а не написание их самому. Скажем, не писать скрипт для поиска слова в файлах определённого вида, а запустить grep посреди других операций в пайпе. Из этого как следствие желание модулярности и независимости узлов, а не монолитного решения. Можно человека спросить как бы он решил некую задачу, которая легко разбивается на подзадачи, при этом предупредить что задача скорее всего будет видоизменяться, поэтому хотелось бы иметь robust решение. Программист сразу начнёт клепать модули и интерфейсы. Обычных людей такие вопросы часто ставят в тупик, т.к. они не привыкли разбивать большие задачи на мелкие под-задачи.

3. Программисты мыслят стеком. То что взяли надо положить обратно. То что трогали, надо почистить и вернуть как было. Unwind and rollback всегда подразумеваются. Обычных людей это часто раздражает и они не всегда понимают зачем это надо и тем более зачем это надо делать в обратной последовательности, а не в произвольной.

4. Обсессивное внимание к деталям. Не обязательно только программистская черта, но почти у всех программистов я её наблюдаю.

Наверное можно ещё многое придумать, но это то что первым в голову пришло.

Edited at 2015-04-14 11:47 am (UTC)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:April 14th, 2015 08:06 pm (UTC)
(Link)
Не всякий программист тут же нахрапом стремится to overdesign. Как известно, среди добродетелей программиста - лень и нетерпение.
(Reply) (Parent) (Thread) (Expand)