Ultimate 'Beginning with Java' reading list.
Tags: java, webdev, beginners
Published: 2019-11-11 08:49:00



I am writing this post in a hope that it might help some future Java developers out there. You see there is a common misconception that Java is hard language to learn - NO, Java is the easiest Language to learn.

The problem comes at some point during learning the API, because you just have so many options and you got lost what to do, how to continue and you give up.

## Options which I do not recommend (for Java)!

__Academy__

Usually in most academies the materials are old, the trainers are not very motivated and at the end you kinda feel unhappy. Also it costs a lot.

__University__

The problem with the university is that it has a set of random disciplines that teach you a lot, but you dont see the big picture and you get demotivated very fast or even lost. Also it costs even more.

__Udemy__

Kinda combination of the previous two - it is the cheapest and maybe the best option out of the 3, however it still cost something and you still have the same issues with not very motivated or good trainers, lost in the randomness of options and at the end you expect someone to teach you something, but in reality you have to teach it yourself by listening to him which is very different for what we have used to do in school.

__when Academy, University or Udemy are good__

The only reason is if you are lazy. You see in order to understand and start applying something you need to first learn it and then to use it to write something. Most people just read without the writing bit, or try to write before they have learned anything (which is better case then the first in my opinion) but in both cases this creates a huge, HUGE gaps that are usually caught on an interview and basically makes you to fail. Academies and udemy courses help in a way that they explain and repeatedly tells you the same things over and over again and this combined with homeworks and exercises helps. Also especially udemy courses by being very pragmatic and practical will show you a code that otherwise you have to write which helps the lazy people a lot.


Still my advice is first read this if for some reason you see you are lazy and don't write code and don't do exercises and need a push then buy some udemy course for 10 bucks, if this also doesn't help then look for an expensive academy which for me should be the last resort and not the first one.

__Friends__

The issue with friends helping you is that you will learn to depend on them, you see in programming the main, main skill you need to have is to not give up, to keep digging and find the answers by yourself. So friends are great for questions, not for training.

##Options which are good

__Read Online__

__Write Offline ;)__

Exactly in this order - read something and type it, don't try to find hard tasks or examples, just write and experiment with what you are reading to understand why it works and why and mostly how it doesnt work. You see you need to train your memory and your fingers to write the code in this language, to maybe not remember everything but to not wonder about types, brackets, braces or semicolons and so on.

So advice is first read this if for some reason you see you are lazy and don't write code and don't do exercises and need a push then buy some udemy course for 10 bucks, if this also doesn't help then look for an expensive academy which for me should be the last resort and not the first one.

_OK where should I start?_

* The best plays to start are the official Java tutorial (they are a bit outdated but still they are the BEST to start from, I started with them as well back in the 2005 and they have been updated since then but not as much as I would want to, but they are still the BEST) 

https://docs.oracle.com/javase/tutorial/

Read the following topics only:

* Getting Started — An introduction to Java technology and lessons on installing Java development software and using it to create a simple program.
* Learning the Java Language — Lessons describing the essential concepts and features of the Java Programming Language.
* Essential Java Classes — Lessons on exceptions, basic input/output, concurrency, regular expressions, and the platform environment.
Collections — Lessons on using and extending the Java Collections Framework.
* Date-Time APIs — How to use the java.time pages to write date and time code.
* Deployment — How to package applications and applets using JAR files, and deploy them using Java Web Start and Java Plug-in.
Custom Networking — An introduction to the Java platform's powerful networking features.
* Generics — An enhancement to the type system that supports operations on objects of various types while providing compile-time type safety. Note that this lesson is for advanced users. The Java Language trail contains a Generics lesson that is suitable for beginners.
* Internationalization — An introduction to designing software so that it can be easily adapted (localized) to various languages and regions.
* JavaBeans — The Java platform's component technology.
* JDBC Database Access — Introduces an API for connectivity between the Java applications and a wide range of databases and data sources.
* Reflection — An API that represents ("reflects") the classes, interfaces, and objects in the current Java Virtual Machine.

_Few notes:_
* Generics - when you read them and at some point you dont understand fully anymore, ignore them.. skip them you will return at some point. First time when I was reading them I stopped like at 50% I found a job even working and started to reread them and even then I stopped at like 80% and finally completed this part around 2 year later to fully understand and embrace all the bits and pieces, so no worries if you don't understand it all, they are just hard and messy and hard to learn without practice. 
* Internationalization - you don't have to focus on it so much if you are living in the US or UK, I believe that you will learn it when you have to.
* Reflection - you don't have to __remember it all__, just to know it is there.

