A Study List for Java Developers
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,
- JDBC Database Access,
- 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.
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.
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.
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 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.
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.
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
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!