people learn object-oriented thinking: how you can leverage polymorphism, design for composition, delegation, balance responsibilities, and provide pluggable behavior.”
to design for change — and there the debate is do you do it early or later? In many cases the design should be re-factored, and the patterns provide a target to do this.”
software, except in the sense that the software needs to be usable years later, when requirements change and the world is a different place. On the other hand, they need to know how reusable software works, and our patterns are common in reusable software, so they are still useful for the average programmer to know.