Ответ
Недостаток: Склонность к излишнему перфекционизму в коде на ранних стадиях, что иногда может замедлять итеративную разработку ("premature optimization").
Пример: Вместо того чтобы выбрать простой, читаемый и достаточный вариант, могу потратить время на поиск "идеального" решения с микрооптимизациями.
// Достаточное и понятное решение:
List<String> names = new ArrayList<>();
for (User user : users) {
names.add(user.getName());
}
// Излишне "оптимизированное" или усложненное решение на раннем этапе:
List<String> names = users.stream()
.parallel() // Необоснованное использование parallel() для маленьких коллекций
.map(User::getName)
.filter(Objects::nonNull)
.collect(Collectors.toCollection(ArrayList::new));
Как я над этим работаю:
- Принцип "Сначала работает, потом оптимизируй": Фокусируюсь на корректности и ясности кода для текущих требований.
- Code Review: Полагаюсь на обратную связь от команды, чтобы оценить, не является ли оптимизация избыточной.
- Метрики: При реальных проблемах с производительностью опираюсь на данные профилировщика (JMH, YourKit), а не на предположения.
- Осознанный компромисс: Учусь оценивать, стоит ли потенциальный выигрыш в производительности или "красота" решения затраченного времени в контексте бизнес-задачи.