Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

While I've heard about design patterns being mentioned in a few courses at uni, I know of only a single course which actually teaches design patterns. In almost all other areas (algorithms, parallelism, architecture, dynamic languages, paradigms, etc), there are several, often a basic course and an advanced course.

Should universities put more emphasis about teaching their students about design patterns and provide more courses in design patters? Are lack of knowledge about design patterns common in just-graduated junior developers?

share|improve this question
2  
I think the problem is that design patterns are about solving practical problems. I never heard about practical problems being solved in universities. –  Euphoric Aug 24 '12 at 18:45
1  
@Euphoric You have never heard of the Internet? –  David Kaczynski Aug 24 '12 at 18:52
    
Design patterns are cool but I wish they would start with stuff like source control and writing maintainable code before getting all ivory tower on you. –  Wyatt Barnett Aug 24 '12 at 21:52

7 Answers 7

Design patterns are paradigm-specific, and often language-specific. The patterns in the Gang of Four book are primarily about object-oriented programming, and some are simply built into some languages. Therefore, this is about programming, and should be taught in a software engineering curriculum. It isn't computer science.

share|improve this answer
8  
+1 for distinguishing between Software Engineering and Computer Science –  indyK1ng Oct 15 '10 at 15:28
3  
In principal yes, computer science curriculums shouldn't be teaching software engineering. But let's be practical. Probably 90% of CS graduates move into professional engineering. They should probably be taught a little bit about it. –  Matt Olenik Oct 15 '10 at 15:43
3  
I agree more because of the paradigm-specific thing. I mean I think they should learn about patterns as parts of the paradigms they are learning but not as though they are foundational principles of computing. Mostly they are just ways of working around limitations of a particular language. –  glenatron Oct 15 '10 at 16:22
1  
I don't understand the argument here. Why is the distinguishing between computer science and software engineering relevant for whether it should be taught at uni or not? Is only computer science taught at uni and not software engineering? –  gablin Oct 15 '10 at 22:21
3  
@gablin: Like many sciences, there's theoretical and applied work. Chemistry and chemical engineering are two different majors, which really should be analogous to computer science and software engineering. Unfortunately, there's a great deal of confusion, and lots of people expect a CS degree to be about software engineering (and lots of CS degrees from assorted schools are about real-world programming). Both should be taught at the university level. –  David Thornley Oct 18 '10 at 13:44

Definitely! Maybe not too detailed, but it could be a great 1-semester subject, just enough to give pointers to students, but not too wide as to waste time for other more fundamental subjects.

share|improve this answer
    
I agree. The SE department here at RIT has a required course on the GoF book and other courses have recommended books which include patterns. –  indyK1ng Oct 15 '10 at 15:28
    
That's great. I wish I was introduced to Patterns much earlier ... –  Jas Oct 15 '10 at 15:30

Design patterns are formalised solutions to common problems or high-level abstractions thereof; when I first came across them I discovered I had in fact been using a few of them for quite a while.

Although I think it'd be very useful to give an outline of the most widely used ones, analysing each and every one detailed in the GOF book is certainly a waste of time; I think there is a danger of "overabusing" patterns and using them where simpler solutions could instead have been used: when learning to code you often use the few tools you have been taught, in the assumption that that is what is done and what should be done.

Perhaps one or two hours of teaching regarding the subject maximum.

share|improve this answer

IMHO, universities can't go into details because of lack of time. It takes over a decade to master ONE technology. At universities you have so many topics to cover that it's impossible to add one more.

Design patterns are more suitable in real world development in medium to big projects. In universities, you can get lot of theory, and very little practice.

Maybe through specializations? Like in medicine.

share|improve this answer
2  
But they go into detail in lots of many other areas. Why not design patterns too? –  gablin Oct 15 '10 at 15:08
    
In Sweden maybe, that may explain why your engineers are so advanced. But it's not the case in Belgium.... –  user2567 Oct 15 '10 at 15:10
    
