How to learn Java programming?
1. Job focussed
2. What’s the approach?
3. Beginner to Intermediate books
4. Intermediate to Advance books
5. What is the Java Programming Language?

Being a Java software engineer, I’ve often been asked: “What’s a good way of learning Java programming?”
Also, from a career development perspective, I was thinking how I would go about improving my Java and broader programming skills.
What’s the objective?
I think its useful to define some objectives to help target the learning. I think the ultimate goal would be to find a Java programming job. But along the way, it’d be good to develop solid Java skills.
Initial
- Learn Core java and increase proficiency
- Be confident thinking & programming in Java
- Know later versions of Java, eg Java 11, latest Long Term Support (LTS) version
- Get to an Intermediate level of Java
Job focussed
 

- Be familiar with Java Test Driven Development (TDD), for improved code quality. Learn about unit tests, integration tests, etc.
- Learn a framework (eg Spring) to see how frameworks speed up programming
- Learn how to use a build tool (eg Gradle) to easier manage dependencies and build cycle
- Write an App to apply knowledge. Put on github for public viewing
- Write clean code
- Get a Java job
Whats the approach?

- Use a good Integrated Development Environment (IDE) and setup your programming environment
- I like Intellij
- make sure you can write a ‘Hello World‘ program
 
- Depending on your level: start by reading a good book or doing a good course / watch video
- start with fundamentals (core java), then syntax, then idioms
- make sure the book / course has good exercises for each section so you can test your understanding
- don’t worry about frameworks initially. Start learning the language
 
- As your knowledge grows, keep on coding and thinking in that language
- Try to get to an Intermediate level by reading ‘Effective Java‘ and learning Java concurrency
- Learn about Test Driven Development (TDD). I appreciate colleagues that write tests to improve code quality
- Learn a framework (eg Spring)
- Write a Spring Boot Web App in TDD fashion
- Do Java tests and practice interview questions
- Apply for Java jobs (good luck!)
- Contribute to Open Source projects and help the community
Beginner to Intermediate books
- Java: A Step-by-Step Guide for Absolute Beginners (Bell, 2019)
- Beginning Programming with Java For Dummies 5th Ed (Burd, 2017)
- Learn Java in One Day and Learn It Well (Chan, 2016)
- Thinking in Java 4th Ed (Eckel, 2006)
- Core Java Volume 1 – Fundamentals, 11th Ed (Horstmann, 2018): updated to Java SE 9, 10, 11
- Core Java SE 9 for the Impatient 2nd Ed (Horstmann, 2017)
- Head First Java 2nd Ed (Sierra, Bates, 2005): good but dated, only up to Java SE 5
- Test Driven: TDD and Acceptance TDD for Java Developers (Koskela, 2007)
Intermediate to Advance books
- Effective Java 3rd Ed (Bloch, 2017): updated to Java SE 7, 8, 9
- Java Concurrency in Practise 1st Ed (Goetz, 2006)
- Clean Code: A Handbook of Agile Software Craftsmanship 1st Ed (Martin, 2008)
- Java Performance: The Definitive Guide 1st Ed (Oaks, 2014): garbage collection, JVM, performance tuning
- Reactive Programming with RxJava (Nurkiewicz, 2016)
What is the Java Programming Language?
Java is a programming language that is strongly typed, Object Oriented and imperative. It has a philosophy of Write Once, Run Anywhere (WORA).
Principles
- It must be simple, object-oriented, and familiar.
- It must be robust and secure.
- It must be architecture-neutral and portable.
- It must execute with high performance.
- It must be interpreted, threaded, and dynamic.
Pros
- robust & standard for enterprise computing
- good performance, multi threaded
- fewer security risks
- platform independent (WORA)
- Object Oriented (OO) programming (improved over procedural programming)
- very popular: lots of java engineers, and lots of java jobs
- big and mature community, lots of open source libraries
Cons
- paid commercial license
- large memory footprint
- verbose (compared to Kotlin)
- no functional programming
- desktop is far from native look & feel