-
Java SE: Oracle releases new Java SE versions every 6 months, on March and September, but some of these are long-term supported versions. Enterprises typically use these LTS versions, hopefully the latest available. As of this writing, the latest Java LTS version is Java 17, which you have to download from Oracle download's site and install.
-
Integrated Development Environment (IDE): This is a tool you'll use in your daily work as a developer. I've tried Eclipse, NetBeans, and IntelliJ Idea, and I recommend you to download IntelliJ Idea, the community edition doesn't require paying a license to use it.
-
Version control program (Git): Git is a version control program developed by Linux Torvalds (Linux OS creator) which is commonly used to keep track of source code versions. It can be downloaded here. In that same website you can read (or download) an ebook about Git, but I'd recommend first having a look at two common ways of working with Git:
- feature branch workflow it's used frequently
- trunk based development it's not used that often, but also worth knowing
Java Virtual Machine (JVM), Java Runtime Environment (JRE), Java Development Kit (JDK), Java Standard Edition (SE) and JakartaEE
Java is a compiled language that, unlike C/C++ programs (which have to be compiled for a specific CPU like x86_64 or arm64), runs in the Java Virtual Machine (JVM). Time ago, Java could be downloaded from Oracle as either the Java Runtime Environment (JRE), which only comprised the JVM necessary to run Java compiled programs, or as the Java Development Kit (JDK) which not only contains the JVM, but also the Java compiler as well as other tools.
Finally, Java programming language is a rich ecosystem, and there have been several tools/frameworks built on top of it, to ease development and deployment of enterprise applications, for instance JakartaEE (previously named JavaEE and even J2EE) or Spring
The Java ecosystem is wide, and there are many terms and concepts that can (and they did for me at the beginning) overwhelm
you. Before starting you journey, take a look at the image below, it maps concepts and skills common to developers and to Java:
I'd start with Java (start), get familiar with the Java Language Specification (JLS). The JLS is too "dry" to learn Java from, but it's the ultimate source of truth in case of doubt.
When you start writing your first Java programs, use an IDE (Integrated Development Environment). I'd recommend IntelliJ Idea (the community edition is free to use, if not, your local Java Users Group might help you get a license for it). It's not necessary to get Oracle's Certificate of professional Programmer (OCP), but review the list of topics that you would have to know in order to pass the certification exam, it's a good starting point on what are the most important things to learn from the Java Language Specification (JLS).
Once you know the basics of Java language, then follow up with Java (pro) and at the same time gain familiarity with the other tools and processes: Version control with Git, Building with Gradle or Maven (you will have to work with both of them, but I think Gradle might be easier to start with), and also the Team organization tools (Jira, Agile mindset, code reviews, Pull requests, code style and static code analysis tools).
- Java Language Specification (JLS)
- Oracle Java tutorials
- A website with exercises for different programming languages has a Java track (registration required, but free to use): Exercism
- Freecodecamp.org Youtube video explaining the Java basics
- Another set of videos to learn Java basics.
- If you're more into reading books, I'd recommend Cay Horstmann's Core Java books (there are two, first volume is the "Fundamentals", and volume 2 is the "Advanced")
I suggest you to learn to compile and execute Java application manually, executing javac
and java
before leaning on
an IDE to do that for you. An IDE offers many advantages, like syntax checking, code navigation, dependencies and many more.
Here are a few IDEs to choose from:
- IntelliJ Idea by JetBrains is my favourite integrated development editor (I've tried Eclipse and Netbeans in my career). It is very well documented.
- NetBeans is also a good IDE which I used for many years.
- VS code supports most of the frontend languages out of the box, and Java through an extension. I haven't used it personally.
Nowadays, there's only one version control program worth mentioning: Git. It was developed by Linus Torvalds, and has superseded other older version control programs like Subversion or CVS. Here is a good introduction to Git, and the online documentation in Git's website is also worth checking, there's even the "Pro Git" book available there.
I learnt these while I was actively writing programs. I don't think these topics are easy to learn just from a theoretical point of view, it's better if you can learn them while you write Java programs.
- Data structures & Algorithms: honestly, for most of the day to day programs you will only need to know about ArrayList, HashSet, HashMap and TreeMap. But it's still good to know about other, more specialized data structures and how they compare to each other in terms of efficiency, and when they are best used. In order to understand the differences, you will have to know what "Big O notation" is (for instance is well explained in this blog post). I used Robert Lafore's "Data Structures and Algorithms in Java" book but there are many online blogs, or videos (like this, about data structures), and even some funny videos explaining these algorithms.
- There's a great book by Joshua Block, "Effective Java" which gives very good advice on how to write real good Java code.
- Another good book on how to write high quality Java code is Martin Fowler's "Refactoring: Improving the Design of Existing Code". It's in its 2nd edition now (has examples in Javascript), but the first edition from 1999 does have examples in Java code.
- The third book I'd recommend reading is Erich Gamma et.al. "Design Patterns: Elements of Reusable Object-Oriented Software". It contains examples of commonly used patterns in Java programs, and when are they used. These design patterns can also be checked online.