We need design patterns for programming because they describe reusable solutions to common problems. This gives us a common vocabulary and concrete examples we can use in software development, which makes it easier and faster to learn and understand new languages and technologies. We also know what we can expect from others when using their code or libraries; whether they will fit into our architecture and how we can use them.
A design pattern, as described by Christopher Alexander and the "Gang of Four", provide us with a common way to describe our solutions to problems. They also provide greater flexibility for exchanging information between teams, thus allowing us to spend less time re-inventing the wheel and more time developing new features. A design pattern offer a practical guide to learning about programs. We will not delve into the mathematics or computer science behind them, but rather focus on implementation-specific details on how to use them. This way, you can learn by example and see on which level of abstraction they operate.
We also need design patterns for programming because they help us communicate with others. Design patterns allow for a common vocabulary in software development, which makes it easier to share ideas and discuss problems with co-workers and teams from other organizations.