Как работать с тем, кто работает быстро, не заботясь о качестве? [закрыто]

Я работаю в организации с очень маленьким отделом разработки, разрабатывая проект только с одним сотрудником. Мы оба младшие, никогда раньше не использовали ASP MVC .NET и не работали над кодом производственного уровня. Остальные в отделе тоже не имеют опыта работы с MVC и никогда не программировали в команде, так что они не помогут.

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

Что происходит, так это то, что он прорабатывает функции, штампуя тонны нового кода. Но я думаю, что качество его кода очень низкое. Показательный пример: после возвращения из отпуска я обнаружил, что он создал около 50 новых полужестких маршрутов, большинство из которых можно было бы обработать системой маршрутизации MVC по умолчанию без какой-либо настройки. Я сказал ему, почему считаю это плохой идеей, но он не был убежден, и я не настаивал на том, чтобы он это изменил. Сегодня я потратил часы, пытаясь выяснить, почему моя первая простая попытка использовать фильтр исключений терпит неудачу, пока я не заметил, что один из его лишних маршрутов неверен и перенаправляет мой запрос задолго до того, как вызывается метод, выбрасывающий исключение.

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

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

Я не знаю, как мне поступить в этой ситуации. 1) Как мне помочь ему начать писать лучший код? К счастью, он готов слушать то, что я говорю, но я не знаю, что ему сказать. И 2) Что мне делать с написанным им плохим кодом, который явно не содержит ошибок? У меня нет времени исправлять все за него или даже искать для него подходящее решение, но написание собственной части кода становится все более сложным и разочаровывающим. Он ненавидит переделывать то, в чем не видит проблем, и вряд ли придумает лучшее решение во второй раз. Любые идеи?

Парное программирование. Создавайте код вместе, а не работайте каждый по отдельности, если это вызывает у вас такие проблемы.
Я также был бы очень признателен, если бы вы видели, что он делает, и вам не дали его код через 6 месяцев после того, как он «закончил» его.
Полная проверка кода команды! Похоже, вы тоже слишком часто запускаете производство.
Учитывая вашу ситуацию - уходите оттуда. Вы не будете хорошо учиться, и я не вижу, как вы можете улучшить ситуацию. Самое главное, вы младший, и я предполагаю, что все еще учусь. Изучите технологию неправильно, и будет непросто разучиться и переучиться правильно.
@happybuddha - ничто не мешает ОП найти наставника за пределами компании и научиться писать качественный код независимо от того, что делает другой разработчик. Вы не можете называть себя программистом, пока вам не пришлось подчищать чужой беспорядочный код.
Если он готов слушать то, что вы говорите, почему бы вам не рассказать ему о важности качественного кода? Вам это может показаться очевидным, но вряд ли ему. Однако вы должны понимать разницу между тем, что вы можете изменить, и тем, что вы не можете... К сожалению, не все рассматривают программирование и дизайн как искусство...
Отклоните код при запросе на слияние.
@happybuddha Вариант «выйти» должен быть последним после того, как были опробованы все остальные варианты. В противном случае вы просто превратитесь в наемного работника.
Ваша проблема не в вашем коллеге. Ваша проблема связана с вашим руководителем/менеджером проекта. Низкокачественный код доставляет вам неудобства, но в конечном счете является ее обязанностью.

Ответы (3)

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

Вы упомянули количество ошибок и сложность их исправления и/или добавления новых функций. Судя по всему, она не считает это серьезной проблемой и готова пойти на этот риск. Восприятие есть реальность. Быстрое выполнение запроса воспринимается как быстрое его выполнение. Да, пользователям приходится указывать на некоторые ошибки, и их исправление занимает больше времени, чем следовало бы, но никто не учитывает это в своем определении того, сколько времени ушло на исправление.

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

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

Пожалуйста, внимательно подумайте, действительно ли «делать это правильно» — это то, что нужно проекту.

Я сильно ненавижу и презираю плохой код и хочу делать все «правильно»™, но это не значит, что это всегда лучший подход.

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

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

Идеальное — враг готового :)

Установите базовый уровень качества кода и сделайте код-ревью. Вам необходимо согласовать с ним и вашим руководителем Базовый план, какой уровень качества вы хотите. Такие вещи, как проверка ввода, модульные тесты, строгое разделение кода MVC и т. д. и т. д., могут быть частью ваших правил обеспечения качества. Затем просмотрите код друг друга и отклоните код, который не соответствует базовому уровню качества. Отклоненный код, конечно же, не должен попасть в производство.

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

Спасибо, я попробую это. Должен посмотреть, как я продам своего босса на базовом уровне. Что касается расслабления, я стараюсь это делать. Он хорошо работал в тех областях, в которых у меня больше знаний, таких как модель данных. Но с MVC я не могу провести различие между «этот антипаттерн принесет нам много неприятностей в будущем» и «а, это можно было бы сделать чище, ну да ладно». Я позволяю почти всему оставаться как есть, и когда мы действительно сталкиваемся с проблемами первого рода, я злюсь на себя за то, что не поднял их в самом начале.