Я дал очень простую задачу кодирования, но я не совсем понимаю, что спросили, как быть более эффективным/эффективным?

Я руковожу небольшим подпроектом в своей компании, и я никогда раньше не руководил никаким проектом в своей карьере, и этот мини-проект, по словам моего менеджера, должен стать упражнением в лидерстве.

Я сделал разбивку задач и назначил их. Одна из таких задач имела вид

Разработайте функцию/API с подписью Output functionName(Input1,Input2), функция должна выполнять TaskX

Где TaskX был описан довольно подробно. Это было довольно ясно и прямо, а также довольно самодостаточно.

Однако я получил довольно большой класс, в котором запрошенный API был по сути функцией-членом класса, класс также имел элементы данных, которые не очень полезны для самой функции (например, у него есть совершенно бесполезный просмотрщик ради функция). Я сделал обзор кода и пытался объяснить, как бы я это сделал, включая фрагменты кода (которые были примерно 20/30 строк кода), это также включало тело функции.

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

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

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

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

Любой совет?

(Примечание: проект очень маленький, в нем участвуют три инженера, включая меня).

Обновление : Итак, несмотря на мой обзор кода, мне снова предоставили раздутый код. Так что техника, которую я принял, чтобы разобраться с этим, была своего рода смесью нескольких ответов, которые я получил отсюда.

Прежде всего, я прямо спросил, почему мне дали так много кода с учетом задачи. Мне были даны причины (согласен я или нет, это не имеет особого значения), но в конце мы уточнили, что необходимо для задачи, так что в конце я получил те 20 строк, которые считал нужными. Итак, на этом текущая задача решена.

Однако в качестве упражнения для него я поручил дать мне некую форму дизайна/псевдокода, реализация которой позволила бы достичь цели следующей задачи. Поэтому у нас была встреча, где мы обсудили это. Обсуждение несколько раз имело тенденцию переходить к другим деталям (полезным для понимания, но не важным с точки зрения кодирования), я думаю, на этот раз, однако большую часть времени мне удавалось оставаться в курсе. В конце этой встречи я задал явный вопрос: «Как вы думаете, сколько строк кода вам нужно, чтобы это реализовать?» он объяснил мне, что он должен был сделать, по его мнению, и на этот раз звучало правильно, я также много раз подчеркивал минимальный требуемый код, и я думаю, что на этот раз меня поняли.

Выполняет ли код TaskX ? Можно ли извлечь рабочий код из того, что предоставляет разработчик?
Есть ли у вас какие-либо оценочные сессии, на которых вы обсуждаете объем и заявки на реализацию в группе?
@BernhardDöbler это возможно, да, и я объяснил, как это сделать, в своем обзоре кода. Код выполняет taskX, но слишком привязан к классу. По сути, моей целью было разработать примитивные функции и классы в небольшой библиотеке (чтобы их можно было повторно использовать самостоятельно) и собрать более сложную систему.
@Helena, не совсем нет, но среди «эпопей» на нашей доске я недавно добавил эпопею «Дизайн», где моей целью было бы «официально» выделить время для обсуждения реализаций и архитектуры.
Является ли этот инженер штатным сотрудником или внешним нанятым лицом?
@ Дэниел Р. Коллинз. В доме.
Кто-нибудь может объяснить, почему люди голосуют за закрытие вопроса?

Ответы (4)

Единственное, что я лично думал, это сесть рядом с ним и попытаться провести его через задачи, которые я ему поставил.

Это кажется мне хорошей идеей. По сути, это следование принципу «Показывайте пример» .

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

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

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

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

Я бы не стал оформлять это как разговор ; возможно, это ваша ошибка и почему это отклоняется.

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

Если вы чувствуете, что этот человек начинает отклоняться или вдаваться в ненужные детали, вежливо верните упражнение в нужное русло и снова сосредоточьтесь на поставленной задаче.

