You are on page 1of 1

Programming Become a member Sign in Get started

You have 2 free stories left this month. Sign up and get an extra one for free.

A Study List for Java Developers


Jim Follow
Apr 1, 2019 · 6 min read

Image by b1-foto from Pixabay

I became a Java developer about six years ago. Although I can’t say it’s
every day, but I do enjoy my job a great deal most of the days. What keeps
me motivated is my goal to become better at my job. I think this attitude is
a strong reason for me to make a steady progression thus far in my
career. However, when I look back, I wasted quite some time being
aimless for learning new skills. So, I summarized my learnings from the
past six years or so into a study list below. If it can be of any help to
newcomers, the pleasure is mine.

Write clean code


What do we do most as a Java developer? Right, code. What’s not so
obvious, though, is that you are practicing a craft that is based on certain
principles. Luckily, those principles can be learned. You can find
numerous posts on clean code over the Internet, but I like good old
books. Below are a couple recommendations.

Clean Code (2008), by Robert C. Martin

Effective Java (2017), third edition, by Joshua Bloch

Among all the merits of clean code, one I personally hold the dearest is
brevity. Besides aesthetic reasons, there is a crucial economic reason
behind this merit: A line may be written once, but it will likely be read
many many times by many many developers. The waste by a needless
line will add up over time and may amount to a big cost. And needless to
say, more lines, more bugs.

I developed a practice that helped me greatly to produce clean code.


Basically, pick 100 easy problems from leetcode, try to solve them on
your own, and compare your solution to the best one. In the beginning
you will likely find the best solution only takes one or two lines but yours
takes way more. In that case, study the best solution, understand why
yours differs (or sucks), internalize your learnings, and pass the online
judge for the same problem for 5 times. Gradually you will produce more
and more concise code. I promise.

No one is born a fabulous coder. Learn the principles and practice. You
will get there before you know it.

Master the language and JDK


I am sure all Java developers have gone through a language tutorial of
some sort. But if you have not taken trails from the official Java tutorials,
you are missing out. I recommend all the basic trails except the last two
(deployment and Java certificate), and the following specialized trails:

Custom Networking,

Generics,

JavaBeans,

JDBC Database Access,

JMX,

JAXB,

Reflection, and

Security (a more interesting place for Java Security is actually here,


which is referenced in this trail).

Additionally, check out JDK Tools and Utilities. In particular, pay special
attention to the Troubleshooting Tools section! Those tools may get you
out of a serious trouble down the road. Another good reading is Chapter
17 Threads and Locks from the Java Language Specification. It helped
me strengthen my understanding of concurrency in Java once.

Grasp Gradle
Gradle is becoming THE build tool of choice for Java projects. Your team
may not be using it now, but I can almost guarantee you that it will
become your best friend in your career as a Java developer.

Gradle has been rapidly growing for years. So has been the size of the
docs. I think it is so large now that the docs page looks intimidating to
users, myself included. In contrast, the old versions have a single page of
table of content for Gradle User Guide (eg, v2.5 docs) and the learning
experience was amazing to me. So, my recommendation is, when you
start to navigate through the docs of the latest version, have an old doc
open on the side of the screen and follow the order there when reading
the new docs.

After you spend a few days on the user guide, you often need to consult
the Gradle DSL references. I suggest you read through the Project and
Task pages to see what’s available because they are the two most often
used types in a Gradle build script.

Lastly, I recommend you take the Plugin Development Tutorials. You may
never need to write one for your work, but chances are you have to read
the source code of some in-house plugin in your company to
troubleshoot some mysterious issues. Having experience with Gradle
plugin development will pay good dividend then.

Administrate Jetty
Aside from work, the most significant value of Jetty to me is to serve my
side projects. I have made plenty of side projects, most of which are web
apps. Being able to administrate Jetty gives me great convenience for
that. The official Jetty doc is my learning material of choice.

Play Hadoop
We are in a Big Data era now. That means Hadoop is almost inevitable to
Java developers. It has become increasingly unusual now to write vanilla
map-reduce (MR) job in Java. However, knowing how to write a MR job
in Java is still of good value because you may have to do it once in a
while. More importantly, you may stumble across some issues that
require deep understanding of how Hadoop works in order to
troubleshoot them. For that, I recommend the book, Hadoop: The
Definitive Guide (2015), by Tom White.