+1 - lack of time –  bigtang Oct 15 '10 at 15:19

I think yes. From what I've seen in the US, a lot (but not the majority) of students tend to attack problems using language specific features and terms. By analyzing patterns, you tend to see the abstraction of the problem. Then when you see how the same pattern in a couple different languages, it's even better.

It helps to make the individual a more pragmatic programmer.

share|improve this answer

As opposed to absolutely none? Yeah, I guess.

But I'm not sure most of the professors are even qualified to teach anything about design patterns.

I think most good programmers like programming too much to teach and good programmers who like to teach probably have to teach at tech colleges and dumb down their stuff.

Therefore, Design Patterns are something a professional programmer needs to pick up in practice although I agree that I would have liked to have learned about them in school.

(I graduated from both a private tech school (AS in CIS) and a public university (BS in Comp Sci))

share|improve this answer

Can Universities Afford to Spend More Time on Patterns?

Universities are pressed to add more material to their programs. They have options on how they do this:

  • Let some new topics crowd out old topics that would no longer be taught.
  • Increase the pace of class room instruction.
  • Increase the amount of out of class work done by students.

Learning and meta-learning will be increasingly important as the pace of discovering new knowledge increases. Both patterns and programming need more emphasis if Computer Science programs are to remain relevant. Unlike much of the material that will need to be added, use of patterns might actually make it easier to organize and present more material.

Patterns are a recurring pattern. As far as I am concerned, they should be introduced in first semester CS classes perhaps with historical information about Christopher Alexander and GoF, some practical introduction to patterns accompanied by an exercise in writing a pattern. In almost every class, selected concepts could be described with patterns. In later semesters, for example, the Data Structures course could benefit by describing linked lists, doubly linked lists, trees, etc. using the same format GoF uses:

  • Pattern name
  • Problem
  • Solution
  • Consequences

Later in software project management class, organizational process patterns could help define the material.

Should Universities offer Courses in Patterns?

At the undergraduate level, I think an discrete class on patterns might be overkill. At the graduate level, a pattern writing and analysis class, or a design class based on GoF and other pattern references might be good. Patterns may have a marketing problem that will prevent them from being the focus of advanced degree candidates for a simple reason: it is not a skill employers demand. My data point on this is not very scientific, but Linked In has Design Patterns and Software Design Patterns skill items that have declined -5% and -7% respectively.

What Does Academia Think of Patterns and What Are Their Plans?

A joint task force of ACM and IEEE Computer Society members started drafting recommendations many years ago. The first report I saw was the one from 1991. The latest easily accessible report I found on the web is:

http://www.acm.org/education/curricula/ComputerScience2008.pdf

In this particular report, design patterns are tucked patterns into a class on software design.

SE/SoftwareDesign [core]  Minimum core coverage time: 8 hours

Topics:

• Fundamental design concepts and principles
• The role and the use of contracts
• Design patterns
• Software architecture
• Structured design
• Object-oriented analysis and design
• Component-level design
• Design qualities
• Internal including low coupling, high cohesion, information hiding, efficiency
• External including reliability, maintainability, usability, performance
• Other approaches: data-structured centered, aspect oriented, function oriented, service oriented, agile
• Design for reuse
• Use of open-source materials

Learning Objectives:

  1. Discuss the properties of good software design including the nature and the role of associated documentation.
  2. Evaluate the quality of multiple software designs based on key design principles and concepts.
  3. Select and apply appropriate design patterns in the construction of a software application.
  4. Create and specify the software design for a medium-size software product using a software requirement specification, an accepted program design methodology (e.g., structured or object-oriented), and appropriate design notation.
  5. Conduct a software design review of open-source materials using appropriate guidelines.
  6. Evaluate a software design at the component level.
  7. Evaluate a software design from the perspective of reuse

There were also bullets for design patterns in a class called designated:

SE/ComponentBasedComputing [elective]

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.