Я б абсолютно не радив викладати програмування, викладаючи схеми дизайну. Ви не можете їх добре застосувати, не розуміючи принципів, що стоять за ними, тому викладання цих принципів є набагато важливішим.
Я схильний вважати, що моделі дизайну насправді не так цінні для працюючих програмістів. Якщо ви повністю розумієте принципи, пов'язані з певною схемою дизайну, то в ситуації, коли це хороше рішення, ви, звичайно, як правило, будуєте його (або щось подібне), як звичайно, навіть якщо ви не знали що це був зразок з назвою. Незалежно від часу, коли ви витрачали б шаблони навчання, можна краще витратити на навчання думки про код взагалі. Якщо ваші навички "вирішення проблем взагалі" не зникають, ви не можете написати хороший код незалежно від того, наскільки добре ви застосовуєте деякий набір шаблонів. І якщо ваші навички "загального вирішення проблем" хороші, ви можете вирішити проблеми, навіть якщо не знаєте єдиного шаблону.
Я також думаю, що в ідеальному світі не було б ніяких моделей дизайну, тому що ідеї, що є загальними для того, щоб називатись шаблоном, всі були б добре реалізовані в бібліотеках, і ми насправді повторно використовували код замість того, щоб постійно переписувати його. Уявіть собі, чи існував «шаблон дизайну регулярних виразів», який вимагав від вас впроваджувати невеликий механізм регулярних виразів кожного разу, коли ви хочете його використовувати. Шаблони дизайну - це лише бібліотеки, які неможливо записати, оскільки мова не забезпечує належних можливостей абстрагування.
Це насправді ще одна причина того, що вони не дуже турбуються про них; вони ніде не є настільки універсальними, як іноді стверджується, але насправді дуже сильно прив'язані до конкретних способів структурування програм, які певна мова дозволяє / заохочує. Книга зразків дизайну, написана для Python, була б зовсім іншою, ніж одна, написана для Java, і навіть більше відрізняється, ніж одна, написана для мови, що не є обов'язковою, як Haskell. Краще розуміти на більш глибокому рівні, і ви зможете самостійно відкривати шаблони дизайну будь-якою мовою, з якою ви ознайомитесь.