- Code Complete:
- gets you thinking about how you structure and write code on the line or function level.
- talks about developing good coding habits (comments, naming) and skills (debugging)
- Pragmatic Programmer:
- starts talking about basic principles such as DRY, goes a step further then Code Complete
- talks about learning your tools and introducing some ideas of craftmanship
- Apprenticeship Patterns:
- establishes some ideas of how you can attack your pursuit of mastering your craft
- some ideas of how to stay organized and on track as well
- how to make your code better when you start to see the pitfalls of your approach
- can make it easier to know how to tackle or see/smell the possible problems and code smells
- Mythical Man Month:
- start introducing you to some on going issues with managing software teams and projects
- contains some timeless papers that introduce Brook's Law and No Silver Bullet
- Design Patterns:
- now getting up to lower system interactions and design
- starts to develop some common design terminology
- help you understand categories of problems and possible solutions
- Applying Domain Driven Design:
- takes design and development approach a step further
- ties in some design patterns, test driven development, and refactoring together
- starts to introduce you to architecture patterns
- you get to see the workflow and thought process of how a system comes together
- Patterns of Enterprise Application Architecture:
- now we get to how to establish components and layers of a system
- getting to applying the same ideas of Design Patterns but to a higher level of design
Now I need to finish a couple of those books and figure out new books to read (probably something on XP or Agile, TDD, continuous delivery, and DSLs), but that is a series of books that should probably be stretched out over the beginnings of your career (say first 2 or 3 years) because some of them will require a mentor or experience to start to grok (I'm still trying).
It's probably debatable about where some of them appear (maybe Applying DDD before Design Patterns?), but these are all books that help regardless of technology. You'll probably enjoy having them on your self after your done as well (for reference or the reminder).
Besides these books you should strive to master your primary programming language and dig into core technologies you use. After that you should also try to explore other languages and technologies even if they don't apply directly to your work.
I'm still trying to accomplish some of those last points but I imagine I'll always be going after something.