What you should learn to become a Master Yoda in Java
Tags: beginners, java, coding, learning
Published: 2019-02-07 19:27:26

---
title: What you should learn to become a Master Yoda in Java
published: true
description: The road starts by writing code every day, practicing, and learning a little bit of theory. The first big step is to practice Java Core.
tags: beginners, java, coding, learning
---

So you decided to be a Java Jedi… There’s a long road ahead of you.

<img src="https://thepracticaldev.s3.amazonaws.com/i/qcre3d5foef6wnqzc6hk.png" alt="Jedi">

<p>The road starts by writing code every day, practicing, and learning a little bit of theory. The first big step is to practice Java Core. This step is a key and consists of several levels (see below). The second step is learning different technologies every modern software developer should know. The final step depends on what particular Java Padavan wants to do. “Train yourself to let go everything you fear to lose” — Yoda said.</p>

<h2>Step one: Java Core+</h2>
<h3>Level zero: Java Syntax</h3>
This is like learning your “ABC’s” for Java. When you were a kid, learning how to write you, you gain an understanding of letters and words and how to use them together. The same story with a programming language. Don’t worry about this level. You absorb Java Syntax step by step during practice.


Themes:

<ul>
<li>What is an Object</li>
<li>What is a Class</li>
<li>What is a method</li>
<li>primitive types</li>
<li>type String</li>
<li>Basic operators</li>
<li>Java if-else statement</li>
<li>Loop statements (for, while)</li>
<li>Arrays</li>
</ul>
<h3>level 1: OOP</h3>
OOP is not the most difficult topic in the world, but it is extremely important. It is important both to read about and to practice OOP principles.

Class inheritance, interface implementation, abstraction of data and behavior, encapsulation of data and class implementation, polymorphism and virtual methods are all key topics. Practice the concepts and read books (for example, Cay Horstmann, Gary Cornell <i>Core Java, Object-Oriented Analysis and Design</i> by McLaughlin).

<h3>level 2: Java Collections</h3>
<p>You may call a group of individual objects represented as a single unit <b>a Collection</b>. Java provides the Collection Framework which defines several classes and interfaces to represent a group of objects as a single unit.</p>
<br/>
<p>You will learn the data structures via Java Collections interface (<code class="markup--code markup--p-code">java.util.Collection</code>) and Map interface (<code class="markup--code markup--p-code">java.util.Map</code>). You may call them the two main “roots” interfaces of Java collection classes.</p>

<h3>level 3: Java exceptions</h3>
An exception (or exceptional event) is an abnormal situation, that arises during the execution of a program. This mechanism greatly simplifies bug catching in programs. All exception classes are subtypes of the <code class="markup--code markup--p-code">java.lang.Exception class</code> and every Java student should know it very well.

<h3>Level 4: Input/Output streams</h3>
Java performs Input and Output operations via Streams. You can imagine a stream like a continuous flow of data. This topic can be problematic for beginners. A bonus for learning this topic that you discover the real hidden meaning of <code class="markup--code markup--p-code">System.out.println()</code>.

<img src="https://thepracticaldev.s3.amazonaws.com/i/fd010pamvdz35lespdbp.gif" alt="java_java_java">

<h3>Level 5: algorithms and puzzles</h3>
What about algorithms? There is often a debate of the value of learning how to code sorting or searching algorithms. During your study of the collections and data structures you’ll find out about sorting/searching methods. Java, and most languages, have libraries with implementations of all known algorithms for sorting and searching. That means they have already been written for you to use. So should you (or shouldn’t) worry about learning how to code them?

The answer I prefer is — you should learn it in order to know how to better think like a software engineer. It is very useful to create your own implementations of algorithms, as well as to form an understanding of their complexity. Especially for people who have studied math only in high school.

All the popular sorting and searching algorithms are described and solved on the network many times. So you don’t need a validator for verification. Choose any course, for example, Princeton University or CS50 or a Youtube video and try to code your very own version.

What about puzzles or non-standard type of Java tasks? They are extremely helpful for any coder because you are taught how to solve difficult and fuzzy problems.

<h3>Level 6: Java Multithreading</h3>
Everyone after level zero can write a program that displays “Hello World”, but what if you should do it using the Java Thread API, so that the famous phrase is printed from an additional thread? And what if the program should print “Hello world” five times, from five different threads, without alternating strings. Multithreading is difficult for even the most simple tasks and is an advanced Java topic.

<h3>Level 7: Java Patterns</h3>
On this level you’ll know you can to write programs a little bit. Are they good enough? Do they look like professional code? To write code like a pro, you must learn design patterns first. They represent the best practices used by experienced software developers. Design patterns solve many general problems software developers faced during development. These patterns were chosen as a result of trial and error of numerous software developers over a substantial period of time.

<h3>Level 8: Unit testing</h3>
An important skill for any programmer that is writing unit tests to their own code. When you figure out how to write tests, you should apply this as a habit to all your projects. Unit tests are much more useful than doing checks using console output. Unit tests are also the first thing companies typically trust new developers to write.

