I was recently introduced to Design Patterns by a colleague of mine, as a very useful and efficient way of identifying problem trends and their solutions in the Object Oriented world.
Java code has never looked the same since ... !
Object Oriented Programming (OOP) had always given me the feeling of a “neat and clean” way of organising software in nice little boxes enclosing Data and their handling Methods, always abstracting commonalities into higher levels, keeping everything tidy and structured.
What I had never thought, given all that OOP existing inter and intra object architecture, is that beyond the class and object principles, there exist well understood higher trends and ways of designing and manipulating objects to solve a specific set of problems.
Hints about their existence had been thrown at me from time to time. It’s one of those things where you see a problem and you are thinking “I am sure I have dealt with something similar before ... if only I could remember what I had done”. Chances are that unless you have done something a bunch of times, you won’t remember much about it after a while, unless it was a painful experience ...
And this is where these patterns come into play. They don’t tell you what the solution is, but they navigate you in finding the right approach. They are a handy set of recipes containing information abstracted from common sets of problems found everywhere in OOP development.
Being a musician I have realised that for someone to be creative they first need to develop a certain set of tricks that can help them identify and deal with the routine, boring stuff efficiently so that they can focus as much energy as possible on the novel where true creation is found.