Design Patterns
Tags: architecture, beginners, career, computerscience
Published: 2020-05-02 14:05:44

# Introduction
When it comes to software architectures, I always view it as some sort of dark arts that I won't be touching it. Due to the possibility of me writing it for a project is not something I would **"enjoy"** doing it. Plus for software engineering modules that I took is usually a superficial topic of more of an academic nature than a real-world implication for it. I would always pick real-world experience over academic at any time of the day.

My perspective changed, when I had some senior developers that I am with and trust are recommending reading [design patterns][1]. As a form of big picture **overview** and a **toolkit** for **communication** when designing a system architecture when your building software that had real-world implications.

# What is Design Pattern?
Design patterns in layman term are **standard templates** or **[mental models][2]** used for designing software systems that are **observed** from software built in the real world. 

These **templates** are used to **speed up** the creation of an architecture of software systems. Which require **extensive** knowledge and understanding of the **intricacies**. For each piece of the component to form the overall system. 

This is drawn heavily from the **architecture** with tons of research and foundation as a form of imparting knowledge. In [Architectural style][3] for constructing buildings in similar architectural styles.

# Why Should I learnt It?
The reason, you might want to learn it is that software systems are increasingly becoming more **complex** and **abstracted**. Therefore it makes sense to make it simple to understand and implement. 

Learning it allows you to built upon **best practices** of what is used as part of the **consideration** when building, transforming or maintaining a software system. For **communication** in solving a problem with a particular use case in mind that is technology agnostic. 

In avoiding mistakes like missing the foundation needed to build an **adaptable**, **stable** and **maintainable** software system.  This piece of knowledge might not be useful in your early career. If you are not doing anything related to software architecture. It becomes useful when you are required to design or document software systems.

# Different Types of Design Patterns
It is observed that there is a total of **23** design patterns in the [Design Patterns Elements Reusable Object-Oriented Software][4] book. You can also read it at [Reactoring Guru on Design Patterns][1] for a simple to understand graph on it.

Overall there are 3 major **archetypes** for design patterns:
*  **Creational patterns** - Various duplication techniques used to reuse an existing codebase.
*  **Structural patterns** - The focus on the assembly of a smaller part to form larger structures. While maintaining flexibility without waste.
*  **Behavioral patterns** - Deals with algorithms and assignment of roles for the intended behaviours of each piece of software in the system.

# Conclusion
I believe this article provides you with a good insight into why you should learn design patterns. Which hopefully allows you to dive deeper into it so that it could help you in your own career as a developer. I'm also looking into diving deeper to as well to understand it further to help me in becoming a better software developer.

I will be treating it as a mental model into crafting software systems that are scalable, adaptable & maintainable. When I am creating a new software system for startups or companies that require my expertise to **get things done** and as a **force multiplier** approach.

If you like this article do **sign up** for my [Adventurer's Newsletter](https://maxongzb.activehosted.com/f/1) which contains interesting content I stumble across over the week in the area of **Python**, **Web Development**, **Startup**.

You can also **follow** me to get the **latest** update of my article on **Dev**
The original post was on [Full Stack Development in Django - Reading Time: 3 Mins](https://www.maxongzb.com/design-patterns-reading-time-3-mins/) and cover image by [Lily Banse on Unsplash](https://unsplash.com/photos/2vcqwRL2xKk)

This post includes affiliate links; I may receive compensation if you purchase products or services from the different links provided in this article.

# Reference
* [Design Pattern Overview][1]
* [Design Patterns Book][4]
* [Design Pattern Catalog][5]
* [Architectural style][3]
* [Mental Models][2]


[1]: https://refactoring.guru/design-patterns
[2]: https://jamesclear.com/feynman-mental-models
[3]: https://en.wikipedia.org/wiki/Architectural_style
[4]: https://amzn.to/3d6vNJx
[5]: https://refactoring.guru/design-patterns/catalog