Are There Patterns in Software?

According to Google Dictionary, a pattern “is a diagram or shape that you can use as a guide when you are making something such as a model or a piece of clothing”.  Patterns are useful tools allowing things to be built or made with a more predictable outcome with less effort and fewer errors.  Christopher Alexander [Source:  Hillside], an Austrian born American architect, proposed the use of patterns in architecture.  Applied to architecture, Alexander defined patterns as capturing design ideas as archetypical and reusable descriptions.  Through the use of predefined, proven patterns, Alexander postulated that buildings, towns and even sitting areas could be built that better fit and adapt to the needs of all their inhabitants and users and their respective communities.  While the patterns idea has so far had limited impact in the building industry, it has had a profound influence on the information technology industry.

History of Patterns

In 1987, Ward Cunningham and Kent Beck, Smalltalk developers, were designing interfaces while studying the writings of Christopher Alexander.  They decided to try some of Alexander’s ideas of patterns and pattern languages in an effort to guide novice Smalltalk programmers.  They were surprised at the results and presented their findings at the Object-Oriented Programming, Systems, Languages, and Applications Conference, OOPSLA’87, in Orlando in the paper “Using Pattern Languages for Object-Oriented Programs”.

Discussions on patterns continued throughout the early 90’s with workshops given at OOPSLA’91, 92, 93 and 94. During this time, Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides met and expanded on the theory.  Known as the Gang of Four or GoF, they published the book “Design Patterns: Elements of Reusable Object-Oriented Software” in late 1994 noting 23 previously undocumented software design patterns (see below).  Awarded  the Jolt Productivity Award and the Software Development Magazine’s 1994 Productivity Award, it quickly became the “bible” of OO design and a must have for all OO designers and developers.

Why is this Important to Software Design?

Critical to any science or engineering discipline is the ability to communicate its concepts.  For the software community, patterns provide a vocabulary for expressing its concepts of good design and a language for relating them together.  Patterns have given software designers and developers proven solutions to recurring problems encountered throughout all of software development.  Formally codifying these solutions and their relationships successfully captures a body of knowledge defining good architectures that meet the needs of users.  By applying patterns, the information technology industry has been able to improve the quality of software deliverables, more predictable outcomes with less effort and fewer errors.

Pattern Example – Adapter

One of the 23 patterns documented by the GoF is the adapter pattern (also known as the wrapper pattern or simply a wrapper).

The adapter translates one interface for a class into a compatible interface and is used when two classes, with incompatible interfaces, are required to work together.  The adapter translates calls to its interface into calls to the original interface by containing an instance of the class it wraps.

For more information concerning using patterns and Christopher Alexander, check out these resources:

Christopher Alexander: An Introduction for Object Oriented Designers

Design Patterns

OOPSLA History

Using Pattern Languages for Object Oriented Programs


About Susan
I'm a wife, mother and student living in the suburbs of Atlanta. After 20 years in corporate IT, I am currently working for a non-profit as Director of Operations.

One Response to Are There Patterns in Software?

  1. Pingback: Tweets that mention Are There Patterns in Software? « Susan's Technology Blog --

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: