The following page lists a couple of books I recommend to aspiring software craftsmen. They're not sorted in any particular order, but I try to categorize them by the level of experience required to get a good ROI off reading them.
These books are aimed at developers who are not very familiar with software craftmanship. They describe ideas and tactical approaches to writing better software.
- Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin (ISBN 978-0132350884)
- Refactoring: Improving the Design of Existing Code by Martin Fowler (ISBN 978-0201485677)
- Growing Object-Oriented Software, Guided by Tests by Steve Freeman and Nat Pryce (ISBN 978-0321503626)
- Understanding the four rules of simple design by Corey Haines (https://leanpub.com/4rulesofsimpledesign)
It's common for developers, when reading about craftmanship, to start applying new structures to their solutions. Some times, though, it can be hard to identify how a certain problem should be solved, and it's easy to start re-inventing the wheel. The "Gang of Four" (Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides) wrote a book called Design Patterns in 1995 coining a wide range of patterns that are used by software developers all over the world. Having knowlegde of common patterns may help you in finding better solutions to your problems. Be careful, though, it's easy to overuse patterns.
- Design Patterns by Erich Gamma et al (ISBN 978-0-201-63361-0)
- Head First Design Patterns by Eric Freeman et al (ISBN 000-0596007124)
- Patterns of Enterprise Application Architecture by Martin Fowler (ISBN 007-6092019909)
Now that you've read some of the abovementioned books, you might feel saddened by the fact that you're working on a big legacy system where there's little room (or even seemingly impossible) to apply any of the principles you've learned. Fear not! Michael Feathers wrote a great book on how we can deal with Big balls of mud.
- Working Effectively with Legacy Code by Michael Feathers (ISBN 007-6092025986)
When you've accomplished a certain grasp of craftmanship, you might start to think about software development from another perspective. You're certainly not alone in this. Eric Evans wrote the book "Domain-driven Design: Tackling complexity in the heart of software" back in 2003. For me this was a real eye-opener, as it highlights the problems caused by the industry-standard approach to developing software: I.e. development and business being two different things. The truth is that software is valuable to the business, and should help the business in adding more value. This can be achived using a plethora of tactics and strategies.
- Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans (ISBN 978-0321125217)
- Applying Domain-Driven Design and Patterns: With Examples in C# and .NET by Jimmy Nilsson (ISBN 978-0321268204)
- Implementing Domain-Driven Design by Vaughn Vernon (ISBN 860-1404568893)