Сталкивался с таким 2 раза. Оба раза пытался объяснить, донести, книги приносил, лекции читал. В ответ - то же самое что и у вас - агрессия, не понимание, безразличие. Оба раза на долго в таких компания не задерживался.
Мои выводы таковы. Во первых - принять тот факт, что в любой профессии, имхо, 1% гениев, 5-10% процентов профессионалов (тех кто реально увлечен, повышает свои навыки, читает тонны книг, изучает новые технологии), для остальных - это не более чем работа.
Соответсвенно, если уж сложилась ситуация что уровень различный, то применять людей нужно по разному. Например, опытный проггер проектирует архитектуру, предметную область, может описывает интерфейсы и указывать как что делать, где какие средства и паттерны юзать, а менее опытные все это реализует. Можно и наоборот, я, например, мало что понимаю в верстке. Поэтому когда надо - тупо фигачу на чистом бустрапе, а потом уже наш верстальщик творит свою магию и делает все красиво.
Что касается попыток исправить ситуацию : Необходимо вводить общепринятые практики - ввод стандартов кодирования, написание тех документации, вывод каких-то общих компонентов в либы, заставлять сотрудников выступать перед коллективном с лекциями по различным аспектам программирования (что сами разобрались в вопросе), код-ревью, CI и прочее. Необходимо чтоб они сталкивались с хорошим кодом, и видели что их работу можно сделать гораздо проще.
Но главное - инициатива должна исходить от тимлида (хотя это не гарантия успеха). Если хотите - попробуйте убедить его в необходимости перемен. Но если он сам этого не осознает - дело труба, особенно если вы новичок в коллективе.
Нельзя забывать о том что у проектов есть карма (или уровень квалификации персонала) который исход от руководства (можете почитать об этом в книге "Человеческий фактор в успешных проектных командах"). Если вы менее профессиональны этого уровня - вы не попадете в компанию (банально не пройдете собеседование). Если гораздо более профессиональны - уйдете сами, ибо работать будет неинтересно и нервительно. Нужно понимать, что ваша ситуация - это не какой-то исключительный случай, это абсолютно стандартная жизненная ситуация, и судя по статистике - народ рано или поздно уходит из компании где уровень квалификации ниже собственных стандартов.
Тут правада стоит поговорить о квалификации как таковой: каждый проггер считает свой подход к программированию наиболее правильный. Мудрые - иногда сомневаются в этом, но все же. Нужно понимать что ваш подход не является истиной в последней инстанции. Иной раз посмотриш чужой код, думаеш - что за херня здесь твориться. Начинаеш разбираться, вникать, понимать логику разработчика, возможно, отличную от вашей, но, порой не менее стройную и красивую, иногда понимаш что вообще по другому то и сделать нельзя было. Нужно быть терпимее к чужому коду. Имхо, тут важно общаться с коммандой, учиться друг у друга, и главное - вырабатывать единый подход для проекта. Но опять таки - для этого должно быть желание у команнды, как минимум - у тимлида.
Но самый главный вопрос в вашей ситуации - зачем вам все это? Незря же есть поговорка: умный в гору не пойдет - умный гору обойдет. Скорее всего, у вас ничего не получиться (особенно если коллектив состоявшийся). Если думаете что есть шанс получить какой-то профит (стать тим-лидом, получить овердофига к зарплате) - можно. Но скорее всего вас просто пошлют куда подальше, ваша лояльность к компании исчезнет, и в итоге вы уволитесь. Не лучше ли сразу уйти в компанию своего уровня? Вы пишете что это не решение проблемы а уход от нее. Но нужно понимать что это не ваша проблема. А решать чужие проблемы часто выходит себе дороже.