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

Что посоветуете? Только, пожалуйста, не надо про жирафа и холодильник!

Date: 2015-04-14 06:07 am (UTC)
From: [identity profile] raydac.livejournal.com
как же он может обладать разработческим уровнем мышления если пришел трудоустраиваться наладчиком? это логическое противоречие, при таком надо просто поинтересоваться посещает ли он психиатра и страдает ли раздвоением личности, если да то все ок и это наладчик-разработчик
Edited Date: 2015-04-14 06:08 am (UTC)

Date: 2015-04-14 06:29 am (UTC)
From: [identity profile] raydac.livejournal.com
тогда получается можно ему дать какуюнить ТРИЗовскую задачу, например про отбраковку шариков для подшипников
Edited Date: 2015-04-14 06:30 am (UTC)

Date: 2015-04-14 06:20 am (UTC)
From: [identity profile] fatoff.livejournal.com
А вот как он себе представляет игру 15 в компутере? Отставим в сторону графический интерфейс, одну абстракцию двигания клеток. Ну, массивы-то в колледже на программировании проходил, навереное.

Date: 2015-04-14 03:10 pm (UTC)
From: [identity profile] fatoff.livejournal.com
Вопрос не к тебе, а к кандидату на позицию наладчика: "Как бы вы запрограммировали поле для игры в '15'?" Если не знает, что за игра, объяснить. Квадратное поле, 4x4, 15 перемещаемых фишек-цифер, каждая из которых занимает одну ячейку из 16. Цифры идут от 1 до 15. Изначально цифры расположены хаотически, задача в том, чтобы составить их по порядку слева направо сверху вних.

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

Три уровня "thinking like a programmer".

Date: 2015-04-14 06:36 am (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Если вы не знаете другого стиля мышления, значит вы просто не считаете другие стили мышлением.
Поэтому проверяйте, может ли человек мыслить вообще.

Мне вот на вполне программистском собеседовании предлагали традиционную задачу про чашечные весы и монеты, из которых одна фальшивая. Только монет было не 9, а 8.

Date: 2015-04-14 06:44 am (UTC)
From: [identity profile] archaicos.livejournal.com
Гады, монету зажали.

Date: 2015-04-14 07:04 am (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
В данном случае это высказывание конструктивно. Оно помогает понять что именно нужно проверять у кандидатов.

Date: 2015-04-14 06:43 am (UTC)
From: [identity profile] archaicos.livejournal.com
Чего налаживать-то? Маслом смазывать?

Date: 2015-04-14 06:57 am (UTC)
From: [identity profile] sab123.livejournal.com
А какое место в ней налаживают?

Date: 2015-04-14 05:17 pm (UTC)
From: [identity profile] sab123.livejournal.com
Тогда не видно разницы с разработчиком.

Date: 2015-04-14 10:36 pm (UTC)
From: [identity profile] sab123.livejournal.com
Если оно сравнимо с портированием, то получается, что надо.

Date: 2015-04-15 10:10 pm (UTC)
From: [identity profile] no more turtles (from livejournal.com)
Если задача в порте / поиске, анализе и исправлении ошибок в чужом коде, то уровень должен быть как правило выше уровня рядового разработчика, с теми же базовыми умениями.
Если же задача в прохождении процесса запуска, локализации, доклада и сборки, то наймите опытного разработчика, который вам это правильно автоматизирует. В конечном счете будет дешевле.

Date: 2015-04-16 06:57 pm (UTC)
From: [identity profile] no more turtles (from livejournal.com)
Ну тогда наверное лучше сделать такое тестовое задание, которое ближе всего к описанным задачам. Взять конкретный пример из практики и упростиь его так, чтобы можно было решить минут за 10. И поговорить о решении на интервью. А по результатам разговора составить субьективное впечатление. Если человек белеет или покрывается потом при виде такого примера, то он и в реальности врядли справится. А все остальные абстрактные задачи типа как сортировать пузырьком или что выдаст на отдельном взятом языке какая-то из пальца высосанная строка -- они "помогают" найти специалистов в решении только таких же дурацких задач. Потом эти специалисты оказывается или двух строк связать не могут или выложат ваш код на гитхаб и скажут что это теперь их хобби-проект ;)

Date: 2015-04-14 07:00 am (UTC)
From: [identity profile] sim0nsays.livejournal.com
Вопрос номер один - кто такой наладчик???

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

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

Date: 2015-04-14 07:49 am (UTC)
From: [identity profile] sim0nsays.livejournal.com
Тогда простейший кусок кода на С написать или поправить. Дать код с багом, пусть поправит с компилятором.

Date: 2015-04-15 12:42 am (UTC)
ak_47: (default)
From: [personal profile] ak_47
Типа таких: i=i++ + ++i; ? :)

Date: 2015-04-16 12:33 am (UTC)
ak_47: (default)
From: [personal profile] ak_47
Тоже неплохо. :)

П.С. Я подумал над примером. Рискую прослыть козлищем, но не совсем уверен что понимаю о чём речь. В чём двойной побочный эффект? То что вызовы getchar будут в непредсказуемом порядке это ясно. А где ещё проблема? То что сдвиг может не дать 0, если char больше 8 битов или ещё что?

P.P.S. Вспомнил что getchar вообще возвращает int. Так что нуля там не будет.
Edited Date: 2015-04-16 12:41 am (UTC)

Date: 2015-04-16 01:19 am (UTC)
ak_47: (Default)
From: [personal profile] ak_47
Спасибо. Теперь понятно.

Date: 2015-04-14 10:09 am (UTC)
From: [identity profile] b0p0h0k.livejournal.com
Построить диаграмму состояний garage door opener.

Date: 2015-04-14 08:07 pm (UTC)
From: [identity profile] b0p0h0k.livejournal.com
И про лампочку не забыть. В нём обычно ещё лпч есть ватт на 30, которая может загораться, гаснуть и мигать.

Date: 2015-04-14 10:21 am (UTC)
ak_47: (default)
From: [personal profile] ak_47
Я думаю программистское мышление подразумевает следующие вещи:

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 Date: 2015-04-14 11:47 am (UTC)

Date: 2015-04-14 08:21 pm (UTC)
From: [identity profile] b0p0h0k.livejournal.com
Стремиться-то надо, но надо ещё иметь judgement свое стремление обуздывать.
А нетерпением пусть ПиЭмы занимаются. Им за это плотют.

Date: 2015-04-15 12:38 am (UTC)
ak_47: (Default)
From: [personal profile] ak_47
Ну дык опытный программист как раз понимает что код - зло. И старается решать задачи подручными средствами.

Profile

spamsink: (Default)
spamsink

February 2026

S M T W T F S
12345 67
8 91011 121314
15161718 192021
22 2324 25262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 5th, 2026 03:58 pm
Powered by Dreamwidth Studios