This post comes after the Java User Group PH meetup last night (July 9, 2026), where, after my talk, a few of my peers asked me for some advice on progressing their Java learning journey.Before I lay out my response, though, here’s my obligatory self-evaluation: I’m not going to claim that I’m a Java expert; I know that I’m not there yet. Being an expert takes more than knowing, after all. But I feel confident enough to share my journey so far because I think you too can learn something from it. Alas, it’s not my goal to be the authority here, but rather, a peer in the same learning journey.Got it? Alright, onward, then!
Perhaps the hardest part in learning anything is first getting the motivation to start. Before you even open a book, enroll in a course, or pull up a YouTube video, you need to ask yourself why you want to learn Java at all.
Is it for the promise of job opportunities? Web development is incredibly popular right now, and you’d likely discover just as many opportunities there. Why Java specifically?
Is it because you hear it’s one of the most popular languages out there? Well, yes, it might be the biggest programming language out there. But there’s also C#, Kotlin if you’re interested in mobile development, and Python if you’re looking to get involved in AI.
I’m sure there are more questions one could ask him or herself, but I hope the two I wrote above gave you something to mull over.
I jumped around several languages, from C#, C++, Python, and almost Rust, before I found Java again thanks to our Object-Oriented Programming course last year, in my 2nd year of college. This alone gave me a reason to come back to Java.It was then I realized that I loved the idea of building maintainable software, which I’m sure you’ll find is one of the core promises of the Java SE platform. I started thinking that I didn’t want to just write code, I wanted to make them last for long, and in such a way that fellow developers could easily pick it apart.That’s not to say you can’t build maintainable software in other programming languages. In fact, you might find sometimes that it has a few big limitations when it’s put up against native programming languages like C, C++, and Rust (See State of Valhalla, Part 1: The Road to Valhalla).
The special thing I saw in Java was how everything just made sense. Yes, it’s verbose, but I think that’s part of what makes it special: it doesn’t try to bury everything in syntactic sugar.
What is syntactic sugar?
Syntactic sugar is the set of language features that make certain ideas and operations easier to program, typically by offering certain keywords or syntax that achieve the same outcome as more/longer lines of code.A good example is Python’s list comprehension feature:
even_nums = [x for x in range(10) if x % 2 == 0]
Which is syntactic sugar for:
even_nums = []for x in range(10): if x % 2 == 0: even_nums.append(x)
I love this part about Java because I think that—somewhat counterintuitively—it lessens cognitive overhead while reading and writing code. I just find myself being able to read and write more code without having to decipher new syntax constantly.Apart from that, there are also many APIs. The sheer breadth and depth of the Java Platform, SE API is immense. From file IO with java.nio, concurrency with java.util.concurrent, and a nice way to handle and transform data with the Stream API, you can do a lot in Java without needing to rely on external libraries.All of these APIs are also incredibly stable once they’ve been finalized. These APIs are subject to a lot of scrutiny before they are declared good for production, and it really shows with the experience they provide.
The very first thing you need to understand is what Object-Oriented Programming is even for.There’s only one video I can recommend for this. You don’t need any other video to understand the four pillars of OOP:
Once you know that, you can start with your primary resources on Java to know how these are applied.
Show once you're comfortable with Java classes and OOP...
OOP doesn’t stop there. All of this is only part of an overarching theme: maintainable software.I’m putting this here because I don’t want you to fall into the trap of abstracting everything and placing all your classes in deep inheritance hierarchies because you think, “that’s what OOP and Java are about, right?”It’s not, and to understand more fully, I recommend you check out the following channels:
Code Aesthetic (specifically, his videos on abstraction, flaws of inheritance, and dependency injection)
Christopher Okhravi (very advanced. I recommend you start with the two rules of inheritance)
Don’t expect to understand all their videos the first time. Trust me, I struggled with them for a bit too.The purpose of watching their videos for the first time is so that you question your work. To be able to ask yourself, “am I doing this right? Am I applying what those videos were saying?”If you can find yourself asking that while you’re working, then I think you’re in a great position.
Joshua Bloch’s Effective Java (3rd Ed.) is largely considered to be the best resource out there for writing good Java code. This is another resource that you should read after some time getting comfortable with Java and OOP.
You do not need to study previous versions of Java before moving on to the next.
Study for the latest Java version as much as possible. It’s easier to search for limitations of previous versions and how to adapt to that, than to only know the old way and then try to discover entirely new features you don’t even know how to look for.
Since I’ve already had some experience programming, and I felt confident enough that I didn’t need to go revisit all the basics of computing, I chose the book by Cay S. Horstmann, Core Java for the Impatient, 4th Edition. This book was amazing for me because it cut a massive amount of fluff and allowed me to see what I could do with Java rapidly. This, in turn, allowed me to experiment with them in my own toy projects quickly.If you want something more in-depth, then Horstmann’s Core Java is for you.If you don’t feel comfortable enough with programming yet, or if you don’t like reading, then perhaps MOOC.fi’s Java Programming I & II course is for you. It’s highly regarded as one of the best Java courses out there.
If you also want to catch up on Java’s latest like I do, there’s no place better for that than Java’s own YouTube channel, where they host recordings of talks from JavaOne and the JVM Language Summit. There are also:
Migration guides, usually with the hashtag #RoadToXX, where XX is the Java version. For example, #RoadTo25.
The Devoxx YouTube channel is another great resource. They host talks from many experts, and it is there that you can find more practical applications of newer Java features.Here’s a great video from Devoxx:
Apart from books and talks, I also supplemented it with lots of videos from YouTube channels such as Will Tollefson and Coding with John. I have to say, if you’re interested in more powerful (and perhaps advanced) features, Will Tollefson provides more videos for that.I must warn you not to make these videos a primary resource. Sometimes, they leave out details or even make a few mistakes. Whenever you’re unsure about something and want more detail, it’s best to either consult your primary resource (a book) or look up the official Java talk/documentation for that topic.
The most dangerous thing you can fall into is tutorial hell.
Perhaps the most important lesson I’ve learned since last year is to stop trying to memorize all the features and APIs. I’m here to tell you that you can’t reasonably memorize them all.Even senior engineers probably do not know everything there is to know about Java.What worked for me was working on toy projects continuously. Whenever the book taught me something new, something cool, I’d immediately open my IDE and try it out. I’d apply it somehow, while also asking myself if I was following the principles of OOP and maintainable software.The takeaway here is that you don’t have to know everything before you get started on a project.
After you feel comfortable with Java, the language, you will want to expand your horizons. For most of us, that means learning how to build web services/APIs and connecting to the database. First, though, is to learn build tooling.I recommend you learn Maven, as it remains the standard for most projects. If you are doing mobile development, learn Gradle. Though if you were doing mobile development, you should be learning Kotlin instead. Kotlin Multiplatform and Compose Multiplatform are likely the two most important things you need to know to do modern mobile development nowadays.Next, learn Spring Boot, then unit testing with JUnit and optionally, AssertJ.You’ll likely have to learn Hibernate too alongside Spring Boot. I will tell you now: Hibernate is a beast. A huge one. If you already know SQL and want control over your queries, I suggest looking into jOOQ.
One of the biggest unblockers in my learning journey is also having my own tutor, in the form of Google Gemini 3.1 Pro (not sponsored).It has been the biggest help because I can hold extended discussions with it about specific topics. Sometimes, I send it my code or repository (personal projects only, of course) and ask it whether I’m doing alright.
The most important part of this process is treating AI as your instructor, not a “copilot,” nor a “co-author.”
Would you believe me if I said that I have never once touched “agentic IDEs” for Java? Not Claude Code, Cursor, Antigravity, nor any other ones. It’s reasonable to say that I have not vibecoded Java.Whenever I have questions, and I can’t find them in my resources (or I don’t have the time), I would ask Gemini through the web app. More often than not, I’d instruct it to not implement it for me but rather produce a high-level scaffold from which I can write code myself.Try this out! Maybe it’d hold successes for you too.
I hope this writeup of mine has helped you get ideas on how you could move forward in Java. It’s a lot, I know, but it has been a lot of fun for me. I hope you’ll be able to find fun in it too!