Должны ли мы продолжать работать с сотрудником, который все еще пишет плохой код через много лет? [закрыто]

13

Я задаю этот вопрос программистам C ++, потому что: a) только программист C ++ может судить о технических достоинствах примеров; б) Только программист может почувствовать темперамент другого программиста, который пишет такой код.

HR и директора знают, что есть проблема просто потому, что они видят доказательства в этой области. Это мой вызов, дадим ли мы данному программисту больше времени. Многие из ошибок находятся на очень базовом уровне - мой вопрос (к программистам) заключается в том, следует ли кому-то, кто заявляет, что он является старшим разработчиком C ++, дать преимущество в виде сомнения на основе примеров их текущего кода. Непрограммисты - даже люди вне программирования на C ++ - не могут судить об этом.

Для справки, мне была поручена задача управления разработчиками в хорошо известной компании. У них есть один разработчик, который специализируется на всем своем кодировании на C ++ (с тех пор навсегда), но качество работы ужасно. Обзоры кода и тестирование выявили много проблем, одна из худших - утечки памяти. Разработчик никогда не проверял свой код на наличие утечек, и я обнаружил, что приложения могут пропускать много МБ всего за минуту использования. Пользователи сообщали об огромных замедлениях, и его мнение было таково: «Это не имеет никакого отношения ко мне - если они выходят и перезапускаются, все снова хорошо».

Я дал ему инструменты для обнаружения и отслеживания утечек и провел с ним много часов, чтобы продемонстрировать, как используются эти инструменты, где возникают проблемы и что нужно делать для их устранения. Мы на 6 месяцев вниз, и я поручил ему написать новый модуль. Я рассмотрел его до того, как он был интегрирован в нашу большую кодовую базу, и с ужасом обнаружил то же самое плохое кодирование, что и раньше. Часть, которую я нахожу непостижимой, состоит в том, что некоторые кодировки хуже, чем любительские. Например, он хотел класс (Foo), который мог бы заполнить объект другого класса (Bar). Он решил, что Фу будет содержать ссылку на Бар, например:

class Foo {
public:
    Foo(Bar& bar) : m_bar(bar) {}
private:
    Bar& m_bar;
};

Но (по другим причинам) он также нуждался в конструкторе по умолчанию для Foo и вместо того, чтобы ставить под сомнение его первоначальный дизайн, он написал этот гем:

Foo::Foo() : m_bar(*(new Bar)) {}

Таким образом, каждый раз, когда вызывается конструктор по умолчанию, Bar пропускается. Что еще хуже, Foo выделяет память из кучи для 2 других объектов, но он не написал деструктор или конструктор копирования. Таким образом, каждое выделение Foo на самом деле пропускает 3 разных объекта, и вы можете представить, что произошло, когда Foo был скопирован. И - это только поправляется - он повторил ту же самую модель в трех других классах, так что это не одноразовый промах. Вся концепция неверна на многих уровнях.

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

user94986
источник
15
Если вы уже видели, что он пишет плохой код, почему вы позволили ему писать свое дерьмо в течение 6 месяцев, не наблюдая за ним?
Билли МакНуггетс
4
ИМО, когда вы видите, что кто-то некоторое время делает плохую работу, вы НЕ МОЖЕТЕ позволить ему работать в одиночку, даже если это только отладка / ремонт. Если вы хотите сохранить его в своей компании, вы ДОЛЖНЫ контролировать его и ПОСЛЕ ПОСЛЕ ТОГО, КАК вы все еще получаете от него плохие результаты. Позволить ему работать одному в течение 6 месяцев, не глядя на него, - это ИМО плохое руководство.
Билли МакНуггетс
3
@ user94986 Тогда, если вы проводите время с ним, объясняя ему, что его привычки плохие, вы должны следить за ним, и если ничего не изменится, не ждите 6 месяцев, чтобы поговорить с ним.
Билли МакНуггетс
4
Если он не думает, что утечки памяти являются проблемой, нет смысла учить его, как их избежать, и давать инструменты, помогающие с этим. Основная проблема может заключаться в том, что он неправильно понимает цели и требования к товару.
maxim1000
2
Этот вопрос, по-видимому, не по теме, поскольку речь идет о том, что фактически является юридической консультацией HR, которая в лучшем случае проблематична для нас.
Мировой инженер

