Прокачайся в код-рев’ю: для перших 50 учасників — курс безкоштовний

час читання: 4 хв

Навіщо потрібні патерни проєктування в програмуванні та де їх вивчати

Software Engineering Manager Павло Юхнович вказує на плюси та мінуси використання патернів проєктування й ділиться корисними джерелами для їх пошуку. Також у статті — посилання на релевантні курси: нагадаємо, що учасники Anywhere Club можуть отримати ліцензію LinkedIn Learning за 4 простих кроки.

Плюси

  • Зручність обслуговування й читабельність. Патерни проєктування допомагають краще зрозуміти кодову базу й полегшують читання коду інших людей. Вони також допомагають писати більш розбірливий і підтримуваний код, що значно полегшує спільну роботу команди.
  • Потрібно менше коду, і немає потреби винаходити велосипед заново. Найімовірніше, те, що вам потрібно реалізувати, не унікальне, і рішення було вже знайдено за допомогою якогось патерну проєктування багато років тому.
  • Єдиний інструмент комунікації. Патерни проєктування програмного забезпечення — це спосіб опису та документування дизайну. Це спільна мова, яка допомагає різним командам спілкуватися одна з одною. Вони також слугують посібником для розробників ПЗ, який допомагає зрозуміти, як вирішувати проблеми в майбутньому. Патерни можуть використовувати дизайнери, UX-фахівці, бізнес-аналітики, тестувальники та всі, хто хоче поліпшити свій робочий процес або підвищити якість продукту чи послуги.

Мінуси

  • Контрпродуктивні вигоди. Проблема з патернами проєктування програмного забезпечення полягає в тому, що їх часто використовують як інструкції, а не рекомендації. Це означає, що розробники починають застосовувати їх, не до кінця розуміючи мету або принципи, що лежать в їхній основі.
  • Це не уніфікований інструмент комунікації. Ми повинні пам’ятати, що в деяких мовах програмування може виявитися практично неможливим застосувати будь-який патерн.

Джерела вивчення

— У наші дні доступно безліч ресурсів, і краще не дотримуватися тільки одного, — вважає Павло. — Не звертайте увагу на дати публікації «обов’язкових до прочитання» книг із патернів проєктування, оскільки описані в них рішення легко застосовні до сучасних завдань.

Онлайн-матеріали

Refactoring Guru — це відносно новий сайт із дуже якісним змістом. Що мені в ньому подобається:

  • Усе абсолютно безкоштовно.
  • Детальна й насичена структура для кожного патерну: намір, проблема, вирішення, структура, псевдокод, застосовність, поради щодо впровадження, плюси й мінуси, взаємозв’язки з іншими шаблонами. Усе це допоможе вам по-справжньому зрозуміти специфіку кожного з них.
  • Аналогії з реального світу: ці дивовижні ілюстрації з простим і зрозумілим поясненням усувають будь-які сумніви.
  • Приклади шаблонного коду доступні 10 різними мовами програмування. Таким чином, адептам Python, TypeScript, Java, Ruby, C#, C++, Go, PHP, Rust і Swift не потрібно буде знову й знову намагатися зрозуміти патерн, перемикаючись між різними ресурсами та книгами в пошуку фрагментів коду мовою, якій вони віддають перевагу.
  • Усі матеріали доступні у вигляді електронної книги в різних форматах. Її було перекладено багатьма мовами. Однак моєю довгостроковою порадою було б покращити свою англійську, щоб читати оригінальні версії.
Визнач рівень володіння мовою

Книги

1. Design Patterns: Elements of Reusable Object-Oriented Software. «Банда чотирьох» — це квартет авторів найпопулярнішої книги про патерни проєктування. У цій та наступних роботах вони викладають своє бачення того, як патерни слід використовувати під час розробки програмного забезпечення. Книгу було написано для того, щоб допомогти розробникам програмного забезпечення зрозуміти деякі поширені проблеми об’єктно-орієнтованого програмування й дати рекомендації щодо того, як використовувати принципи патернів проєктування для написання розширюваних і гнучких об’єктно-орієнтованих застосунків. Це не каталог патернів, а, імовірніше, опис того, що це таке, як вони працюють і як їх використовувати. Вона навчає словникового запасу й дає робочі правила застосування патернів у ваших власних проєктах тощо.

— Якщо ви новачок у розробці патернів, то краще поверніться до цієї книги пізніше. Якщо у вас є Computer Science-диплом і ви пробували цю книгу раніше, але не дочитали її до кінця, я рекомендую вам спробувати ще раз, — вважає Павло.

2. Head First Design Patterns (A Brain Friendly Guide) (2004) і друге видання Head First Design Patterns: A Brain-Friendly Guide: Building Extensible and Maintainable Object-Oriented Software (2021) також широко популярні, хоча й доволі суперечливі. Обидва видання схожі, тому я об’єднаю їх опис. Ці книги будуть особливо цікаві тим, хто тільки починає свій шлях із патернами. Вони містять масу додаткових історій, картинок, кросворди та кодові головоломки, приклади коду Java й веселі меми буремних 90-х років.

3. Design Patterns for Dummies (2006) — іще одна книга про патерни проєктування, призначена для початківців. Прекрасні фрагменти Java-коду, прості та зрозумілі пояснення й релевантні приклади — усе це створює приємні враження від читання.

4. Learning JavaScript Design Patterns: A JavaScript and Jquery Developer's Guide. Моя рекомендація — бути обережним із цією книгою. JavaScript розвивається дуже швидко, і тому з моменту першої публікації книги багато чого змінилося. Багато прикладів коду або застаріли, або можуть бути просто відтворені більш витонченим способом із використанням новіших версій мови.

Адді співпрацював із Лідією Геллі для створення patterns.dev. Тут ви можете знайти переосмислення його книги з використанням нового синтаксису JS. Уся книга являє собою всього лише главу в більш великому розділі, де він детально розглядає патерн за патерном із прикладами коду та цікавими анімаціями. Я справді рекомендую використовувати цю главу як точку відліку, оскільки вона перелічує найпопулярніші патерни проєктування, застосовні до JS.

Водночас тут є шаблони рендерингу та продуктивності. Ці два розділи є важливими для веброзробників, і більшість прикладів застосовні до застосунків React. Таким чином, цей ресурс досить специфічний і може бути заплутаним для початківців у патернах проєктування.

Linkedin Learning-курси

— Нині нам доступно безліч курсів. Я вибрав кілька з них: початкового рівня й ті, що присвячені конкретним мовам програмування.

Отримай ліцензію LinkedIn Learning за 4 кроки

Висновок

— Патерни проєктування програмного забезпечення —  це потужний інструмент у вашому арсеналі, який допоможе подолати поширені проблеми з програмним забезпеченням, — пояснює Павло. — Вони не є панацеєю від усіх бід і не вирішать усіх проблем, але вони можуть бути дуже корисні, якщо ви знаєте, як ними користуватися. Необов’язково завчати їх усі напам’ять — просто вивчіть теорію й почніть застосовувати її на практиці.