Ones finished OR when you start reading _JDBC Database Access_ topic (if you are bored from Java at that point) I would read some SQL, it is a standard language for querying and storing and manipulating data in relational databases which are widely used and which you already have probably used in the JDBC Database access bit of the links above. So if you want to learn more just read the w3c tutorial
 
https://www.w3schools.com/sql/ 

Now at that point you are done with the __CORE Java__, you know what __most University students__ know about Java, you  know more about Java then any other core course that exists and here is where it gets tricky.
 
You see after this point you have to decide what to do and there are 3 options where I would recommend just 1 and this is the point where many people are lost and give up.

You see Java is a general purpose language and you can write everything, however you have to focus on something professionally, it is hard to focus on everything because its a sea of libraries and frameworks and communities, so the options are:

###Option 1 - Mobile Developer
Mobile developer or to become an Android Developer, to write apps for Android and to basically be a Mobile Developer.  Recently Google made Kotlin language first and they announced Flutter where the apps are written in Dart, so I would not advice to go this road. Still if you want to write apps for your mobile android phone start with https://developer.android.com/guide or https://www.tutorialspoint.com/android/

###Option 2 - Enterprise Developer

I would say this is also risky, first of all Java EE 8 will be the last standard Enterprise Edition version of the Java EE, there will be Jakarta EE 9 which is a non standard, eclipse foundation lead endeavour to continue the development and innovation in the Java Enterprise Edition, however no one knows how used Jakarta EE will be, also even this days the Java EE is not that used so I would simply ignore this option If I were you, at least for now.

###Option 3 - Desktop apps developer

The Java desktop apps are dead and I would not bother with them, you have several options SWT, Swing and JavaFX but none of them is used that much, there are no many jobs in the area and I would not recommend you to go there.

###Option 4 - Web Developer

This is the ONLY option you have in reality. You see currently 90% of Java developers are writing Web applications in the enterprise space which uses Spring Frameworks and parts of the Java EE which parts are focused on the web side of things. 

So start reading and writing:

* First https://www.journaldev.com/1854/java-web-application-tutorial-for-beginners is a nice start for writing web apps.

* Then https://docs.spring.io/spring/docs/4.3.16.RELEASE/spring-framework-reference/htmlsingle/ the spring reference guide is amazing but keep in mind you don't need all from it.

_I would read everything from the beginning to the Aspect Oriented Programming (AOP) part._

Then I will jump  to testing: 
* https://docs.spring.io/spring/docs/4.3.16.RELEASE/spring-framework-reference/htmlsingle/#testing 

Ones finished with testing I would start with Data Access: 
* https://docs.spring.io/spring/docs/4.3.16.RELEASE/spring-framework-reference/htmlsingle/#spring-data-tier 

Now you should be able to build a non web application the way it was written for years maybe till 2010ish or something. Spring MVC is part of spring focused on building a better web apps so you should continue with it:
* https://docs.spring.io/spring/docs/4.3.16.RELEASE/spring-framework-reference/htmlsingle/#spring-web 

For the view layer I would read only __JSP__: 
* https://docs.spring.io/spring/docs/4.3.16.RELEASE/spring-framework-reference/htmlsingle/#view-jsp  why ? Because most companies even today still uses JSPs for their views and not thymeleaf or etc. So if you need a SERVER SIDE rendering this is the way to go, otherwise you will do a JavaScript client side rendering but this is not for Java Developers to work on, so the JSPs views are completely fine for a Junior developer.

And lastly I would also read about JSP Expression Language and JSTL 
* https://www.tutorialspoint.com/jsp/jsp_expression_language.htm which are heavilly used in a the JSPs.

## That's all
That's all indeed you are READY, not kidding for about between 1 and 3 months you should be GOOD. Also carrier advice - you should have created several examples and projects with this technologies and highly recommend to push them all in github.com . This days no one is actually reading your CV, most people just check what you have written in github especially for Junior Developers. And yes you will need git in order to push and publish your projects for the world to see https://git-scm.com/book/en/v1/Getting-Started-Git-Basics

That's all folks. I hope this will be helpful for some of you and go out get a job, you have learned Java ! And on top of that - you don't have to go out.

![Dilbert](https://thepracticaldev.s3.amazonaws.com/i/6styso3zxmbygip7eome.jpg)