The Core Java roadmap
Tags: java, codenewbie, programming, beginners
Published: 2021-12-19 07:24:54

Below is a roadmap of topics to learn for absolute beginners to become proficient in general programming in Java.

## The prerequisites

Before starting programming with Java, there are some concepts to understand:
1. Object Oriented Programming concepts - without trying to write any code.
    - Abstraction,
    - Inheritance,
    - Polymorphism,
    - Encapsulation,
    - Classes and Objects.
2. How is Java Write once, run anywhere? - the role of
   - Java Virtual Machine
   - Java Runtime Environment
   - Java Development Kit
   
You can also refer to my post to learn principles of OOP.
{% post abh1navv/principles-of-object-oriented-programming-51k1 %}


##  First steps into Java programming

1. Install Java - Get the latest JDK from Oracle
2. Download and install an IDE for Java - Eclipse or IntelliJ Community.
3. Write a traditional Hello World program in Java.
4. Run the program using the IDE as well as a command line.


##  Learn more about the language

1. Primitive Data types
2. Variables and Constants
3. Operators
4. Blocks and variable scope.
5. Flow control - if, else, switch, for, while, do-while, break, continue, return.
6. Arrays and Strings.


## Get more object oriented

1. Classes and Objects
2. Constructors, methods, and fields.
3. Method overloading and Constructor overloading - why and how.
4. `this` and `super`.
5. Access modifiers - public, private, protected and default.
   (contd.)
6. `static` and `final` keywords - how they apply to classes, methods, and fields.
7. Inheritance, Interfaces and Abstract classes
8. Method overriding and method hiding.
9. Ways to implement polymorphism.
10. Packages and Imports.
11. Reading from standard input


##  More programming concepts

1. How objects are stored in memory - concept of references and mutability.
2. String pooling, manipulating strings, StringBuilder and StringBuffer.
3. Garbage collection
    - how it works and how to control it.
    - finalize() method and its use.


## A little more complex stuff

1. Annotations - start using @ Override, @ SuppressWarnings, @ Deprecated and those used in documentation.
2. Type casting - Implicit/ Explicit and how each of them works
3. Enums.
4. Inner and Anonymous classes.
5. Math and BigInteger classes.
6. Exceptions
    - Error vs Exception.
    - Checked vs Unchecked exceptions.
    - try-catch-finally,
    - throw/throws.
    - try-with-resources.
    - User defined exceptions.
7. Documentation.
8. Varargs.
9. Date/Time APIs
10. Functional interfaces, Streams and Lambdas.


##  Data structures

1. Understand each method of Object class.
2. equals() and hashCode() - the need for them and how to implement them.
3. Generics
    - what they are and why they are useful.
    - define a generic class. E.g. implement a linked list using generics.
4. Collections package
    - List, Set, Map
    - Their use cases.
    - Their implementations and the differences between them.
    - When to use which implementation.
5. Comparator and Comparable.


##  Concurrency

1. Threads and Thread pools.
2. Synchronization and locks.
3. Thread safety and concurrency.
4. Defining and using your own thread classes.

## Bonus: How to learn all this?

**Websites to practice Java**

1. https://www.w3resource.com/java-exercises/
2. https://www.hackerrank.com/domains/java
3. https://www.codecademy.com/learn/learn-java

**Online resources to learn Java**

1. https://www.geeksforgeeks.org/java/
2. https://www.programiz.com/java-programming
3. https://docs.oracle.com/javase/tutorial/java/index.html
4. https://dev.java/learn/

**Books to learn Java**

1. Thinking in Java
2. Head First Java
3. Core Java Volume 1

---

Thanks for reading.
While learning any programming language, it is best to follow a roadmap and learn each topic from multiple resources.

If you want to connect with me, you can find me on Twitter [@abh1navv](https://twitter.com/abh1navv).