Basic knowledge for a good programmer Algorithms, Data Structures, Design Patterns...
- Bridging the Communication Gap: Specification by Example and Agile Acceptance Testing
- Specification by Example: How Successful Teams Deliver the Right Software
- Domain-Driven Design: Tackling Complexity in the Heart of Software (Blue)(Start on chapter 11)
- Implementing Domain-Driven Design(Red)
- Code Complete: A Practical Handbook of Software Construction
- Extreme Programming Explained: Embrace Change,
- Test Driven Development: By Example
- Refactoring: Improving the Design of Existing Code
- Clean Code
- Test Driven: TDD and Acceptance TDD for Java Developers
- Growing Object-Oriented Software, Guided by Tests
- The Software Craftsman: Professionalism, Pragmatism, Pride (Robert C. Martin Series)
- The Cucumber Book: Behaviour-Driven Development for Testers and Developers (Pragmatic Programmers