On Learning Design Patterns

In my last post I lamented a missed opportunity where I feel I would have learnt a lot - particularly in terms of Design Patterns.

To someone like me, a fairly experienced but self taught developer, it's easy to feel like Design Patterns are the 'Holy Grail'. Yet the first thing they teach you about Design Patterns, is that they are just a set of tools for you to use, not the 'Holy Grail'.

However they do seem to be treated as such. I was knocked back from a job when my code test didn't show enough design patterns and I have a close friend who I greatly respect as a developer who was knocked back from a job where his code test didn't use a specific design pattern (I don't recall which one it was now).

I feel like I know plenty of design patterns, at least intellectually. I've read up on them and I recognise them in the various frameworks and bits of software I use. Laravel uses Fa├žades and Events, Flask uses decorators like they're going out of fashion and even Magento 1.x uses Singletons and Observers. I can't remember the last time I worked on a website that didn't use a Model, View, Controller pattern.

My question is, how does someone like me, who really learns by doing, learn to recognise where to use a design pattern? How do I make my code more robust and extensible?

I think I disagree, but empathise with this article. I don't know, but I'd hazard a guess that author is someone like me who has been hired as a Senior Developer for some years now and is having to learn about things like design patterns on their own. I say that because I feel the same way about many things he mentions.

I'd love to hear from people in my situation that feel like they have a good handle on design patterns - so much so that they can be all cool and like 'they're not the holy grail you know' - but are self taught. Hit me up on Twitter if you like.

What helped you to pick this sort of thing up?