Being a Java
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
- 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
- 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 Java 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?
is a programming language that is strongly typed
, Object Oriented
. It has a philosophy
of Write Once, Run Anywhere
- 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.
- robust & standard for enterprise computing
- good performance, multi threaded
- fewer security risks
- platform independent (WORA)
- 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
- paid commercial license
- large memory footprint
- verbose (compared to Kotlin)
- no functional programming
- desktop is far from native look & feel