Skip to main content
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!

Getting the motivation

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.
  1. 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?
  2. 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.

What motivated me

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).

What I love about Java

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:
Which is syntactic sugar for:
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.

Choosing your learning materials

Here comes the next hardest part because it really depends on how you learn best. Choose wrong, and it might end up shattering your motivation.

Primary resources (OOP and architecture)

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. 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.

Primary resources (Java-specific)

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.

Secondary resources (talks/conferences)

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:
  1. Migration guides, usually with the hashtag #RoadToXX, where XX is the Java version. For example, #RoadTo25.
  2. Feature deep-dives in their JEP cafe playlist.
  3. Short and entertaining updates with the Inside Java newscast.
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:

Secondary resources (present Java APIs/features)

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.

Going beyond your learning resources

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.

Frameworks and build tooling

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.

Using AI to learn

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.

Closing

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!