Dice is getting a lot of crap, and I couldn't agree more.
Second. Someone mentioned "Code Complete". A wonderful suggestion. Data Insights is a wonderful book on data visualization that helps imagine code and data in different ways, which helps with the logical organization.
To add more though, from a managerial/leadership level perspective on how to create better coders and thus code (as a hands coder/manager):
1) Have your developers develop with the 80/20 rule. That is: 80% of development is analysis, design and research and 20% is implementation and testing.
2) Refactor as a regular practice? Screw this. This is a lesson in insanity. Literally. Leverage SCRUM and Agile regularly to detect and and shift coders off responsibilities they may be obsessing about with refactoring. A good rule of thumb is: a coder who's spending too much time refactoring is a bored coder.
3) If creating a product, always version, and always move forward. Once done with a version, hire outsiders from other cultures and backgrounds to create new versions of your product and kick back and watch them from the sidelines until they do something cool and new you never thought of before, then come back and redevelop from the ground up implementing both the lessons learned and new concepts and ideas.
4) Create artificial bottlenecks. Seems contrary to logic, but one of the most interesting things I have learned as a leader has been to intentionally silo certain processes - such as nightly builds - to reinforce tighter code. This reinforces better communication and an awareness of code quality when implementing.
5) Formalize code change approval paths and QA processes, and leveraging indirect communication tools such as Bugzilla for communication with QA staff and/or customers. When coders become accountable for their code publicly, they tend to code more reliably.
Now how does this all work to simplify code?
Pretty simple. Environmental stimulus for you as a coder is far more profound than most coders are aware of. Put you in a closet and you'll start thinking in one and your code will reflect that. Put you as a male around gorgeous women in a call center, and your code will come across distracted but magically will work extremely well for the call center people employees.
Most coders aren't aware there's no silver bullet for perfect development and there's no such thing as perfect code. I've been there, and fallen into the game of how many lines can you code this in with coworkers, all to find my reduced code was complete unreadable afterwards and I was screwed if I wanted to make changes to it later..
For instance, normalization for databases works well, for instance, but there's places you don't want to use it, and other points where you can over normalize and make your data unworkable. The same thing is true for source code, whether that's SQL, C#, C++, Visual Basic, or PHP with Javascript, and whether its embedded system development, or it's an application or a web UI.
So as a manager and leader, what becomes more important is keeping my coders happy and balancing that with creating an environment to optimize their coding for the customer(s), whether that's a shareholder, the person who's purchasing the product, or the wealthy investor who will buy my company in 2 years.
As a coder yourself. You become a great coder to work with when you actually start working with the manager and leader and can understand why they're making the decisions they are and help them along.
The best way to simplify your code though?
Simplify your environment. Align your environment with the goals you wish to code for. Immerse yourself. ... and go....
The rest will fall in place.