You can only complement and enhance your existing programming skills by branching out.
A big part of that branching out in my opinion is expanding vistas in areas unrelated to engineering, like reading good literature, creating or appreciating art, and travel.
I've not found this to be true. I'd like it to be true, but I don't think it is.
When I try new programming methodologies, ideas, etc, I often notice a distinct change in how I program and how I think about programming.
When I try new life choices (emmigrating to the third world, reading good literature, etc) I grow as a person, but I really can't think of how it's affected my programming.
Maybe the point is that, programming isn't all coding, but also talking, connecting, and relating with other people you're working with, working for, and those that you're building a product for.
Growing as a person I think does help in those aspects.
I've wondered if engineering/CS undergrads should be forced to take a Design 101 class to learn:
* design is everywhere
* having a sense of taste is vital to anyone who makes things
* end users are severely affected by every design decision you make
I run into too many engineers that try to disregard the subjective aspects of development (architecture/UX/etc) because they believe the only worthwhile things are the logical ones.
I don't think the engineers disregarded everything that is not based on logic, but any good engineer will disregard everything that somebody believes, feels or thinks is the right solution unless they can give a good, well reasoned argument.
Most design people aren't happy about that level of scrutiny, but that is something they should do, as it will improve their craft.
A big part of that branching out in my opinion is expanding vistas in areas unrelated to engineering, like reading good literature, creating or appreciating art, and travel.