Ответы:

22

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

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

Нил
источник
12
+1 за «плохого программиста, с которым я обычно работаю, но программиста, который не может улучшить, я не могу».
Да, также, я бы дал парню понять, что это довольно серьезно. Похоже, ему не сказали или не признали, что есть проблема в течение многих лет. Приходите на беседу, готовый указать на примеры того, чего он не должен был делать, и как это повлияло на качество приложения. Если он по-прежнему не хочет признаваться в проблеме с его кодом, я, вероятно, позволю ему уйти. И я бы, наверное, не дал бы ему много времени, чтобы собраться вместе, если бы он это сделал. Вы определенно должны подчеркнуть, что его будущее в компании поставлено на карту, и ему не хватает достаточно критических навыков для разработчика C ++.
Эрик Реппен
@ErikReppen Я согласен, но я также думаю, что программисты могут быть самыми упрямыми людьми на земле. Если вы давите слишком сильно, он может отрицать любые проблемы со своим кодом просто из-за своей защиты. Я думаю, что важно подчеркнуть серьезность ситуации, но я все равно попытался бы посочувствовать ему: «Я случайно заметил эту маленькую ошибку. Вы случайно ее тоже поймали? Как вы думаете, допустили ли вы ту же ошибку в других областях? ваша программа?
Нил
@Neil Единственный путь сквозь упрямую стену - это удар в задницу. И я говорю из опыта как упрямая сторона этого уравнения. Тем не менее, если бы он впервые услышал о проблеме с его кодом, да, я бы немного смягчился, но похоже, что они пытались сообщить о проблеме хотя бы один раз
Эрик Реппен,
@ErikReppen Может быть, но вы рискуете, что он придет в себя, чтобы убрать вас с хвоста. При таком раскладе вы могли бы также сказать: «Успокойся, или ты уволен». По крайней мере, этот подход выясняет, не совесть ли он в своих ошибках.
Нил
18

Итак, мой вопрос: вы бы не отказались от того, кто пишет такой явно плохой код?

Нет. Я бы уволил любого профессионального разработчика C ++, у которого не было базового понимания управления памятью.

Если это кто-то из Java или C # или что-то еще, я бы дал им немного широты, но это чистая некомпетентность.

Telastyn
источник
9
Я не могу понять, как за этот ответ можно проголосовать. Увольнение кого-либо не является вопросом, который следует воспринимать легкомысленно.
Флориан Маргейн
3
@FlorianMargaine - Конечно, но это похоже на очевидный случай. Сколько этот сотрудник обходится компании в потерянных продажах из-за утечек памяти или уязвимостей безопасности? Сколько потрачено времени на тестирование / исправление этой хрени? Сколько стоит, чтобы ОП нянчил их? Насколько страдают другие программисты от его простого присутствия ? Если у сотрудника нет абсурдных знаний о предметной области (или шантажа), замена их не обходится дороже.
Теластин
1
@FlorianMargaine, этот тип сотрудников - это то, кто не уволен достаточно, он наносит ущерб компании в трудном положении, чтобы исправить технический долг. В больших красных огнях написано: «Им все равно, так почему мы должны?». Знаете, какой сотрудник вам действительно нужен? «... но мне все равно, поэтому мне нужно идти в место, которое делает». Плохим уже было все равно, поэтому они остаются в вашем офисе. Вы ДОЛЖНЫ удалить людей, которые вредят производительности, больше, чем они вносят. Этот выбор не является легкомысленным, однако на самом деле это четкая линия, бездействие - это ясное действие.
JM Becker
13

Мы не можем ответить на более широкую часть вашего вопроса. А именно, вы должны оставить или уволить этого сотрудника. Уволить сотрудника сложно, но это решение не входит в компетенцию такого сообщества.

Вы обновили свой вопрос, чтобы ограничить ответы программистов на C ++. Для моего фона / квалификации: я порезал зубы на C, и я могу писать на C ++, C # и Java. И мне нравится гоняться за условиями гонки между нитями, потому что я думаю, что это весело. Да, я "получаю" немного вертеться.

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

