My answer would be: that code should be seen not as a static thing, like the answer to a math problem, but as an evolving effort to figure out the right question to be the answer to; and that it should thus be written to be easy to change.
Every programmer should
1. Learn C / Assembly - Understand how code interacts with hardware.
2. Learn Lisp - Understand how ideas interact with code (and vice versa).
3. Learn "O" notation - Understand algorithm complexity.
4. Be clean and flexible.
6. Refactor mercilessly.
8. goto 1
Interesting change of perspective. Could you expound - do you mean this in terms of product design?
Generally, I believe that the super-specializing niche engineering that's popular today is best served by broadening your base rather than sharpening your technical skills to stand out in a field of pins.
I.e. marketing, ID design attitudes, learning to paint.