Going From “Hello World” to Multithreading: How Much Time Does It Take to Learn Java?
Tags: beginners, java, coding, learning
Published: 2020-05-22 16:55:40

---
title: Going From “Hello World” to Multithreading: How Much Time Does It Take to Learn Java?
published: true
description: Long story short, it takes anywhere from 6 months to decades to from relative to absolute proficiency in Java. Why is there such a difference? Let’s take a closer look at what becoming fluent in Java is like.
tags: beginners, java, coding, learning
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/ayj4fnjxv387kl10tix2.jpg
---
Java is considered one of the most beginner-friendly languages to learn, thanks to its “object-orientedness”, type safety, and overall straightforwardness. Compared to C or C++, where understanding pointers are enough to drive developers crazy, “getting” Java seems like a walk in the park.

Having said that, when exactly can you be confident in knowing Java? Where is the point of “having learned” the language, and how to get there? Since these questions are extremely common among programming beginners, I decided to take a closer look at the road to Java mastery.

Long story short, it takes anywhere from 6 months to decades to from relative to absolute proficiency in Java. Why is there such a difference? Let’s take a closer look at what becoming fluent in Java is like.
## What does “mastering Java” mean?
Personally, I have two scales for determining my own or somebody else’s fluency in a programming language. The first one is objective — how skilled the coder is in using the technology both functionally and idiomatically.

I rank my skills in any programming language the following way:
* *Hello World* — being able to complete basic practice problems in a 101 programming textbook.
* *Proficiency* — a coder can write functional programs but needs to research the features and technologies before completing an assignment.
* *Fluency* — you don’t need many reference points to write complex solutions.
* *Nativeness* — the code you create is indistinguishable from that of another native speaker, you can use the entire Java toolset freely and don’t need references to build advanced solutions.

There’s another way to assess your Java proficiency — that is whether or not your proficiency level allows you to complete day-to-day programming tasks. Here are the examples of how “having learned Java” can vary among programmers:
* Being able to write a basic production-level solution;
* Completing college tasks without having to consult the APIs for references;
* Passing a Junior Java Developer job interview;
* Thinking in the language and seeing the algorithms, not the elements used;
* Noticing the flaws of the language and seeing ways to improve it.

As you can see, every bullet on the list requires a different amount of immersion — the first one is achievable in months, while the last one might take decades of daily dedication.

However, since everybody has different learning objectives, learning the advanced concepts of the language if you are only using the fundamentals within the workplace might be redundant and a waste of time.

In this post, I will approach “mastering a language” as the ability to effortlessly pass job interviews, acing both theoretical questions and practice problems. Let’s take a closer look at what exactly you need to know and find the fastest and most efficient ways to drool Java concepts into your brain.
## What is the best way to learn Java?

Java is one of the most beginner-friendly programming languages. When looking for learning content, you might be shocked by the number of blogs, video tutorials, online courses, and learning platforms at your disposal.

Beginner programmers are often discouraged by such a variety of learning tools. If you are wondering “Should I read a book on Java or is it too last-century” or “Are online courses the best way to learn the language”, take a look at this back-to-back comparison of most popular Java learning tools, their pros, cons, and the amount of time it takes to complete the learning process.
### Interactive platforms
Interactive Java learning tools are one of the newest learning tools out there — and entry-level students are not yet sure regarding their efficiency.

**Pros:**
* Make the learning process more engaging.
* You can apply Java concepts in real-world situations.
* Focused on practice problems rather than theoretical concepts.

**Cons:**
* Require the theoretical understanding of Java principles.
* Don’t give such a firm grasp on theory as books do.
* Take more time to complete than other learning tools.

