So.... we have a much better tool kit of design advice these days....
Design patterns have been around for years Agile TDD/Refactoring processes have helped hone pragmatic OO skills Domain Driven Design offers great advice on understanding a problem space Polygot programming allows OO / functional / Dynamic allows appropriate ways of solving different kinds of problems Reflection / Aspects have allowed much simpler composability Frameworks have evolved slowly to be very powerful
Where's the edge of how to design software now? What's up and coming?