beldmit: (Default)
[personal profile] beldmit
[livejournal.com profile] arilou вчера поднял вопрос о том, насколько разумно требование предоставлять образец кода на собеседованиях. Да, значительная часть кода пишется под работодателей, которые от предоставления такового будут не в восторге.

[livejournal.com profile] besm6 и [livejournal.com profile] vitus_wagner тут же предложили радостный выход - предоставлять код из OpenSource проектов, который туда попал. Да, все противоречия таким образом вполне снимаются. Правда, оба они не остановились на достигнутом, заявив, что программист, у которого нет кода в OpenSource-проектах - не настоящий, но эту реплику я склонен воспринимать скорее как признак идеологической позиции.

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

Тезис второй.
Не все OpenSource-проекты одинаково полезны. При попытках отправить патч в различные я наблюдал 4 позиции

1. Принять патч после переписки. Самая простая и понятная.
2. Принять патч к сведению, через какое-то время выпустить новую версию, в котором интерфейс, предложенный в патче, будет переименован нафиг.
3. Не принимать патч, но реализовать свой, дающий тот же функционал. Патч в этом случае используется как ТЗ/основа для ТЗ.
4. Разработчик в гибернации, на патчи не реагирует.

Желающие сами могут сделать вывод о продуктивности посылки патча.

Тезис третий, главный.
От программиста на работе требуется писать поддерживаемый код. Потому что времена солистов, к счастью, прошли. Поэтому вопросы на собеседованиях "Что означает это выражение - переменную или функцию" для меня имеют один однозначный ответ: "Автора этой строчки надо уволить нафиг". Да, и к большинству нестандартных и к половине высокоуровневых идиом это тоже относится - код, написанный человеком, перечитавшим Александреску, в отличие от кода человека, остановившегося на Саттере или Мейерсе, скорее всего к поддержке непригоден.

А от веб-программистов разумно требовать хотя бы структуру нижележащей базы. Потому как из этого можно понять степень ясности мышления.

Date: 2008-09-12 05:50 am (UTC)
From: [identity profile] maksa.livejournal.com
Твоя позиция мне ближе.

