In this article, I share a list of the recommended resources for learning Java that have helped me in my career as a self-taught software developer.
Back in 2015, Java was at the top of the TIOBE Index, which is a list of the most popular programming languages. It is the reason why I started learning Java. After getting my first permanent position as a software engineer on a Java project, I decided to specialise in the language.
Before starting with these resources you should have knowledge of computer science fundamentals. My recommendations can be found in Learn how to code with these resources.
Introduction to Programming in Java (MIT, 2010)
Online Course at MIT OpenCourseWare
This course offers a good introduction to object orientated programming in Java. It is a little bit dry as there are no videos but I would still recommend it to anyone looking for a decent introduction to Java. In order to consolidate my knowledge, I completed my own project called GermanVerbConjugator.
Head First Java (2005) K. Sierra and B. Bates
I would highly recommend this book for learning about object orientated principles and Java. I read this book while working as an intern (early 2016), which helped me understand the language really well. The style of the book is quite different compared to others, which makes it a bit more fun to read. The only assumed knowledge for this book is an introductory knowledge in computer science. Keep in mind that some of the concepts are outdated, which is why I would recommend skipping chapters 12, 13, 15 and 18.
Head First Design Patterns (2014) E. Freeman et al.
This is a great book for learning about design patterns, design principles and object orientated concepts. Reading Head First Java beforehand is not required but experience in object orientated programming is recommended to get the most out of the book. What I really liked are the concrete examples of each pattern and also how the authors weaved important design principles into each pattern. I have a repository on GitHub with my own examples of design patterns with the aim to consolidate what I have learned from this book.
Design Patterns Tutorial New Think Tank
These videos really helped me consolidate my knowledge from Head First Design Patterns and offer a different perspective on learning the same concepts. There are also some videos on code refactoring, which are also highly recommended.
Effective Java (2006) Joshua Bloch
This book is a must read for all Java developers because it teaches you how you should be using Java and helps you to become a better object orientated programmer. This book is not for beginners and it is better to already have experience with design patterns. The book is sometimes a little out of date but almost all of the concepts are still relevant. I have a repository on GitHub with some of my own examples from this book.