Disclosure: This post includes affiliate links; I may receive compensation if you purchase products or services from the different links provided in this article.
I often receive emails from my readers about how they can become a better Java developer, what things they should learn, and which area they can work on to become a Rockstar Java developer.
After answering them individually over the last few years, I thought to jot down a couple of points which I think will make you a better Java Programmer and Application developer.
But, before going into that, I would like to stress that a better programmer is always a better Java developer and that's why all the tips I have shared before to improve your programming skill and become a better programmer still holds true.
If you haven't read them yet, you can read it after this article, they will help you to improve your programming and coding skills which is essential to becoming a better Java developer.
This article is totally focused on Java development perspective and I assume you are already good at essential stuff like Coding, Data Structures and Algorithms, and Computer science concepts like Networking, Protocols, Object-oriented programming, etc.
These tips are equally useful for both Core Java developer, I mean Java guys who write server-side applications but not really involved with web development skills like JSP, Servlet, and JEE, as well as for Java Web developer whose primary job is to write web applications using Java technology.
Though, I have left out some web stuff like learning JSF or Servlet 4.0 for another day to keep this list short and simple. Anyway, without any further ado, here are some skills, tips, and suggestions to become a better Java developer in 2020.
If you are looking to accelerate your career and become a better Java programmer, these are skillset that will distinguish you from other programmers.
1. Learn Software Design and Architecture
Software design and architecture are arguably the most important phases of the software development process. Being able to see the big picture and think through the problem at hand, and decide on the right architecture and technology stack to implement your app are crucial skills for any software developer, not just a Java developer.
If you are looking to accelerate your career in 2020 and want to become a senior Java developer companies are sought after, I suggest you learn Software Architecture. If you aspire to become a solution architect then also this skill will help you a lot and distinguish from other developers.
If you need a resource to learn basic stuff about Software design and Architecture then I suggest you check out the Web Application & Software Architecture 101 course on Eductive. It's a great course to learn different architectural patterns like Microservice, client-server, and distributed apps.
To be honest with you, this is the best course for not only senior developers but also every software developer out there as it will expand your thinking process and will you make more confident web developer. There is a significant discount on the course now, and it's available for just $44, original price $79, it's a bit expensive them Udemy courses but worth it.
On the other hand, if you like Educative as a platform, you can also buy a subscription for just $17 per month (50% discount), I have one, and I highly recommend you to get.
2.Learn Containers and DevOps tools (Jenkins, Docker, and Kubernetes)
For a modern Java developer, knowledge of DevOps is essential. He should be at least familiar with continuous integration and continuous deployment and how Jenkins helps to achieve that.
It becomes even more important for senior Java developers who often is responsible for setting coding best practices and creating environments, build scripts and guidelines.
I also suggest you spend time and learn more about DevOps in general and tools like Docker, Chef, Kubernetes, etc along with Maven and Jenkins.
If you need some resources then Learn DevOps: CI/CD with Jenkins using Pipelines and Docker in Udemy is probably the best course to start with. You will not only learn about CI and CD but also about Maven and Jenkins in depth.
3. Learn Spring Framework (Spring Boot)
It's almost imperative nowadays for a Java developer to learn Spring framework as most of the companies prefer to do development using Spring frameworks like Spring MVC, Spring Boot, and Spring Cloud for developing a web application, REST APIs Microservices.
It also promotes best practices like dependency injection and makes your application more testable which is a key requirement for modern-day software.
If you are a new Java developer then I suggest you to start with this Java and Spring tutorial to learn the basics of this awesome framework and if you are already familiar with Spring then you should explore Spring Boot and Spring Cloud for developing next-generation Java application.
If you are looking for some references, then Spring Framework 5: Beginner to Guru is the best course to start with.
4. Learn Unit Testing (JUnit and Mockito)
If there is one common thing which separates a good Java developer from an average Java developer then its the unit testing skill.
A good and professional Java developer almost always write unit tests for his code and if he is really a Rockstar developer you can see that from his code and tests.
Testing has also come a long way now with several tools for unit testing, integration testing and automation testing available to Java developers.
You can spend a good amount of 2020 to hone your testing skill in Java but those who are new to Java world and unit testing, JUnit is the best library to start with. The recent version JUnit 5 is both powerful and flexible and every Java developer should know that.
If you are looking for a good overview of JUnit and unit testing in Java then JUnit and Mockito Crash Courses a perfect to start with. It's not the most up-to-date as it doesn't cover JUnit 5 but still pretty useful for beginners.
5. Learn APIs and Libraries
If you have worked with great Java developers you might have noticed their overall knowledge of Java Ecosystem and APIs forms a major part of it.
Java is the world's most popular and mature programing language and there are tons of libraries and APIs available for doing almost everything possible.
Of course, you are not expected to know all of them but you should be familiar with some key APIs like JSON processing APIs like Jackson and Gson, XML processing APIs like JAXB and Xerces, Unit testing libraries like Mockito and JUnit etc.
If you don't know them you can learn or at least get an overview of them in 2020. To start with you can check out my list of 20 Java libraries every Java developer should know, which covers libraries from key areas like parsing, bytecode manipulation, concurrency, collections etc.
6. Learn JVM Internals
If you are serious about becoming a Rockstar Java Developer then you must spend the time to learn JVM internals e.g. what are different parts of JVM, how they work, JIT, JVM options, Garbage collections, and collectors etc.
If you know JVM well you can write both robust and high-performance Java application and that's what Rockstar Java developers do.
As part of this, you should also learn how to profile your Java application, how to find performance bottlenecks e.g. which objects are taking most of your memories and eating CPUs.
For structured learning, I recommend Understanding the Java Virtual Machine series on Pluralsight. It's very detailed and hands-on course, perfect for curious Java developers.
Btw, you would need a Pluralsight membership to get access this course, which cost around $29 per month or $299 annually (14% discount).
If you don't have Pluralsight membership, I encourage you to get one because it allows you to access their 5000+ online courses on all latest topics like front-end and back-end development, machine learning etc. It also includes interactive quizzes, exercises, and latest certification material.
It's more like Netflix for Software Developers and Since learning is an important part of our job, Plurlasight membership is a great way to stay ahead of your competition.
They also provide a 10-day free trial without any commitment, which is a great way to not just access this course for free but also to check the quality of courses before joining Pluralsight.
For those who prefer books The Definitive Guide to Java Performance by Scott Oaks is a great book to master JVM internals and garbage collection.
6. Learn Design Patterns
If you are writing a Java application from scratch then most of the time you are writing object-oriented code and design patterns are tried and tested solution of common problems.
By knowing and incorporating them into your code you make your application more flexible and easier to change in future.
It also improves overall code quality and documentation because other Java developers are also familiar with design patterns and they will understand your solution rather quickly.
But, don't just focus on code part, understand the spirit and be creative. Use Java 8 features like lambdas and Streams to rewrite patterns like Strategy patterns.
If you are looking for some resources to learn design patterns then this list of design pattern courses is a good place to start with. And, for those who like books, my recommended books on design patterns can be found here.
8. Learn Kotlin
A couple of years of back I read a book called The Well-Grounded Java Developer which highlighted the advantage of becoming a Polyglot programmer.
It inspired me to learn Scala and later I also tried Groovy because of its increased usage in creating build scripts and unit testing.
That experience has helped me a lot and that's why I encourage Java developers to learn a new JVM language. I have blogged about it previously on 3 JVM languages Java developers should learn in 2020 but if you are in hurry, just Learn Kotlin.
It's a great language from JetBrains, the company behind IntelliJ IDEA and also official language for Android development as announced by Google in 2017.
It will not only improve your productivity but also help you to go into Android development area. If you are looking to learn Kotlin in 2020 and looking for some good resource then here is a list of Kotlin courses to start with.
9. Learn Microservices
Architecture is changing constantly and many companies are moving from monolithic application to microservices.
It's high time for Java developers to learn Microservice architecture and how to create Microservices in Java to take advantage of this recent wave.
Fortunately, Spring framework provides Spring Cloud and Spring Boot which greatly simplify microservice development in Java.
If you are looking for course then Master Microservices with Spring Boot and Spring Cloud is a good one to start with.
And, if you prefer books then I suggest you check the Cloud Native Java by Josh Long, which provides a comprehensive guide for developing Java applications for the cloud.
10. Learn Your IDE Better
One of the most important traits of better Java developers is that they are very good on their tools. They not only know more tools than an average developer but also they know their tools well.
Since IDEs like Eclipse, NetBeans, and IntelliJ IDEA are a most important tool for a Java programmer, it makes sense to spend some time to learn better.
You can learn about some plugins which make your task easy or some keyboard shortcuts which helps you to navigate better.
\
Even some small tips help a long way because you use them a lot more than you think. If you are serious about taking your IDE skills to next level and use Eclipse, then I suggest you check Eclipse Debugging Techniques And Tricks on Udemy, a perfect course to improve your knowledge of Eclipse.
11. Learn Java Better
This is the most important thing for a Java developer right now. Java is constantly updated and now with every new version in 6 months, it's a big challenge to keep yourself up-to-date. I have been learning Java 10 features and I know many programmers who have not written a single line of code using Java 8 features like lambdas and Stream API.
Unfortunately, most of them are experienced Java developer with good 7 to 10 years of experience in their belt. I understand that at some point in your career learning becomes slow but if you don't act now you will be left behind.
Almost all Java development job now required Java 8+ skills and if you don't have them, it would be very difficult to do well and perform well in your Java interviews.
Now, if you have made your mind to learn Java but worry about where to start with, I suggest you check The Complete Java MasterClass on Udemy, which will teach you all the basics of Java 8 features and other new features introduced in Java 9, 10, 11 and maybe in Java 12 very soon.
\
And, if you are interested in more advanced, hands-on course then Refactoring Java 8 by Dr. Heinz Kabutz is a good one to join.
That's all about some of my tips to become a better Java developer in 2020. I know it's difficult to follow all these tips and I am not asking to do that, it's simply not practical.
You can focus on more important first e.g. Learning Java 8 and Learning Spring Framework if you haven't known them yet but if you are good at those than you can pick other topics e.g. unit testing, JVM internals, and DevOps.
To start with you need to pick one like learning latest Java featues since Java 8 to Java 13 and commit with that before moving to next tip. If you are looking for some low hanging fruits then learning your IDE better is a good choice.
You already know your IDE and spending some time to learn it better will make you more productive and better Java developer in quick time.
Other Java Articles you may like to explorer:
The 2020 Java Developer RoadMap
10 Tools Every Java Developer Learn in 2020
Top 5 Courses to learn Spring Boot in 2020
10 Programming languages to Learn in 2020
10 Books Java Developers Should Read in 2020
10 Frameworks Java and Web Developer Should learn in 2020
20 Libraries Java developer should know
My favorite free courses to learn Java in depth
Top 5 courses to learn Spring Framework in Depth
10 Free courses to learn Maven, Jenkins, and Docker for Java developers
All the best and don't forget to share your tips which you think have made you a better Java developer.
If you have any suggestion or feedback then you are most welcome, we all learn from each other.
Top comments (23)
Knowledge of Spring will help to be in trend, but Spring itself is an example of poorly designed and even worse implemented piece of technology. Its wide use greatly contributed to recognition of Java as slow and memory hungry language.
P.S. I think Spring is technically obsolete since release of Java 1.5
I must disagree with this statement. Spring is typically ranked somewhere in a middle of the scale of synthetic benchmarks. Which is quite good considering how rich the framework is. The whole Spring ecosystem is one of the best in Java world, making it one of the first choices for enterprise development. Moreover, Spring Boot is also a great choice for rapid prototyping.
I think ktor is better framework. You should be able to have only lightweight code to be working in order to increase the performance and you can turn them on anytime according to requirement, that may increase efficiency of machine too and saves a lot of energy and also better performable.
Number of features is a bad excuse for poor performance.
Let's take a look at Techempower benchmark:
In "Multiple queries" and "Data updates" benchmarks those results achieved with modern webflux-based versions, which are quite far from traditional Spring applications. But even these results are poor compared to Vert.x or Jooby versions, for example. Overall this does not look like "in the middle".
The whole Spring ecosystem is one of the most popular, but popularity does not automatically mean high technical quality. In fact it's happens quite often when technically inferior solutions gets more popular than more technically advanced competition.
Spring was a revolution at the time when it appeared. Heavy use of run-time reflection was completely reasonable by that time, there were just no other way to add necessary functionality. Since Java 1.5, there is a compile-time annotation processing which enables achieving almost the same results without such a run-time overhead. Take a look at, for example, Micronaut framework, in many respects Micronaut is a "Spring done properly".
As for rapid prototyping. There are many much smaller frameworks which are even better for rapid prototyping. Also, quick start with the Spring does not mean quick release of the production version. Spring has many other issues like using exceptions as part of business logic, many ways to do same thing, a lot of "magic" which can easily break (and result to many hours/days of painful debugging), overuse of annotations and so on and so forth. All these makes development of the production version far more painful than it needs to be.
So first: Everyone should be happy with whatever feels right. But spring is still industry standard so it’s absolutely correct to put it on the list.
Regarding its design: I think it’s actually very well designed. Especially if you think about how flexibility it is and how it evolved from XML based DI container to something modern as spring boot without a total rewrite.
Regarding vertx: Vertx actually was very poorly designed, at least until version 3. We had couple of teams and micro services that used vertx for years and all of them migrate to spring boot.
So unless you need that last bit of performance in very specific scenarios (which 95% of the use cases are not), there is no reason to pick vertx over spring.
Agreed. And I'd also like to add, that developers are paid to solve people's problems. Companies pay developers to solve people's problems, too. If you can accomplish this with a smallest investment possible, reach you architectural (quality) goals (which should also be good enough, not better) and keep the maintenance/operational/ support cost reasonable and sustainable, then opting for a framework like Spring is really a good choice. The size of community and the number of extensions says or all.
In other words, "1 million of lemmings can't be wrong".
In fact maintenance/support cost with Spring are quite high and quickly grows as application ages.
From my experience, building business applications in vertx and also spring web flux has 5-10x the costs for writing, reading and maintaining code than spring boot with web mvc. We have used web flux in very limited use cases successfully because we needed the performance there.
You trying to read my answer as if I promote Vert.x. This is not so. And this does not justify use of Spring Boot. If you really can't write async code in Vert.x style (which is definitely not so easy due to used processing model), then there are countless smaller frameworks, which support familiar JAX RS endpoint style. If there is just no way to leave comfort zone, then Micronaut might help as well. As I've mentioned above, it's Spring done properly, with handling at compile time all things which can be handled at compile time, like DI and MVC. And as far as I can see, it is made Spring-like as much as possible.
Spring survived for so long time not because of quality of its design. It survived because of Java great backward compatibility. When backward compatibility was basically broken with Java 9, there is no way for Spring to survive as it is (in regard to design). All those component scans and countless layers of run-time reflection do not work well with modern Java, requiring to open all application packages to Spring and defeating whole purpose of modularization.
Finally few words about performance. You're right, not everybody needs good performance. But I'm looking at performance from other perspective - high performance means that less resources are necessary to handle specific load. Less memory, less CPU, less instances in cloud, less energy. This results to cheaper bills from cloud provider and lower environment impact.
In fact one of the things I don't like in Spring most is that it grew up whole generations of developers who assume:
Phew... do you view yourself as the only smart person amongst millions of mindless spring developer lemmings that understands how bad spring actually is? From my experience, most developers I've met are very smart. And they do always strive to reduce unnecessary work and to automate and simplify stuff in the way. Spring helps a lot with that.
Funny side-note here: I was really hating Spring until Spring Boot came out and avoiding job offers just because of the fact that they were using Spring.
Aside from that, I give that point regarding resource consumption. This is going to be a bigger and bigger issue in cloud scenarios. But also here, Spring is not the issue, neither in memory consumption nor in performance. A plain Spring application does not consume much memory and starts really fast (even with thousands of dependencies and auto-configuration). The JVM however does which is a problem when you are running dozens or hundreds of microservices, each starting a JVM with 100-200MB RAM first. Then, one if not the one important factor regarding start-up time and memory consumption is Hibernate/JPA which people usually blame on Spring.
So if you use plain spring, maybye even Spring-Fu (Functional bean definition) without JPA you can already build a native-image with Graal and get a start-up time of 1ms and a couple MB RAM usage. But if you add all that convenience that makes you faster during development, it's going to be much slower and more memory consuming at the moment.
I find both Micronaut and Quarkus interesting and I follow those projects which are build from the ground-up as cloud native frameworks. But since Spring is also evolving in that direction and has a much much richer ecosystem, I don't think they will take over any time soon.
So coming back to the initial posters topic:
I honestly don't believe, that other frameworks should be put on that list at the moment. However, they definitely belong on a "10 technologies every Java developer should check out" list or similar.
Nope. I'm using Spring for last 10 years or so, and vast majority of Spring devs I've worked with had exactly the same opinion about it. But my argument was not about who is smart and who is not. It was about using Spring popularity as a proof of quality.
You basically just repeated what I wrote above - Spring with it's "majic" is a CPU/Memory hungry bloatware.
Spring should not be in that list either.
Great article man, thanks a lot.
Thx, happy that you find it useful.
Quite beautifully written👏, I wish I could find such an article on Golang.
Thx, happy that you find it useful.
Great article lambda snippet can be even shorter.
(s1, s2) -> s1.length() - s2.length()
This has inspired me to see what I can organize for my team.
Thanks for the resources.
Great article. Just to follow up, is Java still as much a language that's targeted at write once run everywhere or has it become a language for web applications?
Thanks a lot!
This was quite helpful. As a new Java developer I was looking for things to focus on and this article helped narrow it down for me. Thanks
I wish this pandemic accelerate gone , meanwhile I choose to learn Quarkus or Helidon 2.0 framework to accelerate my application services