Additionally, I suggest you make friends with the official Apache Hadoop
docs.

Know Java EE
I spent a lot time going through the official Java EE tutorial in the early
days of my career. Now when I look back, only a small set of technologies
stay quite relevant today based on my limited experience. However,
going through the tutorial gives me an invaluable overview of the use
cases, common considerations, and the state of the art of Java enterprise
applications. Even though I later found out some Java EE reference
implementations were not the most widely used ones (eg, Spring is way
more popular than Weld for dependency injection), I learned the
fundamental concepts from the tutorial.

If you are still interested, I recommend these parts and chapters.

Part III Chapter 6 Getting Started with Web Applications, especially the Top highlight

first two introductory sections.

Part III Chapter 17 Java Servlet Technology. People hardly code


against the low-level servlet APIs nowadays. Instead, they use
frameworks built on top of the servlet APIs. However, a good
understanding of servlet APIs is still good to have.

Part IV Bean Validation. You may never use the JAVA EE bean
validation technology directly, but the underneath problems it solves
are universal.

Part V Contexts and Dependency Injection for Java EE. Again, you
may never use CDI directly, but it will help you learn the basic
concepts for a dependency injection framework.

Part VI Web Services. This part is especially relevant for server-side


Java developers like myself.

Part VIII Persistence. Very relevant.

Part X Security. I actually haven’t gone through this part yet, but it
looks like an interesting advanced topic.

Use Spring
Like it or not, if you do server-side Java development for the long run,
the Spring framework is almost inevitable. Because I learned CDI first, I
wasn’t fond of Spring initially for some secondary differences (eg, I
preferred CDI interception APIs to Spring AOP APIs). However, because it
was so popular and I had to use it for work, I gradually went through
most parts, if not all, of the Spring framework documentation. However,
since I became good at it, I find it quite friendly to use. Therefore, I
recommend it to you, too.

Aside from the official documentation, there are abundant tutorials for
Spring over the Internet. Ask Google.

Comprehend Zookeeper
Zookeeper is not an obvious skill to learn to most Java developers.
However, it will become extremely important if you need to develop a
distributed system, because Zookeeper solves the critical coordination
problem for you. I can’t express how important Zookeeper is for building
a distributed system in words, but you will appreciate it when you learn
it.

From my own learning experience, I find these resources quite useful:

Chapter 21 Zookeeper, in Hadoop: The Definitive Guide (2015), by


Tom White

The official Apache Zookeeper documentation

Final Notes
By now you can probably tell a couple of things. First, the list is heavily
biased towards server-side Java developers. This is because I am one of
them. Second, it is not necessarily a list for being a good Java developer. I
totally agree with you. To be a good Java developer requires more than
what’s listed. Noticeably you need to have a strong troubleshooting
ability, which takes time to grow. What I recommend is you start by asking
good questions on Stack Overflow. I signed up even before I became a
Java developer. It turns out it was a greatly rewarding decision. I solved
quite a few intricate problems simply by making a good ask there. And I
am sure it will help you, too, when you cannot google yourself out of an
issue when you learn the things listed above.

Thank you for reading!

Java Programming Software Development Self Improvement Coding

1.98K claps 5 responses

WRIT T EN BY
Jim Follow

Software developer who loves coding, teaching, and writing


(https://www.linkedin.com/in/jbtao/)

More From Medium

Creating a Sliding Getting Started With Tweaking your UI Swift 5: How to do


mobile menu in Unity Flutter: An Installation automation logs Async/Await with Result
Kunal Tandon in Developer’s Guide Martin Schneider in FAUN and GCD
Arena Ashok Kumar in Better Michael Long
Programming

Migrating an Angular 1.x T he Politics of Python 1. How To JavaScript: An Gauss-Newton


app to Vue 2.x Programming Introduction algorithm
Matteo Piazza Alex Moltzau 莫战 in Shreyansh implementation from
ODSCJournal scratch
Ossi Myllymäki

Discover Medium Make Medium yours Become a member


Welcome to a place where words matter. On Medium, Follow all the topics you care about, and we’ll deliver the Get unlimited access to the best stories on Medium — and
smart voices and original ideas take center stage - with no best stories for you to your homepage and inbox. Explore support writers while you’re at it. Just $5/month. Upgrade
ads in sight. Watch

About Help Legal

You might also like