На данный момент у многих разработчиков банальный выбор подходящего контейнера данных, отличного от ArrayList, уже является "преждевременной оптимизацией". И для них это действительно может быть правдой. Что такое преждевременная оптимизация? Это усложнение кода и трата времени на улучшение кода и алгоритма, выгодна которого сомнительна и не подтверждена. Является ли использование HashMap и быстрой сортировки этим корнем всех бед, учитывая что все уже есть в SDK? Если разработчик не знаком с этими понятиями и не имеет представления, для чего они нужны, конечно, является. Для специалиста же наоборот использование пузырьковой сортировки или сортировки выбором будет лакмусовой бумажкой усложненного кода, потому что для сознательного выбора этих алгоритмов нужны довольно специфичные входные данные.
В конечном счете имеем, что код, который можно отнести к преждевременной оптимизации, напрямую зависит от компетентности столкнувшегося с ним разработчика. И получается замкнутый круг: не хотим учиться, потому что "ПО"; получаем "ПО", потому что не хотим учиться.