Но давайте начнем с некоторых ваших вопросов:

  1. Вы спрашивали его о коде и примере, который вы упомянули? Каково было его впечатление от обзора?
  2. Вы давали ему подробности в течение этих 6 месяцев о понимании манипуляций с памятью и о том, чтобы в его коде не было утечек памяти?
  3. Предоставляли ли вы достаточно частые отзывы в течение этих 6 месяцев, чтобы указать, добился ли он прогресса или нет.
  4. Вы явно заявляли, что его старый способ кодирования больше не приемлем в новом коде?

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

Его ответ на ваш недавний обзор будет самым интересным.

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

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

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


источник
1
+1 за «Постоянно отсылать его, чтобы он все больше и больше пересматривал старый код, не всегда практичный путь для обучения»
Билл
+1 за последние абзацы. Прогресс, достигнутый кем-то, по сравнению с усилиями, направленными на то, чтобы кто-то должен был учесть любое суждение об эффективности.
Марьян Венема
10

Боюсь, что его плохой код - не единственная проблема в вашей команде.

  1. Кто просматривает его код? Почему он ускользнул без предупреждения за то, что принял код с уязвимостью утечки памяти?
  2. Почему стресс-тесты не нашли эту проблему? Вы их используете? Если да, то почему они не работают?
  3. Его оставили без присмотра на долгое время. Почему?
  4. Он не использует инструменты, которые вы ему дали. Как вы мотивировали его начать использовать надлежащие инструменты?

Вы говорите, что он был в компании в течение длительного периода времени. Увольнение такого человека редко является хорошей идеей (если только он не сотрудник типа Уолли). Их знание потребностей клиентов, продуктов, которыми вы владеете, и т. Д. Часто гораздо ценнее, чем код, который они пишут.

Решения:

  • переместить его в QA, чтобы он узнал, чего следует избегать
  • парное программирование с кем-то, кто может указать на его ошибки
  • расширенный контроль качества его кода
  • заставьте его написать стресс-тесты, если он увидит, что его аппарат разбился после создания и уничтожения 10 тыс. объектов, возможно, он научится
  • несколько / все из них выше :)
Анджей Бобак
источник
3

Принятие решения уволить кого-либо является трудным решением для любого. Ваша ситуация, однако, усугубляется несколькими факторами:

  1. Похоже, что этот разработчик был в компании в течение нескольких лет
  2. Разработчик пишет весь код C ++ компании
  3. Похоже, что до вас никто никогда не обсуждал уровень плохого кода с разработчиком
  4. Как новый менеджер, вы не представляете, кто / что знает разработчик в / о компании и каковы политические последствия увольнения разработчика

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

На этом этапе вам действительно нужно начать активное управление, чтобы в течение 3 месяцев

  • Приличный программист на С ++, который знает, что делает

или

  • Завершено разработчиком.

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

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

Вам также следует сообщить об этом своему менеджеру и отделу кадров (если есть).

Во время этого процесса вам нужно будет активно управлять разработчиком и проверять задачи / код каждые 1-2 дня, а также проверять, что они в порядке, подробно описывать те, которые отсутствуют, и объяснять, что можно сделать для их улучшения.

Армитаж
источник
1

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

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

Одна жемчужина, которую я приобрел на курсе много лет назад, - это тот факт, что люди с техническими знаниями, которых нет у других, могут привести руководство к ослаблению. Это плохо для команды. Вы можете бояться потерять единственного разработчика C ++, но их можно заменить. Очевидно, существуют риски, связанные с тем, что он хорошо знает выпущенные продукты, но часто я видел людей, у которых, казалось бы, незаменимые знания о продукте / технических знаниях заменялись легче, чем предполагалось. Команды и организации часто могут заполнить пробелы, которые изначально кажутся трудными для заполнения. Конечно, если он не обладает навыками C ++ или специфическими знаниями организации, которые, по вашему мнению, будет трудно заменить, проблем гораздо меньше!

Уэйн М
источник
1
Я подозреваю, что этот парень был бы совершенно ошеломлен, узнав, что его менеджер думает уволить его. Некоторые люди, которым вы просто должны ударить по голове доской и упрямые, говорят им, что они должны улучшить или они будут уволены.
HLGEM
0

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

MetaGuru
источник
-1

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

Джек Эйдли
источник