I recently read an extremely interesting and useful article about the 20 subjects that every software engineer should know or learn….
What is really cool is that it’s not restricted to products, languages but it describes generally accpepted technologies, methodologies and practices.
It applies both to  junior and exeperienced software engineers. The former have a guideline about the fields that need to focus whereas the latter have the chance to re-evaluate their knowledge.
What’s missing, IMHO, is to give the reader a clue about which are the best book(s) related to these subjects so in this post I give my advices on that. Of course the list of books is not complete and it’s just my opinion based on my experience.

Hope you find it useful as well!

1. Object oriented analysis & design

2. Software quality factors

3. Data structures & algorithms: Basic data structures like array, list, stack, tree, map, set etc. and useful algorithms are vital for software development. Their logical structure should be known.
4.  Big-O notation
 
6. Software processes and metrics
7. Design patterns
8. Operating systems basics
 9. Computer organization basics
10. Network basics
11. Requirement analysis:
12. Software testing
 
13. Dependency management
15. ORM (Object relational mapping)
16. DI (Dependency Injection)
17. Version controlling systems
 
18. Internationalization (i18n)
 
19. Architectural patterns
20. Writing clean code

21. Web Services

22. XML