It is sometimes suggested by well-meaning language enthusiasts that “My language is complete and powerful, so design patterns don’t apply here!” Sadly, they are incorrect.
Design patterns happen in every language. The “Gang of Four” Design Patterns book just collected the ones observed in Smalltalk, and ported them to C++, later rewrites to Java, etc. These are not recipes to blindly follow, but examples meant to show you how to find and regularize the ones in your code.
It’s somewhat difficult to see them unless you’ve read Christopher Alexander’s books, and written a lot of programs in some language, and specifically looked for the places where you repeat a structure for livability’s sake. Just as it’s hard for an architect to make a path where people will want it, unless they first observe how people live and get around that space, and then convert the ad-hoc trails people follow into paths.
Smalltalk is an extremely expressive language (it failed in the market because every ST program is IDE-specific), it has closures, allows you to very trivially make new control structures; it doesn’t need a hack like macros because the entire language is that freeform. And this is where the GoF authors observed these paths being made by themselves and other developers, not just in limited BDSM languages like Java.
So, a little light reading:
- “The Perfection of Imperfection”, by Christopher Alexander
- Notes on the Synthesis of Form, by Christopher Alexander
- A Pattern Language, by Christopher Alexander
- The Timeless Way of Building, by Christopher Alexander
- Patterns of Software, by Richard P. Gabriel
- Design Patterns, by Gamma, Helm, Johnson, Vlissides