All in all, I am all for using interactive platforms for Java learning. In my opinion, they are superior to other learning tools when it comes to enjoying the process, retaining acquired skills, and keeping motivated through the hardships of the learning curve.
#### Top Java Learning Platforms
* [Codegym.cc](https://codegym.cc) — an in-depth platform for entry-level Java learners. Built as an engaging multi-level game, it uses jokes and in-game characters to make learning programming fun. After taking a closer look under the platform’s playful cover, you’ll realise that CodeGym is one of the most advanced learning tools, covering everything from Java Core to SQL, Hibernate, and JSP.
![1. conditions.png](https://ucarecdn.com/d0a8cc1e-c7d0-45b9-b9f1-ee00223afb43/)
* [CodinGame](https://www.codingame.com/) — this platform is a collection of practice problems and challenges you need to solve using coding. CodinGame supports over 25 languages, including Java. Creative storytelling and state-of-art graphic are what makes CodinGame stand out among other interactive platforms.
![codingame.png](https://ucarecdn.com/e07553cc-b3cf-4fd7-b734-23ee59598101/)
* [CodeHunt](https://www.microsoft.com/en-us/research/project/code-hunt/). Although this one doesn’t offer a learning plan, it’s definitely a solid tool to practice Java skills. In CodeHunt, students have to compare two code fragments and choose the working one. There’s a leaderboard to keep you motivated and eager to improve.
![code_hunt.png](https://ucarecdn.com/f6daa106-ebd6-418b-8305-0e242fea5610/)

### Books
**Pros:**
* A concise summary of the language’s theoretical concepts;
* You get to choose the learning pace, skipping the parts you are familiar with and focusing on more challenging topics.
* Books offer an in-depth view of the theory of programming, helping you use programmers’ vocabulary properly at job interviews.

**Cons:**
* No room for practicing acquired skills
* Lack of personal connection with a programming professional makes it easy to misunderstand a concept;
* Books get outdated over time — you will not get a tutorial on the language’s latest updates.
* No engagement, reading is easy to get bored of.

Although 21-century programmers often disregard coding books, in my opinion, they shouldn’t. I believe that reading a book on the basics of a new language gives a bird’s-eye view of the technology — its applications, pros and cons, and main concepts.
#### Best books for Java learners:
* [Java: A Beginner’s Guide](https://www.amazon.com/Java-Beginners-Guide-Herbert-Schildt/dp/0071809252) — this is a textbook-style guide to Java Core. Other than using engaging, non-tech metaphors to help you grasp programming concepts, Herbert Schildt adds quizzes and practice problems to each section. Be sure to complete these to improve knowledge retention.
* [Effective Java](https://www.amazon.com/Effective-Java-Joshua-Bloch/dp/0134685997). This book is a must-read for coders with pre-intermediate Java knowledge. “Effective Java” is a list of 78 practices that will flip the way you approach problem-solving, add elegance and sleekness to your code, and will make the end product more native.
* [Java Concurrency in Practice](https://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601). While being quite outdated (the book covers Java 5.0), this one is a great summary of concurrency and multi-threading concepts. Java Concurrency in Practice is not an easy read — yet, once you got through it, taking on any concurrency related practice problem within the workplace will be a piece of cake.
* [Java Performance: The Definite Guide](https://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601). This is an excellent read for you if you don’t have a firm grasp on JVM, performance tuning, or garbage collection. The book covers a wide range of Java Performance topics — from tuning database applications to JAVA SE and EE APIs.

### Online Courses

#### Pros:
* On-demand learning. Online courses are flexible: they are divided into modules, allowing a student to choose which topics require more time and attention and skip others.
* Engaging learning. Most online courses come with video tutorials, quizzes, even a built-in IDE to solve practice problems. Thus, Java students can get a balanced mix of theoretical and practical education.
* Affordability. There are plenty of cheap Java courses, some of them are even free.

#### Cons:
* Reputation. While publishing a book is a serious commitment, that’s not the case with online courses. Considering how big Java is right now, there are a lot of wannabe educators, churning out mediocre learning content. When you are spending time to complete such courses, more often than not, it’s a wasted effort.
* Not as concise as books are. While online courses are flexible to a degree, you might have to put up with the lecturer’s talking speed or pass quizzes on topics you are well familiar with to unlock new tutorials.

#### Best Java Learning Courses
* [LinkedIn Learning Java Tutorials](https://www.linkedin.com/learning/topics/java) — this is a short-and-sweet course on the basics of Java. After completing the entire series of tutorials, you will have a firm grasp on methods, syntax, and flows Java programmers typically use in the real world.
* [The Complete Java Masterclass on Udemy](https://www.udemy.com/course/the-complete-java-9-masterclass-beginner-to-expert/) — this is one of the most renowned Java courses online, with over 207,000 enrolled students. Granted, if you choose to stick to the masterclass, you need to make Java learning a commitment — there are 72 hours of learning content, as well as quizzes and practice problems. The course covers Java 8 and 9, multithreading, Unit Testing, Database, Networking, and many more concepts. This Udemy course is worth looking into.
* [Java In-Depth](https://www.udemy.com/course/java-in-depth-become-a-complete-java-engineer/). This is another in-depth online course that’s rare to come by in Java programming. I enjoyed the amount of detail and the relative ease with which the instructor lays out the concepts of Java programming. Granted, there aren’t many examples or practice problems — however, as a summary of main language concepts, Java In-Depth does a great job.
* [Java Program For Beginners in 250 Steps](https://courses.in28minutes.com/p/java-tutorial-for-beginner-in-250-steps). Despite being well-structured and in-depth, the course is free as well. All learning content is structured in modules — text-based tutorials and slides guide beginning programmers through Java concepts.

## Where to start learning Java?
Now that you understand different levels of Java proficiency and have the tools to achieve your personal goals, breaking down the path that lies ahead is the last thing that would be helpful on your journey to Java fluency.

Based on my personal experience, I created a roadmap for entry-level developers who want to know the programming language like the back of their hand.
### Level 1. Learning Java Core
On the first stage of your Java developer’s journey, you need to learn what makes Java code different from that of other programming languages, what are the cornerstone of a successful program, and how to write a basic solution on your own.

Here’s what learning Java Core means:
* **Acing the syntax**. At first, a developer needs to learn what objects, classes, and methods are, know how to operate if-else statements, use loops, arrays, and the simplest operators.
* **Understanding object-oriented programming**. Since OOP is used in multiple languages, you should pay a lot of attention to this one. Data abstraction and encapsulation, class presentation, inheritance, and polymorphism are some of the concepts you need to understand clearly.
* **Handling Java Collections and Java Exceptions** — a developer needs to be a confident user of both Java Collection and Map interfaces. Other than that, every CS student needs to learn java.lang.Exception and be able to identify exception classes.
* **Java algorithms** — knowing how to choose and apply the right algorithm to solve a given problem will save you a lot of time as you handle work projects.
* **Java Multithreading** — it’s one of the most challenging Java topics and marks your transition from a beginner to an intermediate Java developer.
* **Unit testing** — as a developer, you