This means having to make more decisions in how to apply a pattern. Multiple inheritence is something that I rarely use. Generic types simplify coding, but do not have much impact on design. I understand that JavaSoft has looked at some proposal for generic types, but has not acted on the proposals yet. You've written two volumes on Java design patterns, and I understand a third volume is underway.
Experience gives programmers a variety of wisdom.
As programmers gain experience, they recognize the similarity of new problems to problems they have solved before. With even more experience, they recognize that the solutions for similar problems follow recurring patterns. With the knowledge of these patterns, experienced programmers recognize the situations where patterns apply and immediately use the solution without having to stop, analyze the problem, and then pose possible strategies. When a programmer discovers a pattern, it's just an insight. In most cases, to go from an unverbalized insight to a well thought-out idea that the programmer can clearly articulate is surprisingly difficult.