<h3>Level 9: lambdas</h3>
Support for lambda expressions appeared in Java 8, but not all programmers have adopted them yet. However, today the concept of “tasks for Java Junior” includes manipulations with lambda expressions, so I recommend learning them as well.

<h3>Level 10: Serialization in JSON, RMI, HttpUrlConnection, socket</h3>
These topics are for more intermediate and advanced Java developers. They require deeper knowledge, and act as a kind of bridge to their own projects, internships, and work.

<h3>Where to find practical tasks for levels 0–10?</h3>

<img src="https://thepracticaldev.s3.amazonaws.com/i/mfisemynvfmajovql015.gif" alt="practical_task">
<a href="https://codegym.cc/" data-href="https://codegym.cc/" class="markup--anchor markup--p-anchor" target="_blank">CodeGym</a> — it’s a Java Core course with more than 1000 coding tasks with validations.

<img src="https://thepracticaldev.s3.amazonaws.com/i/qio2k9orjtqlr9hmjtvc.gif" alt="codegym">

<a href="https://www.w3resource.com/java-exercises/basic/index.php" data-href="https://www.w3resource.com/java-exercises/basic/index.php" class="markup--anchor markup--p-anchor" target="_blank">w3resource</a> — a good and very famous site for web developers.

<a href="https://www.geeksforgeeks.org/tag/java-puzzle/" data-href="https://www.geeksforgeeks.org/tag/java-puzzle/" class="markup--anchor markup--p-anchor" target="_blank">GeeksForGeeks </a> (especially algorithms and puzzles) — very nice resource with many tasks and different courses.

<img src="https://thepracticaldev.s3.amazonaws.com/i/dzwfhqjui56ou1n9kt1r.png" alt="geeksforgeeks">

<h2>Step 2: add-ons</h2>
Java developer uses not only Java, but many different technologies. Some of them became a standard for everyone who are in IT. However, it doesn’t mean you must to know these technologies as deeps as Java Core. Learn them a bit, some of them you’ll find out better during your job or internship.

<b>Git.</b> It’s the most widely used version-control system for tracking changes in computer files and coordinating work on those files among multiple people. So if you want to be a professional programmer, understanding Git is a requirement. Almost every software company uses it.

Learn it here: Learn it here: <a href="https://learngitbranching.js.org/" data-href="https://learngitbranching.js.org/" class="markup--anchor markup--p-anchor" target="_blank">Learn Git Branching</a> or here: <a href="https://www.atlassian.com/git/tutorials/what-is-git" data-href="https://www.atlassian.com/git/tutorials/what-is-git" class="markup--anchor markup--p-anchor" target="_blank">what is Git</a></p>


	
<b>JavaScript.</b> This cross-platform, object-oriented scripting language is found in ever web browser. JavaScript can be connected to the objects of its environment to provide programmatic control over them. So JavaScript is everywhere and even if you don’t want to work as a frontend developer the word ‘JavaScript’ is a good add-on for your CV.

Learn it here: <a href="https://www.w3resource.com/javascript-exercises/" data-href="https://www.w3resource.com/javascript-exercises/" class="markup--anchor markup--p-anchor" target="_blank">w3resource</a> or here: <a href="https://www.codecademy.com/learn/introduction-to-javascript" data-href="https://www.codecademy.com/learn/introduction-to-javascript" class="markup--anchor markup--p-anchor" target="_blank">codecademy</a></p>


<b>SQL.</b> Defined by Wikipedia as “Structured Query Language is a domain-specific language used in programming and designed for managing data held in a relational database management system (RDBMS), or for stream processing in a relational data stream management system (RDSMS).” It’s pretty easy to learn it on the beginner level. Almost every programmer has used SQL at some point.

<img src="https://thepracticaldev.s3.amazonaws.com/i/xg4ve9n12acp8brmgkw5.gif" alt="SQL">

Learn it here: <a href="https://sqlbolt.com/" data-href="https://sqlbolt.com/" class="markup--anchor markup--p-anchor" target="_blank">SQLBolt</a> or here <a href="https://www.w3schools.com/sql/" data-href="https://www.w3schools.com/sql/" class="markup--anchor markup--p-anchor" target="_blank">w3schools</a></p>

	
<h2>Step 3: Became a master</h2>
Most of Java developers work in two areas, mobile tech or enterprise projects. After you gain the core knowledge in the first 2 steps, we split into 2 different branches. We will not dwell on them in detail, but each branch deserves a special article. So, briefly:

<h2>Mobile Technologies</h2>
Java knowledge opens up the world of Android development for you. A great place to start to learning Android programming: Google Developers Training
	
<h2>Enterprise technologies</h2>

This consists of a bunch of technologies that are difficult to learn by yourself. It is much better to find courses or an internship. It is beneficial to learn about Spring, the most popular Java Framework, and Hibernate, an object-relational mapping tool, and other related technologies, and they are taught in this free Udemy course.

If you choose the Java developer’s path — May the force be with you!

First published on <a href="https://levelup.gitconnected.com/what-you-should-learn-to-become-a-master-yoda-in-java-59c69207df78">GitConnected</a>