Спрошу совета и поступлю по-своему
Apr. 13th, 2015 10:38 pmНа следующей неделе мне нужно будет интервьюировать очередного кандидата в наладчики (НЕ разработчики). Меня попросили уделить внимание теме "thinking like a programmer", безотносительно к языкам и алгоритмам, так как разработческого уровня знания языков и алгоритмов от наладчиков не требуется, но мышление они должны иметь подтянутое и молодцеватое. Я другой методы думанья не знаю, и потому нахожусь в некотором недоумении, как это проверять, не пользуясь известными инструментами.
Что посоветуете?Только, пожалуйста, не надо про жирафа и холодильник!
Что посоветуете?
no subject
Date: 2015-04-14 06:07 am (UTC)no subject
Date: 2015-04-14 06:25 am (UTC)no subject
Date: 2015-04-14 06:29 am (UTC)no subject
Date: 2015-04-14 07:03 am (UTC)no subject
Date: 2015-04-14 06:20 am (UTC)no subject
Date: 2015-04-14 06:28 am (UTC)no subject
Date: 2015-04-14 03:10 pm (UTC)Для начала, как кандидат представляет программную подготовку такого поля.
Потом, как бы он реализовал перемещения фишек.
Потом, как бы он запрограммировал компьютер, чтобы тот смог сыграть сам.
Три уровня "thinking like a programmer".
no subject
Date: 2015-04-14 06:36 am (UTC)Поэтому проверяйте, может ли человек мыслить вообще.
Мне вот на вполне программистском собеседовании предлагали традиционную задачу про чашечные весы и монеты, из которых одна фальшивая. Только монет было не 9, а 8.
no subject
Date: 2015-04-14 06:44 am (UTC)no subject
Date: 2015-04-14 06:50 am (UTC)Это примерно как сказать, что если человек никакого другого языка, кроме убыхского, не знает, значит, он просто не считает другие звуки изо рта языками.
no subject
Date: 2015-04-14 07:04 am (UTC)no subject
Date: 2015-04-14 06:43 am (UTC)no subject
Date: 2015-04-14 06:48 am (UTC)no subject
Date: 2015-04-14 06:57 am (UTC)no subject
Date: 2015-04-14 07:02 am (UTC)no subject
Date: 2015-04-14 05:17 pm (UTC)no subject
Date: 2015-04-14 08:00 pm (UTC)no subject
Date: 2015-04-14 10:36 pm (UTC)no subject
Date: 2015-04-14 10:43 pm (UTC)no subject
Date: 2015-04-15 10:10 pm (UTC)Если же задача в прохождении процесса запуска, локализации, доклада и сборки, то наймите опытного разработчика, который вам это правильно автоматизирует. В конечном счете будет дешевле.
no subject
Date: 2015-04-15 10:40 pm (UTC)no subject
Date: 2015-04-16 06:57 pm (UTC)no subject
Date: 2015-04-14 07:00 am (UTC)Предложение - если знает хоть какой-нибудь язык, написать что-то совсем простое. Я спрашивал последовательные дубликаты в строке убрать. Или развернуть строку там. Что угодно.
Можно еще задачи в стиле книжки "Как сдвинуть гору Фудзи", про сверх-логичных пиратов, например.
no subject
Date: 2015-04-14 07:10 am (UTC)no subject
Date: 2015-04-14 07:49 am (UTC)no subject
Date: 2015-04-14 10:48 pm (UTC)грифельнойдоске, т.к. поток аппликантов невелик. Но да, придется достать из рукава вопрос, который я уже давно не задавал. Банальщина, конечно, насчет двойного побочного эффекта в одном выражении без sequence points, но в своё время позволяло отличать агнцев от козлищ.no subject
Date: 2015-04-15 12:42 am (UTC)no subject
Date: 2015-04-15 10:42 pm (UTC)if (((getchar() << 8) | getchar()) == MAGIC) ....
no subject
Date: 2015-04-16 12:33 am (UTC)П.С. Я подумал над примером. Рискую прослыть козлищем, но не совсем уверен что понимаю о чём речь. В чём двойной побочный эффект? То что вызовы getchar будут в непредсказуемом порядке это ясно. А где ещё проблема? То что сдвиг может не дать 0, если char больше 8 битов или ещё что?
P.P.S. Вспомнил что getchar вообще возвращает int. Так что нуля там не будет.
no subject
Date: 2015-04-16 12:55 am (UTC)Краевые случаи - не проблема: если в файле меньше двух символов, то как минимум один getchar() вернет EOF (== -1), и выражение будет содержать единицы старше 16 бит, т.е. гарантированно не совпадет с не более чем 16-битной константой, призванной проверять сигнатуру файла.
no subject
Date: 2015-04-16 01:19 am (UTC)no subject
Date: 2015-04-14 07:11 am (UTC)no subject
Date: 2015-04-14 10:09 am (UTC)no subject
Date: 2015-04-14 08:03 pm (UTC)no subject
Date: 2015-04-14 08:07 pm (UTC)no subject
Date: 2015-04-14 10:49 pm (UTC)no subject
Date: 2015-04-14 10:21 am (UTC)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. Обсессивное внимание к деталям. Не обязательно только программистская черта, но почти у всех программистов я её наблюдаю.
Наверное можно ещё многое придумать, но это то что первым в голову пришло.
no subject
Date: 2015-04-14 08:06 pm (UTC)no subject
Date: 2015-04-14 08:21 pm (UTC)А нетерпением пусть ПиЭмы занимаются. Им за это плотют.
no subject
Date: 2015-04-14 10:50 pm (UTC)no subject
Date: 2015-04-15 12:38 am (UTC)