In computer science curricula the two areas programming and software engineering are usually separated. In programming students learn an object oriented language and then deepen their knowledge in other languages, algorithms and data structures. On the other hand software engineering starts with discussing processes and then addresses topics like requirements engineering, software design and software architectures. Design patterns are on the border of these two areas and can be covered from both sides: either as an advanced programming course or as an application of software design and micro architectures. In this paper we present courses on design patterns and on software design which try to bridge this gap. Categories and Subject Descriptors D.2.11 [Software Engineering]: Software Architectures ? design patterns; D.3.3 [Programming Languages]: Language Constructs and Features ? patterns; K.3.2 [Computers and Education]: Computer and Information Science Education ? design patterns, c...