Possible Duplicate:
Are design patterns really essential nowadays?
Is it necessary have a knowledge and understanding of design patterns for someone to be a professional programmer? Why?
Software Engineering Stack Exchange is a question and answer site for professionals, academics, and students working within the systems development life cycle. It only takes a minute to sign up.
Sign up to join this communityPossible Duplicate:
Are design patterns really essential nowadays?
Is it necessary have a knowledge and understanding of design patterns for someone to be a professional programmer? Why?
No. I only say that to be pedantic though. The term "professional programmer" really just means you get paid to program. I assure you that you can be paid to program without knowing any design patterns (I certainly did, for a few years).
However, knowing design patterns has some benefits:
It's a way that other programmers tell us about general ways that they've solved general classes of problems.
It's a name that you can apply to a specific pattern, and other programmers who know that pattern will understand what you mean. You can even put it into the name of the methods and classes (XyzSingleton
, for instance).
In many ways it's a good way to learn the shortcomings of programming languages and paradigms. For instance the Visitor
pattern exists because in object-oriented programming you typically have to make a choice between an architecture where it's easier to add new types that exhibit the same interface, or easy to add new behaviors to existing types, but doing both gets complicated. Thinking about these problems informs your design decisions.
If you're a good programmer, you will find out yourself some of the design patterns, and later on notices that these constructions have a name.
So strictly no, but they can help you improve your object-oriented skills and they can help to communicate with fellow programmers.
Design patterns serve a couple of purposes:
You don't have to know them to be a professional developer, but not knowing them will handicap you to a certain degree, because you will be unable to "speak the language." You will also be reinventing the wheel.
Algorithms, Design patterns, Application architecture types are building blocks for programmers.
They are the independent of most popular languages ( C#, Java etc ) and one of the positive sides of this fact is that they can be used to communicate your thoughts easier when it comes to explaining how something is coded.
While knowledge and understanding of design patterns is not a prerequisite to becoming a professional programmer, they are a useful tool to improve the reliability of your code, your ability to communicate with other programmers, and the ability for others to maintain the code you've written.
Just like learning additional programming languages and technologies, good understanding of design patterns improves your skill and value.
In other words, you don't need to know and understand design patterns, but the more you do understand, the better you will be professionally.
Patterns are not necessary to write code and get paid for it. The process of learning what types of pattens, algorithms, and architectural styles exist is a process of learning how to design and engineer software with higher internal quality and that meets more strict non functional requirements. Oh and it may be necessary if you don't want the other dev kids to laugh and point. ;)