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
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:
In this particular report, design patterns are tucked patterns into a class on software design.
SE/SoftwareDesign [core] Minimum core coverage time: 8 hours
• 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
- Discuss the properties of good software design including the nature and the role of associated documentation.
- Evaluate the quality of multiple software designs based on key design principles and concepts.
- Select and apply appropriate design patterns in the construction of a software application.
- 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
- Conduct a software design review of open-source materials using appropriate guidelines.
- Evaluate a software design at the component level.
- Evaluate a software design from the perspective of reuse
There were also bullets for design patterns in a class called designated: