Я бы совершенно не советовал преподавать программирование, обучая шаблонам проектирования Вы не можете применять их хорошо, не понимая принципы, лежащие в их основе, поэтому обучение этим принципам гораздо важнее.
Я склонен думать, что шаблоны проектирования на самом деле не так уж и ценны для работающих программистов. Если вы полностью понимаете принципы, используемые в данном шаблоне проектирования, то в ситуации, когда это хорошее решение, вы, естественно, будете склонны создавать его (или что-то подобное) в любом случае, как само собой разумеющееся, даже если вы не знали что это был шаблон с именем. Какое бы время вы ни потратили на изучение шаблонов, лучше потратить время на изучение того, как думать о коде в целом. Если ваши навыки «решения проблем в целом» не на пустом месте, то вы не сможете написать хороший код, независимо от того, насколько вы хороши в применении некоторого набора шаблонов. И если ваши навыки «решения проблем в целом» хороши, то вы можете решать проблемы, даже если вы не знаете ни одного паттерна.
Я также думаю, что в идеальном мире не было бы никаких шаблонов проектирования, потому что идеи, достаточно общие для того, чтобы называться шаблоном, были бы хорошо реализованы в библиотеках, и мы бы фактически использовали код вместо того, чтобы постоянно переписывать его. Представьте, что существует «шаблон проектирования регулярных выражений», который требует от вас внедрения небольшого движка регулярных выражений каждый раз, когда вы захотите его использовать. Шаблоны проектирования - это просто библиотеки, которые не могут быть написаны, потому что язык не предоставляет правильных средств абстракции.
На самом деле это еще одна причина, по которой они не очень заботятся; они не настолько универсальны, как иногда утверждают, но на самом деле очень сильно связаны с конкретными способами структурирования программ, которые позволяет / поощряет определенный язык. Книга шаблонов проектирования, написанная для Python, будет полностью отличаться от книги, написанной для Java, и даже более отличаться, чем книга, написанная для неимперативного языка, такого как Haskell. Лучше понять на более глубоком уровне, и вы сможете самостоятельно находить шаблоны проектирования на любом языке, с которым знакомы.