Ну, как я уже упоминал в своем обзоре, был относительно длинный комментарий, по сути, с реализацией, которую я бы сделал (20/30 строк кода). Кроме того, я добавил, как бы я структурировал код, если бы он действительно хотел сделать это. способ. Я все еще жду фактического слияния кода, но с тех пор прошла неделя, и ему потребовалась еще неделя, чтобы дать мне код, который в настоящее время находится в репо.
@ user8469759 Я понимаю, но одно дело просто упомянуть «сделай это», а другое — дать некоторые рекомендации и выполнить парное программирование и показать примеры («почему ты пишешь весь этот класс?»… «почему бы просто не сделать Статический метод?"..."вот, что-то вроде этого"... "хорошо, видите, это работает? Попробуйте сделать другие части таким же образом сейчас"). Мне кажется, что этот человек, возможно, привык делать все по-своему, но теперь вы видите, что вам нужно дать ему понять, что есть другие способы, более адекватные этим задачам (и простое написание комментария или высказывание может не дать результата). обманывать).
Я понимаю вашу точку зрения ... но если он не попросит о помощи, я не уверен, что моя инициатива по его руководству будет оценена ... Я не хочу, по сути, показаться крутым.
Как лидер этого человека, ваша работа - убедиться, что с ним все в порядке и он работает. Это не "крушитель мячей" (если только вы не проверяете их круглосуточно и без выходных, а я чувствую, что это не так). Я предлагаю вам дать этому человеку больше указаний и парного программирования в одной задаче , а затем посмотреть, как он справится с остальными задачами... задача... теперь, если после этого вы не увидите никаких изменений или улучшений с их стороны, то я боюсь, что этот человек может быть не самым лучшим учеником...
Я предполагаю, что следующий вопрос, который нужно задать, будет заключаться в том, как бороться с «плохими учениками», какой-нибудь быстрый совет по этому поводу? Или мне просто задать отдельный вопрос?
@user8469759 user8469759 это был бы отдельный вопрос, и (1) что-то, о чем вы еще не знаете, так ли это в случае с этим человеком, и (2) что-то, что, я уверен, уже задавали и отвечали здесь раньше (поэтому попробуйте просмотреть прошлые вопросы прежде чем спрашивать, пожалуйста :)

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

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

Вы можете быть более конкретным? Какой вызов? Обычно я привожу в описании задач актуальную сигнатуру API... А потом описываю то, что должно идти в теле функции наподобие псевдокода. Причина, по которой я это делаю, заключается в том, что я думаю, что у людей есть свой способ реализовать одну и ту же логику. Я думаю, что предоставление ему кода для работы - это слишком много, если только я вас не понял.
Задача для него состоит в том, чтобы создать минимальный код.
Разве мое описание задачи не эквивалентно задаче, о которой вы говорите? Чего мне не хватило, чтобы кристально ясно сказать: «Это функция, и мне нужен минимум кода и ничего больше»?
Вот почему я предлагаю сформулировать это как «написать самый короткий и простой код, который вы можете, даже если он не готов к выпуску».
Я собираюсь принять вашу стратегию. Скоро у нас будет совещание по дизайну, на котором будет разработан очень специфический алгоритм, и я надеюсь, что вместе с ним смогу вычислить минимальное количество необходимого кода.

Это очень похоже на запутывание . Обфускация — это практика, обычно используемая разработчиками, которые плохо справляются со своей работой, посредством чего они обеспечивают безопасность своей работы, делая свой код максимально сложным для понимания и работы с ним, чтобы они были единственными, кто знает, как он работает. Поэтому, если их увольняют, компании приходится выбрасывать всю сделанную ими работу и переделывать ее с нуля, потому что никто не понимает, что было сделано. Поэтому, по их мнению, их меньше увольняют, потому что накладные расходы на их замену слишком высоки.

Вот что вы делаете: если вы думаете, что проект можно сделать за 3 дня, вы устанавливаете крайний срок в 3 дня. Это KPI, которому должен соответствовать ваш разработчик; если они не могут выполнить задание за 3 дня, то это предупреждение против них, которое вы можете использовать при следующем обзоре их эффективности. Если они не считают, что 3 дня — это достаточно времени, они могут прийти к вам и договориться о сроках, а в это время вы можете уточнить у них требования и дать им понять, что задание, которое они получают, не такое большое, как они думают. это так, а потом, если они все же попытаются поставить что-то действительно большое, вы можете сказать им, что их код не соответствует спецификациям.

Самое важное, что нужно делать с разработчиком, который занимается обфускацией, — это не объединять его код . Схема обфускации терпит неудачу, если их код не может быть запущен в производство. Убедитесь, что в производство идет только чистый код, чтобы, если этот разработчик покинет компанию, вы не застряли с кучей технических долгов.

В качестве предостережения ко всему вышесказанному : во многих языках есть «лучшие практики», которые очень похожи на обфускацию кода, например, определения интерфейсов, множество накладных расходов на настройку и т. д. Убедитесь, что вы понимаете ограничения, с которыми работает разработчик; возможно, он предоставляет хороший, чистый код, соответствующий стандартам языков/фреймворков, с которыми он работает, а вы говорите ему писать плохой, хакерский код, который трудно поддерживать, а он пытается вежливо сказать вам, что вы придурок, а ты не слушаешь. Помните об этом, что бы вы ни делали.

Он не предоставляет хороший код... Например, он повторно реализовал конструктор перемещения по умолчанию, чтобы он делал то же самое, что и конструктор перемещения по умолчанию. По сути, код очень избыточен, и он инкапсулирует реальную функцию, которая мне нужна, но таким образом, что я думаю, что это полезно. Кроме того, очевидно, что он не прикладывает достаточно усилий даже для этого, например, он не следовал какому-либо соглашению об именах (некоторые переменные в верхнем регистре... некоторые в нижнем регистре). Есть и другие вещи...
@user8469759 user8469759 Достаточно честно. У меня нет примера написанного им кода; если вы уверены, что он не прав, то берите первую часть.
В любом случае, я не думаю, что есть запутанность. Это мини-проект об анализе 3D-форм, и он мало что знает об этом. Поэтому я думаю, что есть некий барьер из-за того, что он точно не знает, что делает. Вот почему я провожу довольно много времени, рассказывая ему о фактической цели каждой части, но я понимаю, что слишком много разговоров, прежде чем я действительно что-то получу, и это что-то не то, что я хотел. Также возможно, что он не очень заботится о кодировании... Но в любом случае... он должен мне помочь, и я пытаюсь понять, как я могу себя вести, чтобы сделать эту работу лучше.
@user8469759 user8469759 - Похоже, вам следует поручить эту работу кому-то другому.
@ user8469759 Когда вы наняли этого разработчика, указали ли вы, что анализ 3D-форм будет частью навыков, необходимых для работы, и проверяли ли вы его навыки, связанные с этим, или вы задали ему стандартный вопрос из Hacking the Coding Interview? как это делает большинство компаний, и проверить его на предмет того, читал ли он эту книгу (подсказка: большинство разработчиков читали)? Если вы не проверили его на знания в этой очень конкретной и специализированной области, не расстраивайтесь, когда он приходит в компанию и не может работать в этих проектах. Похоже, вам стоит нанять лучше.
Я никого не нанимал. Это мини-проект, и любой желающий может присоединиться ко мне, этот парень специально хочет узнать больше о предмете. Как я уже сказал, проблема в том, что «я общаюсь», а не в том, что «он — проблема».

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

Вплоть до того, что вы отправляете ему специальный файл редактора кода, в зависимости от используемого вами языка (например, *.cs) со структурой и «Поместите сюда код» в контексте

Таким образом, ему будет сложнее раздуть и запутать свою работу.

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

ИМХО, работа со всевозможными подчиненными - это тоже часть роста до руководящей роли, где твоя задача не выполнять работу, а распределять задания и интегрировать полученные результаты в конечный продукт.