Я разработчик со стажем всего пару лет, работаю в небольшой компании из восьми разработчиков над Java-проектом. Руководитель нашей группы, также один из менеджеров, старше и очень продуктивен, и говорит, что у него около пятнадцати лет опыта работы с Java.
В прошлом месяце, когда мы обсуждали некоторые написанные им модули с исходным кодом, я заметил в исходном коде, что один класс переопределяет метод equals()
, но не метод hashCode()
— я имею в виду два метода, объявленных в самом базовом классе Java Object
. Когда я очень спокойно и вежливо указал на это руководителю группы, он отрицал, что класс должен переопределять оба метода. На этом проблема закончилась бы, но я счел аморальным позволять такому недостатку (багу) портить продукт позже.
Через несколько дней я подошел к нему лично и наедине и спокойно, без неуважения, объяснил ему проблему и использовал внешние ссылки (например, книгу Джошуа Блоха «Эффективная Java»). Ну, он сказал, что посмотрит на это, и в конце концов он это сделал. Однако с тех пор он относится ко мне холодно.
Хуже того, недавно я увидел серьезную проблему в исходном коде. Некоторые написанные им классы реализуют Serializable
интерфейс, но поле serialVersionUID
не является фиксированным (постоянным) числом. Вместо этого он меняется. Я имею в виду, что мы получаем разные числа каждый раз, когда запускаем приложение.
Опять же, с мотивацией предоставления нормального продукта, я хотел бы сообщить об этом должным образом. Но я не знаю, как правильно это сделать, чтобы он не принял это на свой счет. Видите ли, мои предыдущие подходы не увенчались успехом. Как я мог это сделать?
Любой совет приветствуется.
Редактировать: цель этого вопроса — найти эффективные, продуктивные, вежливые, уважительные, совместные способы сообщить об улучшениях по поводу серьезных проблем с кодом, а не ставить под сомнение авторитетные или управленческие решения, принятые коллегами или даже начальниками.
Общее напоминание: всегда лучше избегать критического или лекционного тона. Либо сделайте это простым наблюдением («вы, кажется, забыли реализовать здесь хэш-код»), либо задайте вопрос («есть ли причина, по которой вы не реализовали хэш-код?»). Позвольте их ответным реакциям вести дискуссию о том, почему это важно, если это необходимо, но начните с предположения, что они знают принципы и что странность была либо простой оплошностью/опечаткой, либо имела за собой какую-то рациональную причину, которую можно обсудить, а не обсуждать. избили.
Люди слушаются лучше, если вы относитесь к ним с уважением.
И помните, иногда непонимание будет вашим. Таким образом вы опозорите себя гораздо меньше, чем если сделаете более категоричное или дидактическое заявление.
Возможно, взглянув на это с другой точки зрения, вы получите лучшее представление.
Я руководитель группы, а также менеджер в небольшой компании из восьми разработчиков. У меня 15 лет опыта программирования на Java. В моей команде появился один новый человек, который намного моложе меня и имеет всего пару лет опыта.
В прошлом месяце, когда мы обсуждали некоторые модули исходного кода, которые я написал, он начал принижать мой код. Несмотря на то, что у него гораздо меньше опыта, чем у меня, он утверждал, что видел ошибки в коде, который работал совершенно нормально. После короткого спора мне показалось, что я смог объяснить ему это.
Но, к сожалению, он просто не может успокоиться в этом вопросе. Он постоянно подрывает мой авторитет, требуя, чтобы мы делали все по учебникам (например, по книге Джошуа Блоха «Эффективная Java») даже в тех случаях, когда это было бы пустой тратой нашего времени и не принесло бы ощутимой пользы для нашего продукта. Как я могу заставить этого младшего разработчика доверять моему опыту?
Младшему трудно убедить старшего изменить свою практику. Кроме того, как менеджер он должен поддерживать ауру превосходства, чтобы иметь возможность эффективно руководить.
Поэтому, если вы хотите улучшить стандарты качества на своем рабочем месте, не имея на то полномочий, подавайте пример. Делайте правильно то, что другие делают неправильно, и покажите , что ваш способ лучше, потому что это приводит к лучшему продукту за меньшее время. Когда вы указываете на ошибки в чужом коде, не делайте этого, придираясь к файлам исходного кода. Сделайте это, представив воспроизводимый дефект в самом продукте и способ его исправления, следуя рекомендациям.
Кстати, одна из самых распространенных профессиональных болезней программистов — это завышенное самомнение. Возможно, он у него уже есть, но у вас тоже начинают проявляться симптомы ранних стадий.
Способ смягчить проблему такого рода — «давать и брать». Я много раз добивался успеха с этой стратегией. Люди более восприимчивы к вашим предложениям и критике, когда они двусторонние. Поэтому я задавал вопросы и советовал, когда у меня была возможность, и серьезно относился к их ответам. (Честно говоря, иногда я уже знал ответ, но как знать, я тоже таким образом научился некоторым интересным вещам.)
В конце концов вы строите взаимопонимание, когда вы поддерживаете друг друга, и во многих отношениях дела идут намного лучше. И если у него 15-летний опыт, держу пари, он может многое рассказать вам, что стоит знать.
Я бы не беспокоился о нем и его холодном приеме, это вполне нормально после того, что случилось. По всей вероятности, он примет во внимание ваш вклад и будет осторожен с вами, и вы, вероятно, немного расстроите его. Но это не соревнование за популярность, поэтому, если он не выйдет из-под контроля, дайте ему немного свободы. Оставайтесь дружелюбным и поддерживающим, и он придет.
Будьте вежливы и профессиональны. Отправьте заявку на ошибку, в своей заявке подробно опишите проблему и возможное исправление, а также оставьте возможность связаться с вами для получения дополнительной информации или объяснения проблемы. Оставьте это на этом. Когда ваши заявки будут проверены, они будут назначены либо вам, чтобы исправить найденную вами ошибку, либо первоначальному разработчику. Надеемся, что другой разработчик поймет и устранит проблему или вернется к вам за дополнительной информацией. Если ничего не происходит, то теперь это проблема управления.
Этот метод не обращается к какому-либо конкретному разработчику за ошибки и позволяет учитывать время ремонта и, возможно, даже включать его в схватку (если вы это делаете).
Поиск ошибок в чужом коде — обычная практика. Каждый раз, когда новый разработчик входит в проект, он обнаруживает проблемы. Возложение вины не важно. Просто создайте тикет, и пусть процессы компании обработают его. Опытные разработчики не должны обижаться на других, обнаруживших проблемы в их коде. И если они это сделают, они, вероятно, не должны быть разработчиками.
Хотя я думаю, что Кешлам делает хорошее замечание. Также важно помнить, что код принадлежит команде, а не отдельному лицу, поэтому я бы не стал использовать «вы», когда вы спрашиваете о потенциальных проблемах с кодом. Вместо этого вы могли бы спросить
«Привет, я заметил, что мы не внедрили здесь хэш-код, есть ли для этого причина?»
Вы решаете потенциальную проблему с кодом, но также выясняете возможную причину проблемы и даете руководителю группы возможность превратить это в опыт обучения для вас.
Вместо того, чтобы превращать это в дискуссию типа «я думаю, вы должны», которая, как уже ясно, ни к чему вас не приведет, превратите ее в техническую дискуссию.
Просмотрев код, я обнаружил проблему и написал тест X, демонстрирующий ее.
(Вы можете написать несколько, если нужно). Затем команда должна обсудить, как правильно исправить это, чтобы ваш тест прошел успешно.
У вас есть утренние стендапы? или какие-то другие групповые встречи, на которых вы можете неформально упомянуть об этом.
Поднимая их всем в совершенно безличном виде: «Ой, я обнаружил эту проблему, этот класс реализовал equals, а не хэш-код, что действительно может вызвать проблемы, если класс когда-либо используется в хэш-карте, поскольку в качестве ключа используется только идентификатор объекта», а затем обсуждение когда это можно исправить.
Вы никого не обвинили в написании плохого кода, теперь все знают, почему это проблема, код исправляют.
Несколько общих указаний, хотя, исходя из этой информации, я думаю, что пункты 4 и 5 могут быть наиболее подходящими:
Напишите тестовый пример, описывая поведение, которое вы ожидаете, и покажите, что проблема нарушает тест.
(О, мальчик, какие безумные вещи мы обнаружили, когда начали систематически тестировать hashCode и equals в нашем проекте.....)
Выберите свои сражения
Как разработчикам, может быть трудно упустить мелкие детали. Очень тяжело. И как младший разработчик, вы часто еще не имеете опыта, чтобы отличить серьезные проблемы от мелких гнид. Похоже, что OP прав в двух приведенных примерах, НО являются ли они серьезными проблемами? Честно говоря, это не звучит так, если только это не приводит к поломке чего-либо. Не каждый запах кода - это холм, на котором можно умереть, особенно...
Будьте осторожны с дифференциалами превосходства
...когда ты младше, а они старше. По трем причинам:
Или, возможно, старший разработчик может быть просто придурком. Или у вас был плохой день. Или что-то другое.
Что делать в следующий раз
Супер хороший вопрос. Я люблю учиться, но когда кто-то оскорбляет меня, я чувствую, что должен бросить это дело. Я рекомендую проверить «стиль кодирования» ваших коллег и определить его сильные стороны, чтобы он не чувствовал, что все время, которое он потратил на обучение, было бессмысленным. ТОГДА ОПРЕДЕЛИТЕ ВОЗМОЖНОСТИ. Таким образом, вы демонстрируете сильные стороны в будущем, которые помогают компании, а также работают над теми «возможностями», которые вы уже определили. Я руковожу командами, предоставляя график на 30-60-90 дней, а затем хвалю изменения, в которых мы извлекли выгоду из «возможностей». Это работает очень хорошо и является справедливым способом идентифицировать лидеров и людей, которые не являются и не должны быть лидерами.
Исправьте это сами. Создайте ветку, исправьте ее, протестируйте ее, и если вам нужно одобрение, просто проведите проверку кода. Это перекладывает бремя на вас, но вы тот, кто считает это важным, поэтому бремя действительно ложится на вас, даже если это чужой код.
Филип Кендалл
Тасос
Роб
Роб
пек
пек
Брандин
скрежет729
пек
Брандин
пек
пек
комар
Джимм101
пек
пек
скрежет729
пользователь8365
Кевин Клайн
Вальфрат