Ответ
Такие ситуации случаются, часто из-за разного опыта или приверженности устаревшим практикам.
Пример разногласия:
- Позиция коллеги: Использовать
Vectorдля всех списков, так как он "потокобезопасный". - Моя позиция: Использовать
ArrayList, так как он быстрее в однопоточных сценариях, а потокобезопасность обеспечивать на более высоком уровне (например, синхронизацией).
// Их подход (избыточная синхронизация):
List<String> list = new Vector<>();
// Предлагаемый подход (явный контроль над синхронизацией):
List<String> list = Collections.synchronizedList(new ArrayList<>());
// Или, лучше, использование java.util.concurrent.CopyOnWriteArrayList
Как действовать в таких ситуациях:
- Предоставить данные: Привести бенчмарки, ссылки на официальную документацию (Oracle, Java Spec) или статьи авторитетных источников.
- Обсудить компромисс: Предложить A/B-тест или спайк для оценки производительности в конкретном контексте.
- Привлечь третью сторону: Если дискуссия зашла в тупик, запросить мнение тимлида или архитектора.
- Принять решение команды: Если после обсуждения команда выбирает неоптимальный с моей точки зрения вариант, важно его принять и качественно реализовать. Главное — чтобы решение было задокументировано и понятно всем.
Иногда приходится признать, что не все технические споры можно разрешить, и важно сохранять профессиональные отношения.