Knowledge of Object-oriented design principles and various OOP design patterns is a must for any experienced Java developer. It helps them to create robust code that can withstand test of time in production. As I have said earlier on 10 OOP and SOLID design principles, coding without knowing these principles is like trying to learn a language without knowing the alphabet. If you don't know alphabets, you will struggle with understanding the words and using them. Now the question is how can a Java developer learn these design principles and patterns? Which books and courses one should take to learn and master this essential skill for experienced Java developers? This is what I am going to answer in this post. I will share some of the best books and courses to learn Design patterns for Java and JEE developers.