Date: 2008-09-12 06:22 am (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Интересно, Дим, что ты сейчас работаешь руководителем проекта, и рассматириваешь процесс скорее с точки зрения нанимаемого, а мы с Раном работаем программистами, и рассматриваем процесс скорее с точки зрения нанимателя. Ну и с теорией вероятности у тебя некоторые сложности. Впрочем, ты за время работы в Криптокоме по-моему ни разу внутрь криптоалгоритмов не лазил. И образование у тебя не естественно-научное, поэтому со статистикой там было плохо.

С точки зрения нанимателя ошибкой первого рода является взять плохого программиста, а ошибкой второго рода - не взять хорошего. Поэтому отборочный процесс, который заведомо отсеет всех плохих программистов, но заодно отсеет и некоторых хороших, лучше, чем процесс который пропустит некоторых плохих, но не упустит ни одного хорошего.
From: [identity profile] beldmit.livejournal.com
Сразу замечу: у меня нигде образцы кода не требовали, а где требовали - туда не взяли (один раз было), но работаю же. И код мой работает.

Первый тезис - с позиции условно-абстрактной. Да, у нанимаемого она такой может быть. Вообще жизнь больше работы, и для вас с Раном это тоже так, иначе бы спорить с вами было бы бессмысленно.

Второй - он в тезисы попал зря. Это иллюстрация к соотношению жизни и модели.

А третий тезис - он с точки зрения что программиста-коллеги, что руководителя. Собственно, ради него все и написано.

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

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

А теперь прикинь сам - какой объем кода надо для этого представить и проанализировать. А отсеять можно проще - предъявив кусок кода на разбор и объяснение.
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Так вот, уровень определяется умением писать поддерживаемый код. С низким порогом вхождения в оный код. С понятными архитектурными концепциями, в частности.

А теперь прикинь сам - какой объем кода надо для этого представить и проанализировать. А отсеять можно проще - предъявив кусок кода на разбор и объяснение.


Поэтому и есть соблазн самому не возиться с анализом представленного кода. А воспользоваться результатами работы других людей. Если какая-то опенсурсная команда приняла от этого человека код, значит есть подозрение, что они сочли его поддерживаемым.
From: [identity profile] beldmit.livejournal.com
Да. В таком виде это совершенно верно, и похоже на 3-й дополнительный показатель. Ничем не хуже, скажем, предыдущих мест работы.

Date: 2008-09-12 09:29 am (UTC)
arilou: (Default)
From: [personal profile] arilou
Насчёт ошибок нанимателя: мне показалось, или ты тут сознательно исходишь из одномоментного и трудноотменяемого решения о принятии? Т.е. попросту не берёшь в расчёт испытательный срок?

Date: 2008-09-12 09:37 am (UTC)
From: [identity profile] http://users.livejournal.com/_ltt_/
Испытательный срок смягчает ошибку, но не отменяет её.

За время испытательного срока плохой программист получает зарплату, которая не окупается его трудом.
За время испытательного срока хороший программист, вместо которого взяли плохого, находит себе другую работу и перестаёт быть доступным для найма (либо его надо перекупать, увеличивая ФОТ).
После увольнения плохого программиста, не прошедшего испытательный срок, руководителю опять приходится заниматься поисками работников и собеседованиями, отнимая время от собственно руководства разработкой...

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

Date: 2008-09-12 01:36 pm (UTC)
arilou: (Default)
From: [personal profile] arilou
Да не, понятно, что лучше сразу взять хорошего, и что взятый плохой сколько-то ресурсов "отъест".
Однако, если есть сильные сомнения в нём - можно начать с небольших задач, чтобы коммиты были часто - и посмотреть, что он делает в реальных условиях (а не что он предоставит на показ - тоже есть разница).
С испытательного срока можно выкинуть, не дожидаясь окончания.

Date: 2008-09-12 10:09 pm (UTC)
From: [identity profile] a-orlov.livejournal.com
Если программиста берут в большой проект, то понять его эффективность внутри проекта и внутри команды получится совсем не сразу. Имхо, испытательный срок - это просто возможность платить меньшую зарплату. Не слышал, чтобы кого-то при увольнении сотрудника останавливало то, что у него испытательный срок окончился месяц назад.

А основной риск нанимателя, на мой взгляд, не в том, что месяц зарплату впустую платил, а в том, что на лечение последствий от взаимодействия неудачно подобранного программиста с системой можно потом потратить несравнимо больше ресурсов.

Date: 2008-09-13 06:40 am (UTC)
From: [identity profile] beldmit.livejournal.com
Угу. Единственный кусок кода в "Мастерхосте", написанный полностью мной - это переписанная с нуля система, разработанная изначально именно таким человеком.

Date: 2008-09-13 04:09 pm (UTC)
arilou: (Default)
From: [personal profile] arilou
По-моему, при правильной организации совместной работы над проектом и правильном выборе задачи для новичка все последствия того, что его через месяц выгонят, сводятся к откату на месячную давность соответствующего участка кода и поручению этой задачи другому. Если новичку дают тяжело попортить чужой код без возможности откатиться назад - это уже повод для неприятных вопросов к его начальнику.

Date: 2008-09-13 06:17 pm (UTC)
From: [identity profile] a-orlov.livejournal.com
Так в том-то и проблема, что узнать, как поведет себя слон в посудной лавке, можно только заведя слона в посудную лавку.

Date: 2008-09-12 11:44 am (UTC)
From: [identity profile] dph.livejournal.com
Витус,
на текущем рынке мне проще взять одного плохого и одного хорошего и плохого выгнать через месяц...
Так как ошибки второго рода уже, увы, дороже.

Кстати, я на собеседовании вообще не прошу показать код - нужные мне навыки проверяются совсем другим способом.

Date: 2008-09-13 04:58 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Ну вот, посмотри. Зашедшие в этот пост наниматели высказались за мою позицию. А особенности сабмита патчей в OpenSource никто так и не оспорил.

Date: 2008-09-12 07:09 am (UTC)
From: [identity profile] yakov-sirotkin.livejournal.com
Java гораздо проще C/C++, поэтому читать Саттера и Майерса - это уже ошибка.

Если код написан на Java, то с вероятностью примерно 100 процентов я смогу в нём разобраться и причесать, не думаю что найдётся много людей, которые понимают любой C++ код.

У нас люди пишут код на собеседовании. Лично я известный фанат TopCoder.

Date: 2008-09-12 07:17 am (UTC)
From: [identity profile] beldmit.livejournal.com
Тоже подход. Если интернетом пользоваться даете.

Date: 2008-09-12 07:24 am (UTC)
From: [identity profile] yakov-sirotkin.livejournal.com
Проблема абсолютно не в интернете - просто многие кандидаты вообще не задумываются о наименовании переменных. Не думают об отсутствии дублирования в коде. Просто не понимают, зачем нужен рефакторинг.

Date: 2008-09-12 07:34 am (UTC)
From: [identity profile] beldmit.livejournal.com
Дублирование в коде есть смысл выносить в отдельную функцию, но его сперва найти надо... А вариант "почти одинаковый код" чреват порождением функции с 10 параметрами на учет этого "почти". Лучше уж дублирование.

Date: 2008-09-12 09:26 am (UTC)
arilou: (Default)
From: [personal profile] arilou
В таком случае, возможно, стоит просто подойти к решению иначе.
Т.е. дублирование, которое лечится только такими вот функциями - это весьма возможно ошибка проектирования.

Date: 2008-09-12 09:53 am (UTC)
From: [identity profile] beldmit.livejournal.com
Нет. Просто дополнительное условие в двух одинаковых вложенных циклах, например.

Date: 2008-09-12 01:30 pm (UTC)
arilou: (Default)
From: [personal profile] arilou
А может быть, сделать так, чтобы не нужно было двух этих циклов?

Не, я не спорю, всяко бывает. Без конкретики решения тут не подсказать.

Date: 2008-09-12 08:59 am (UTC)
From: [identity profile] http://users.livejournal.com/_ltt_/
Я вот код когда спрашивал, а когда и нет. Если спрашивал — то смотрел не на язык и использование его "хитрых мест" (как раз в озвученной тобой концепции "поддерживаемого промышленного кода" чем меньше языковой специфики задействовано, тем лучше), а на "общие места" — аккуратность, наличие хоть какой-то системы в именовании переменных / функций / классов / методов, и т.д. и т.п.

Сейчас, правда, я код с людей не прошу, а задаю две простые задачки. Одна алгоритмическая, на сообразительность; вторая про SQL — тоже на живость ума и владение чем-то большим, чем простым select * from t where a = 5... Обе увидены и "спёрты" из ЖЖ двух разных деятелей ;)

Так вот, вчера из 4 кандидатов двое обе эти задачки успешно отщёлкнули и стали потенциальными сотрудниками.

А на их код я посмотрю потом. Я ещё даже толком не смотрел код системы, которую мне надо принять от текущих разработчиков :)

Date: 2008-09-13 11:06 am (UTC)
From: [identity profile] dimrub.livejournal.com
Все верно. Кроме того, если я позиционирую себя, как программиста на C++, а опенсорсовские проекты у меня на питоне (причем совсем в другой области), то давать их на интервью не вижу смысла.

Profile

beldmit: (Default)
Dmitry Belyavskiy

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122 2324252627
28 29 3031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 9th, 2026 11:51 pm
Powered by Dreamwidth Studios