The Java ecosystem is vast, and we developers must know the technology fundamentals for our Java career learning path.
Knowing what to study is also a big challenge since there is so much to learn. Therefore, let’s explore the most important topics to study so we can become better software engineers.
Java Learning Path
The learning path from Java is extensive because technologies evolve very quickly. Fortunately, we don’t really need to learn every new technology that shows up. Instead, we need to be strategic by learning the essential fundamentals to help us learn any new technology faster.
New technologies are always created based on fundamentals. Even though learning fundamentals is more challenging than learning new technologies, we get a much better return on investment because it boosts our learning speed.
Let’s start exploring the concepts and technologies we need to learn with Java.
Algorithms
To start coding in any programming language, we first need to know the basics of algorithms. Simply put, algorithms are the logical instructions developers give the computer so we have an expected outcome.
Also, most companies will give developers a coding algorithm challenge to test their skills. Let’s see some resources where we can study algorithms:
The following video is from the famous channel FreeCodeCamp. You will learn an introduction to algorithms:
Algorithms and Data Structures Tutorial – Full Course for Beginners
The channel from Michael Sambol has many algorithms, and he explains them in about 5 minutes. It’s worth checking out:
Michael Sambol Channel
This channel, Mosh, is also perfect as he simply explains algorithms concepts. This video is a good grasp of many algorithms concepts:
Data Structures and Algorithms for Beginners
I also wrote a book with all the fundamental concepts needed to pass a coding challenge interview. You can get the book at the following link:
On top of learning the essential content from algorithms, I also recommend you solve the easy-to-medium coding challenges from one of the following platforms. The hard ones usually won’t be asked in a job interview:
Leetcode
HackerRank
The Algoexpert platform is also very good. You will solve lots of algorithms, and there will be a video explanation of the solution for each algorithm:
AlgoExpert
Object Oriented Programming
The Java programming language is mostly based on Object-Oriented Programming, and if you know it well, Java will be easy. Java is not as difficult as most people think. Let’s see some materials to help master this concept:
There is a good course on FreeCodeCamp. Check it out:
Intro to Object Oriented Programming – Crash Course
Learn important concepts from Object-Oriented programming in 7 minutes with Mosh:
Object-oriented Programming in 7 minutes | Mosh
This channel from Caleb Curry introduces OOP (Object-Oriented Programming) with Java
Object Oriented Programming in Java – All-in-One Tutorial Series!
Java Core
Every Java developer should know the main features of the Java programming language. Otherwise, developers will likely reinvent the wheel and create unnecessary code.
To learn the core features of Java, let’s see resources.
You can learn Java features very well by trying out the Java Challenges. There are many challenges there where you can learn the main Java features and improve your skills:
Java Code Challenges Videos
Telusko is a famous channel that helps developers understand the main features of a programming language. Telusko has many classes about Java features, and his didactic is pretty good. Check it out:
This course is from the Simplilearn channel:
Java Full Course
There is a course from Marcus Biel on FreeCodeCamp for beginners that is pretty good:
Learn Java 8 – Full Tutorial for Beginners
This is the AmigosCode channel, and there is good content for Java here:
Java Full Course [NEW]
There is also my book explaining the most important Java features with fun Java code challenges so you can test your skills and learn a lot more:
Databases
In any application, we will need to store and retrieve data. That’s foundational knowledge we have to have as software developers. The standard language database used to handle data is SQL, and that’s what we will explore here.
On FreeCodeCamp, there is a course with the fundamentals of SQL and Databases:
SQL Tutorial – Full Database Course for Beginners
In the Programming with Mosh channel, there is a course for the MySQL database:
MySQL Tutorial for Beginners [Full Course]
Another important concept about databases is the CAP theorem. Check it out the following video:
CAP Theorem Simplified
Database normalization with Decomplexify:
Learn Database Normalization – 1NF, 2NF, 3NF, 4NF, 5NF
There is a playlist with many videos from the Theoretical Computer Science channel explaining the Introduction to Databases:
Introduction to Databases
We also need to know how to create a database model when dealing with databases. There is a course for that on FreeCodeCamp:
Database Design Course – Learn how to design and plan a database for beginners
For more content on Databases, I wrote some articles that will help you have a broader view:
Choosing the Best Storage and Databases
Learn When to Use Specific Storage Paradigms for Systems Design
Learn When to Use Database Replica and Database Sharding for Systems Design
Dependency Management and software build with Maven
Maven is a tool for building, testing, and managing dependencies (libraries). It’s an essential tool to understand when developing a Java project. Let’s see some resources to learn it:
The DevLessons channel is a pretty new channel with good content to help you learn more about Maven:
Maven Full Course | Apache Maven Tutorial for Beginners
Another good video about Maven is the following one from Marco Codes:
Maven Tutorial – Crash Course
There is a series of videos from Maven from Simplilearn:
What Is Maven? | What Is Maven And How It Works? | Maven Tutorial For Beginners | Simplilearn
JUnit
Unit testing is trivial for any application. Unit tests are the fastest way to test our application per unit (per method). We can do that by using fake data and simulating the behavior we want in the application to ensure it’s working as expected.
Let’s see some YouTube videos that explain how to test our code.
In the following video, there is an introductory explanation from the Coding with John channel:
Java Unit Testing with JUnit – Tutorial – How to Create And Use Unit Tests
There is a good playlist from Java Brains about JUnit 5 as well, and it will help you create better tests:
JUnit 5 Basics
On FreeCodeCamp, there is a JUnit 5 crash course. Check it out:
Java Testing – JUnit 5 Crash Course
An excellent source for testing is the following book from Mauricio Aniche:
Integration Tests
Integration Tests are the best way to test our application because we can test the application as a whole, and we will know for sure that the features we are testing are working.
Including Unit Tests and Integration tests in the software build cycle is an excellent idea. Let’s see some videos explaining some tools and concepts about Integration tests:
Spring Boot 3 Integration Testing With TestContainers | Junit 5 | JavaTechie
Dan Vega is a Java Champion with high-quality content on his channel about Java. The following is his video about Integration tests:
Spring Boot Testcontainers – Integration Testing made easy!
There is one more good quality video from JavaTechie explaining essential concepts from integration tests:
Spring Boot Integration Test with TDD | JUnit5 & H2 | JavaTechie
HTTP Concepts
When creating a web application, we need to know basic HTTP methods to exchange information. Let’s see some resources to understand the concepts of HTTP better.
There is a video explaining concepts from the HTTP protocol in the Traversy Media channel:
HTTP Crash Course & Exploration
The following video explains HTTP methods and also APIs. Knowing APIs is very important because in almost all the Java projects, we will need to create REST API endpoints:
Full HTTP Networking Course – Fetch and REST APIs in JavaScript
The client-server model is the most popular model for Java applications, and in the vast majority of cases, it uses HTTP. Check out the following article for more:
Mastering the Client-Server Model and Basic Internet Protocols
HTTPS is also crucial to understand because that’s how we make HTTP secure and what the industry uses. I created an article for that:
Java Web – (JSP) Java Server Pages
When working with JSP, we deal with basic web concepts. That’s why it’s important to know the basics and at least create a Java web application to understand how it works.
Let’s see some videos that help us understand JSP better.
The following is the luv2code channel, and he has a playlist teaching JSP:
JSP Tutorial
Telusko also has a playlist explaining JSP and servlets. Check out the following videos:
Introduction to Servlets
Clean Code Concepts
A good programmer needs to know how to create high-quality code. We spend ten times more time reading code than creating it, so we must first put effort into creating good code at first.
There are some basic techniques we can apply to create good-quality code. Let’s see some resources to help us with that.
There are some good videos from Uncle Bob explaining some principles of Clean code:
Clean Code – Uncle Bob – all lessons
The channel Programming with Mosh also has a good video about Clean Code:
Clean Code: Learn to write clean, maintainable and robust code
Solid
Solid principles are crucial to creating high-quality code. Those principles make code reusable, easier to read, and maintain.
Let’s explore some videos explaining those important concepts.
The examples from the following principles explain SOLID clearly and concisely:
SOLID Design Principles with Java Examples | Clean Code and Best Practices | Geekific
Another good video to learn SOLID is from AmigosCode. Check out the following video:
Learn SOLID Principles with CLEAN CODE Examples
SOLID principles explained by Alex Hyett:
SOLID Principles: Do You Really Understand Them?
Design Patterns
Design patterns are difficult to master when we lack enough knowledge of object-oriented programming. Most design patterns vastly use all the OOP concepts, but you will notice that they mainly use polymorphism.
Let’s see some good resources to study design patterns:
I created a Design patterns series explaining all the design patterns for real-world situations:
Design Patterns Saga
In this video, you will have a grasp of 10 design patterns in 10 minutes from the Fireship channel:
10 Design Patterns Explained in 10 Minutes
You can also learn some Design Patterns with Mosh in the following video:
Design Patterns in Plain English | Mosh Hamedani
Telusko also has videos explaining some design patterns with Java:
Design Patterns in Java Theory
In the Derek Banas channel, there is a detailed explanation of every design pattern. It’s worth it checking out:
Design Patterns Video Tutorial
Java Frameworks
There is no need to know all the Java frameworks deeply. Instead, it’s better to pick one and focus on it. Also, keep in mind that the concepts are very similar. So, if you master one of them, the others will be easier to learn.
If you are looking for a job and don’t know which one to pick, I recommend you start with Spring because there are many more job opportunities in Spring.
Spring
Nowadays, spring is the most popular framework for Java. Most companies use it because it’s robust and has everything we need to create Microservices with Java.
Let’s see some Spring videos:
Java Brains created a series of videos explaining the main concepts of Spring:
Spring Tutorial
There is another 6 hours of video with important Spring concepts for beginners. Check it out:
The ULTIMATE Guide to Spring Boot: Spring Boot for Beginners
There is a Spring tutorial from AmigosCode:
Spring Boot Tutorial | Full Course
There is an 8 hours course from the BoualiAli channel as well:
The ULTIMATE Spring Boot course | 8 HOURS Course
Jakarta EE
Jakarta is the new Java EE. Oracle used to own Java EE but gave the Java EE source code to the Java community and other companies. As Oracle owns the Java name, the Java community had to change everything from Java EE to Jakarta EE.
The Payara company, which owns the Payara application server derived from Glassfish, has a course about Jakarta EE:
Getting Started with Jakarta EE 9: Using Gradle
You can also check out the talks from the Java Champion Ivar:
Jakarta EE 10 Feature by Feature
There is the official Jakarta EE channel:
JakartaEE Channel
Quarkus
Quarkus is an incredible Java code stack that makes creating a Microservice easy. Let’s look at some high-quality resources to learn Quarkus.
My good friend Giuseppe Scaramuzzino has plenty of high-quality videos explaining Quarkus. It’s worth checking out:
Quarkus Concepts Playlist
This is an introductory video from FreeCodeCamp on Quarkus:
Java Web App with Quarkus and JPAStreamer
Another friend of mine and Java Champion, Sebastien Daschner, has a good video explaining Quarkus:
Why You Want to Code With Quarkus
There is also the official Quarkus channel, which I recommend for someone who knows Quarkus a little bit:
Official Quarkus Channel
Micronaut
Micronaut is a similar framework from Quarkus. It’s another powerful framework for creating cloud-native applications. Let’s look at some great resources for studying this technology.
The Java Champion Graeme Rocher is the creator of the Micronaut framework, and he has a lot of high-quality resources to help you learn Micronaut. Check out this video:
10 Incredible Things you can do with Micronaut & GraalVM By Graeme Rocher
There is a playlist from CodePractice explaining some Micronaut concepts:
Micronaut | Code Practice
Basics of Security – Oauth
Oauth is an industry-standard protocol for authorization. Therefore, it’s important to know the basics of it. There is no need to be a specialist, but knowing the basic flow will do for job interviews:
The ByteByByteGo channel has a good resource about Oauth. Check it out:
OAuth 2 Explained In Simple Terms
The Java Brains channel also has a good resource on Oauth:
What is OAuth really all about – OAuth tutorial – Java Brains
There is another good tutorial from OktaDev:
What is OAuth and why does it matter? – OAuth in Five Minutes
Containers with Docker
Docker is used by more than 80% of companies worldwide, and it helps deploy applications anywhere. Docker encapsulates the application deployment in a container that is isolated and independent from an external operating system.
Let’s explore some good resources to learn Docker.
Techworld with Nana has a vast range of high-quality content explaining DevOps technologies. She has a very good video explaining Docker:
Docker Crash Course for Absolute Beginners [NEW]
Docker Tutorial for Beginners [FULL COURSE in 3 Hours]
Ultimate Docker Compose Tutorial
In the Programming with Mosh channel, there is another beginner guide for Docker:
Docker Tutorial for Beginners
Software Automation with Jenkins
Most Java applications use Jenkins to automate the software build cycle. Jenkins will automate the build, test, code standards, and deployment from Java applications so we ensure the code is merged without problems. Let’s see some resources to help you learn more about Jenkins:
TechWorld with Nana has excellent resources for Jenkins. Check it out:
Jenkins Tutorial for Beginners
Complete Jenkins Pipeline Tutorial | Jenkinsfile explained
In the channel DevOps journey, there is another Jenkins tutorial:
Learn Jenkins! Complete Jenkins Course – Zero to Hero
On the channel SimpliLearn, there is more high-quality content to learn Jenkins:
Jenkins Full Course | Jenkins Tutorial For Beginners | Jenkins Tutorial | Simplilearn
Cloud Providers
The cloud is predominant in Java services and any application in the market. Therefore, we need to know the basics of it. Otherwise, it’s very difficult to tackle day-to-day work challenges.
You don’t need to study all of the cloud providers. If you know one well enough, it should be good for you to get a job. In any case, I will share here resources to learn the most used cloud providers in the market.
AWS – Amazon Web Services
Getting the AWS certifications is one way to learn it. Another one is to create your application on AWS. Let’s see some resources to study AWS:
On FreeCodeCamp, there is a full course for the AWS Certificate Cloud Practitioner:
AWS Certified Cloud Practitioner Certification Course (CLF-C01) – Pass the Exam!
AWS Certified Cloud Practitioner Certification Course (CLF-C02) – Pass the Exam!
FreeCodeCamp has another course to help you develop an application and deploy it on AWS:
AWS Cloud Complete Bootcamp Course
On Fireship, there is an explanation of 10 AWS services in 10 minutes:
Top 50+ AWS Services Explained in 10 Minutes
Google Cloud – GCP
Even though I have never worked with GCP, everyone who has worked with it says it’s easier to use than AWS and does pretty much the same.
Check out this course from FreeCodeCamp:
Google Cloud Associate Cloud Engineer Course – Pass the Exam!
There is also this course from Google Cloud Tech:
Google Cloud Essentials
Azure
Azure is gaining a lot of traction, and it’s very compatible with Java. It’s gaining a lot of space in the market, so it’s worth mentioning. Let’s look at some resources for learning it.
On Adam Marczak – Azure for Everyone channel, there is a good course on Azure:
AZ-900 | Microsoft Azure Fundamentals Full Course, Free Practice Tests, Website and Study Guides
FreeCodeCamp also has a good course on Azure:
Microsoft Azure Fundamentals Certification Course (AZ-900) UPDATED – Pass the exam in 8 hours!
Azure Developer Associate (AZ-204) — Full Course Pass the Exam!
The SimpliLearn Channel has 10 minutes video explaining the essentials of Azure:
What Is Azure? | Microsoft Azure Tutorial For Beginners | Microsoft Azure Training | Simplilearn
Oracle Cloud
Oracle Cloud is not very popular in the market but is still relevant because it’s known to be the most performant cloud provider. Let’s look at some resources to help us understand more about Oracle Cloud.
On FreeCodeCamp, there is a full course on Oracle Cloud:
The Oracle Foundations Associate Cloud Certification (PASS THE EXAM) – Full Course
There is a course from the Oracle Learning channel also:
Oracle Cloud Infrastructure Fundamentals
Basic Linux concepts
Linux is the predominant operating system in cloud machines. We often need to access the cloud machine remotely to perform basic actions. Learning the basics of Linux will help solve those problems in our daily work.
There is an introduction to Linux from the FreeCodeCamp channel:
Introduction to Linux – Full Course for Beginners
There is another course from Edureka with 11 hours of content on Linux:
Linux Full Course – 11 Hours [2024] | Linux Tutorial For Beginners | Linux Training | Edureka
Introduction to Linux – Full Course for Beginners
Systems Design
Nowadays, there will also be a Systems Design interview in most interviews. This means that we need to know how to design a System on the spot to pass in most software development interviews. Let’s see some resources about Systems Design:
There is an introductory course explaining the basics of Systems Design on FreeCodeCamp:
System Design for Beginners Course
There is a more complete course on the ByToByte channel playlist with more than 50 videos. Check it out:
Systems Design Fundamentals
On NeetCode you will see some similar examples of how they would be Systems Design interviews:
Design Youtube – System Design Interview
Summary
Remember the important Pareto principle when studying all these topics: You need 20% of the knowledge to solve 80% of the problems. With that in mind, we don’t need to learn everything from every technology described in this article.
A good example and proof that we don’t need all the knowledge to start using a tool is the Git version control. We use mostly git commit, git branch, git checkout, git push, git history, git merge, git rebase, git push -f, and some specific commands for edge cases. It’s not that much. Only with those commands and the understanding of the core Git concepts can we solve 80% of the problems.
Just make sure you know the essential concepts so you can solve most of the problems.
Let’s now recap the Java career learning path from beginners to advanced:
- Algorithms: to solve computer problems with logic instructions.
- Object-Oriented Programming: to organize the code in a more easily reusable way.
- Java Core: use the Java features correctly, and do not reinvent the wheel by creating unnecessary code.
- Databases: to store and retrieve persistent data.
- Dependency Management and software build with Maven: to manage external libraries, build and test the application.
- JUnit: to test code unitarily. This means testing the relevant methods independently.
- Integration Tests: to test the application as a whole. This means using internal and external services.
- HTTP Concepts: to exchange information in a web application.
- Java Server Pages (JSP) is a low-level (without too much abstraction) way to create a Java web application.
- Clean Code: to create reusable, more easily understandable, and maintainable code.
- Design Patterns: to help with code reuse in an optimized and standardized way
- Java Frameworks: These facilitate creating boilerplate code with less code. Examples are Spring, Jakarta EE, Quarkus, and Micronaut.
- Basics of Security – Oauth: for application authorization
- Containers with Docker: to isolate an application service deployed within an independent container.
- Software Automation with Jenkins: to build, analyze code quality, test, and deploy code.
- Cloud Providers: to use cloud services and deploy applications in it.
- Systems Design: to design systems with the right technologies.