1-
Dive Into Design Patterns
2-
Dive Into Refactoring
3-
Clean Code