# Introduction

## What Is This Book

This is a collection of notes and writings on the important topic of Design Patterns. I present a technical definition of each pattern first, then provide non-code examples that clarify how the pattern could be used or is used in some familiar technology.

*Note: if you're not reading this book using GitBook, go* [*here*](https://mikaeilorfanian.gitbook.io/design-patterns-with-examples/) *for a much better reading experience of this book.*

## Why This Book

Programming was not my first career choice. I entered the industry at the age of 28 after I discontinued my undergrad studies in Computer Science (1.5 years into the program). For a while now, I've been focused on improving as much as I can in as little time as possible. After doing much research and experimentation I've come to the conclusion that knowledge and practice of Design Patterns is a necessary step for any developer to become a professional and take his/her skills to the next level. Yes, the list of patterns is long and it will take you a long time to learn and practice them. The good news is that I haven't found a more effective way of achieving my goal (improve as much as possible in as little time as possible). Hopefully, you'll come to the same conclusion as soon as you put to use what you learn here.

## Who Is This Book For

This book is for you if any of the below are true for you

* You are comfortable with using an Object-Oriented programming language (e.g. C++, Java, Python, Ruby, Javascript)
* You've worked with systems that consist of more than a few hundred lines of code over a period of more than a couple of months.
* You've had to take care of software made by other people and it was painful.
* You're motivated. You're serious about being a programmer. And, you want to improve beyond imagination very fast!

Some of the topics are covered at an advanced level. I'll try to provide an introductory treatment of those topics and include references to extra learning materials.

## How to Read This Book

You can read this book cover to cover or focus on specific topics. I add more content to each topic continuously, and in near future there will be an easy way to notify you when new content is added.

Most of what you find here is from other resources and I try to cite them.

Question: what if I read something and it makes no sense because it's poorly written or it lacks context, explanation, examples, etc.?

Answer: please let me know! I promise that if you take the time to create a pull request in this book's [repo](https://github.com/mikaeilorfanian/BetterCoderBook) you will get a response!
