Недавно где-то на просторах Telegram наткнулся на очередной цикл статей про избитые уже паттерны проектирования GoF. Писать о них я, конечно, не буду — за меня это уже многократно сделали другие люди и сделали прекрасно.
Однако при чтении этих постов я вспомнил, как будучи ещё зелёным джуном читал книжку по паттернам и пытался их влепить куда попало. Это абсолютно нормальная стадия развития программиста уровня junior/middle.
Основная проблема здесь заключается в том, что мышление специалиста на этом уровне ещё линейное. Паттерны кажутся серебряной пулей - вот же они, готовые решения стандартных задач.
Но «в действительности всё не так, как на самом деле» © Станислав Ежи Лец.
Ранее я писал, что основная польза знания алгоритмов для разработчика заключается в развитии алгоритмического мышления. С паттернами проектирования ситуация ровно такая же. Они нужны не только и не столько для решения стандартных задач, хотя и для них тоже, сколько для развития нужного формата мышления.
Изучение паттернов проектирования учит видеть закономерности в системе. У специалиста формируется навык построения более точных и интересных причинно-следственных связей, а также развивается аналитический аппарат. Грубо говоря, человек учится мыслить шире и в новых критериях (удобства сопровождения, расширяемости и т.д.).
Нет смысла вызубривать паттерны наизусть, равно как заучивать алгоритмы сортировки. Гораздо важнее поразмыслить, какую именно задачу решает этот паттерн, откуда она возникла и зачем вообще её нужно решать. Такой подход к изучению шаблонов проектирования даст гораздо больше, нежели бездумное заучивание или запихивание их в каждый кусок проекта.
Что почитать по паттернам
Если хочется изучить тему последовательно, я бы двигался так:
- Refactoring.Guru — понятное введение в классические паттерны с иллюстрациями и примерами кода.
- «Head First. Паттерны проектирования» Эрика Фримена и соавторов — лёгкая книга, которая даёт контекст и хорошо подходит для первого знакомства.
- «Паттерны объектно-ориентированного проектирования» Эриха Гаммы, Ричарда Хелма, Ральфа Джонсона и Джона Влиссидеса — классика, которую лучше читать не первой и с дополнительным источником под рукой.
- «Шаблоны корпоративных приложений» Мартина Фаулера — следующий уровень: паттерны для устройства больших приложений, многие из которых разработчики уже используют, даже не называя по имени.
До этого списка стоит освежить основы ООП и SOLID. Не ради экзамена по определениям, а чтобы понимать, из каких проблем выросли предлагаемые решения.