More or less every developer is interested in becoming better at their craft. Doing so improves your effectiveness, marketability, and performance in general. But *how* to go about improving our skills is a challenge - as you will not improve without constantly learning and applying new concepts and knowledge, and it's easy to slip back into old habits.
Frequently I see developers learning new technologies as a way of improving their skills, but often that's a misguided way to improve. Any developer can pick up a new language or library and do interesting things with it in a matter of days, and become relatively effective in a few weeks. Although picking up and becoming adept with new technologies is a critical part of being a software engineer, what really differentiates exceptional engineers is not their knowledge of technologies (though typically they should have that as well); it's their ability to design, refactor, and compose code.
Besides... Becoming an expert in specific technologies only holds value while the technology is in demand. Core development skills never become stale.
Without further adieu, here are some of my recommendations!
These are books that have strong coverage of the fundamentals of software engineering. If you're an experienced developer, many of the concepts in these books should be very familiar, but they're worth the read if you've never read them.
1.) The Pragmatic Programmer
A great general purpose book with an easy reading style. Lots of fundamental concepts.
2.) Code Complete
A bit more of reference-like in style, but chock-full of valuable coding techniques.
3.) The Mythical Man-Month
This is the book you can't get out of your head, because you'll likely see the truth of its learnings played out in project after project. Every developer and every project manager should read it.
4.) How to stop Sucking and be Awesome Instead
This isn't a book so much as a collection of the best blog posts by Jeff Atwood focused on being a better developer. It's a quick read and has refreshingly broad coverage of many topics.
Once you're ready to start exploring some more sophisticated techniques, here are some good books to check out.
1.) The Clean Coder
When you're ready take the readability and maintainability of your code to the next level, this book is for you.
2.) Head First Design Patterns
A very readable introduction to design patterns, with lots of hands on examples.
3.) Working Effectively with Legacy Code
A book filled with methods for refactoring nightmarish code bases and bringing them under test. If you've ever worked with a huge, scary code base, this book will feel all too familiar.
The Bonus Material
There's a lot more to being a good programmer than just programming. It's a very cerebral craft, after all. In addition to building up your proverbial software engineering arsenal, it's also worthwhile to invest in the squishy gray mass upstairs that does all the heavy lifting.
1.) The Passionate Programmer: Creating a Remarkable Career in Software Development
This is a book that can help light a fire under you. The proverbial handbook for how to conduct yourself, have a good attitude, be focused, and succeed in general. A great read.
2) The Power of Habit: Why We Do What We Do in Life and Business
As far as my career is concerned, this is probably the most influential book I've read outside of anything related to programming. It will help you understand how to break bad habits, and create good ones in order to improve yourself.
That's it for now. Hope you like my recommendations!