Monday, May 6, 2019

How to become a better Java Programmer?

First of all, wish you very happy new year guys. It's that time of year when we start afresh, make plans, set goals and make resolutions for the new year. Being a Java developer and author of a Java blog, I frequently receive a  lot of request from Java programmers from all over the world about how they can improve themselves? How they can become a better Java developer and do well in their job and career. In the past, I have shared my 10 tips to become a better programmer and every tip on that article still holds true but given it's a new year. I have decided to jot down some new resolutions for Java programmers to improve themselves, enhance their knowledge on Java Programming and increase their value for future career growth.

So without wasting any more time, let's see what are 5 resolutions for Java Programmers in the new year, 2019.

Before going into details about why these resolutions are important and how they will help you to become a better developer and do well in your career, let's see the 5 resolutions of Java programmers for this year:
  • Learn JVM internals and Java Performance Tuning
  • Write Code Every day
  • Profile Your Java application once a month
  • Participate in Programming challenges
  • Learn Socket Programming in Java
Now, let's see them in detail and understand how these resolutions will help you become a better Java developer in the year 2019.





1) Learn JVM internals and Java Performance Tuning

I have taken more than 50 interviews for senior Java developers and one skill which I have clearly seen lacking is knowledge and understanding about JVM internals, GC behaviors, and Java Performance Tuning.

As your Java experience grows and you become a Senior Java developer with more than 5 to 6 years of experience, it's expected from you to have both big picture and small details about fundamentals.

If you can't profile an application or cannot figure out why it's slow or how to make it fast then you should read a good book on JVM internals and performance tuning.

If you are serious about this topic I  I suggest you take a look at Understanding the Java Virtual Machine series of courses on Pluarlsight, which explains memory management, class loading, Security, and Reflection.

Learn JVM Architecture in 2016

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.

If you like books, you can choose anyone from my list of 5 great books on Java Performance, but one book which is clearly the most up-to-date and highly recommended by Java community is the Scott Oaks' best seller Java Performance the Definitive Guide.

I have read it a couple of times and still refer to it whenever I get time.



2) Write Code Every day


Another thing I noticed last year is as your experience grows you spend your time on coordination, replying email, being catalyst, troubleshooter, mentor, and a project manager kind of guy.

What you left behind is coding, which is the single most important skill for a Programmer. If you feel that you are not doing enough coding then make a resolution to code every day.

At least, write something, be it on your project, an open source framework, a library or a utility. Since starting is the most difficult thing, I suggest any time you feel resistance, start reading and refactoring code for fun.

You will enjoy that and in the process, you will also write code. You can also solve problems given Cracking the Coding Interview, 189 Programming Questions.

This will not only make you're ready for the interview but also improve your knowledge of the data structure, algorithms, and programming logic.

Write code every day programmer resolution


If you like, you can also check this list of 50+ Data Structure and Algorithms Interview Questions, where I have summarized a lot of frequently asked algorithms questions from interviews.



3) Profile Your Java application once a month

This resolution is attached with the first resolution about reading a good book on JVM internals and performance tuning. Just reading the book will not be enough unless you apply that knowledge to your live project.

I suggest you profile your Java application, at least, a month and spend a good time understanding and analyzing the result.

You can also take a heap dump of your Java processor if you have a recent crash of your Java application then take that heap dump and find out which object is taking most of the memory, is there a memory leak in Java application?

What is the cause of slowness of your application? What will happen if another 100,000 new clients will access your application? If you can answer all these questions comfortably then you are in good shape.

If you need some guidance on solving memory and CPU issues, I suggest you take a look at Understanding and Solving Java Memory Problems by Richard Warburton.


Understanding and Solving Java Memory Problems free course





4) Participate in Programming challenges

This goal is again somewhat related to our second resolution, write code every day. Sometimes, you don't have enough chances in your live project to code.

If you are starving for challenging code then there is nothing better than participating in programming and coding challenge.

There are many websites on the internet which host programming challenge and gives you the opportunity to test your skill but TopCoder is simply the best.

Good site to for Programming challenges
If you are looking for some challenging programming challenges then you can also check out some good websites to practice coding problems.


5) Learn Socket Programming in Java

One more thing which I learned from taking 50+ Java interviews last year is that Java developers need to improve their socket programming and networking fundamentals.

I have asked many questions from my list of Java networking programming questions, but most of the Java developer fail to answer most of them.

Some of them even struggle to outline the key differences between TCP and UDP protocol, which I thought is too basic to ask any Java developer of 2 to 5 years of experience.

If you feel that you have not got enough opportunity to learn Socket Programming in Java or you don't need because you are Java Web developer working in JSP, Servlet and JSF, then also I suggest you to at least read one good book on Java networking, NIO, and socket programming.

One book I highly recommend is TCP/IP Sockets in Java, Second Edition, Practical Guide for Programmers, it's easy to read, interesting and good to build the fundamentals on Socket.

Best book to learn Java Socket Programming


That's all about some resolutions for Java Programmers. If you are a Java programmer with a couple of years of experience, you can also take inspiration from this list to set your goal.

I have purposefully kept it simple and achievable because I personally believe that small success lead to big success and setting small goals and achieving them is better than setting a big, impractical goal and failing before kick off.

But, if you want to add more you can always add something like learning a new version of Java like Java 11 or Java 12, learning a new version of Spring like Spring 5 and DevOps in particular. If you are not familiar with tools like Jenkins, Docker, and Kubernetes then you can also add them to your list of resolutions for this year.

So what are you waiting for? write down your resolutions for the new year and share with us. At the end of the year, you can come back here and tell us about how much you achieved.

Further Learning
The Complete Java MasterClass
Spring Framework 5: Beginner to Guru
Learn DevOps: CI/CD using Jenkins and Docker


Other Programming Articles you May like
  • 10 Things Every Java Developer Should Learn (tips)
  • 10 Tools Every Java Developer Should Learn (tools)
  • 10 Articles Every Programmer Must read (see here)
  • 5 Programming language every Programmer should learn (see here)
  • 10 Interview Questions Every Programmer should know (see here)
  • 6 Books to Learn and Master Programming and Coding (see here)
  • 10 Object-Oriented Design Principles Java Programmer should know (read here)
  • 10 Java and Web Development Frameworks for Programmers (frameworks)
  • How to become a DevOps Engineer in 2019? (roadmap)
  • How to become a React JS Developer in 2019? (roadmap)
  • 20 libraries Every Java Developer should know (libraries)

Thanks for reading this article so far. If you like this article then please share with your friends and colleagues. If you have any questions or feedback then please drop a note.

24 comments :

Vineel Kumar Reddy Kovvuri said...

This is exactly what I planned :) what a coincidence! Thanks for the awesome blog

Javin Paul said...

@vineel, thanks for kind words. I hope you achieve your 2016 resolutions with flying colors.

Anonymous said...

Thank you Javin for your valuable guidance..!!

rupesh padhye said...

Explore Java 8

Unknown said...

I didn't have any resolution untill I read this.
Thank you very much for sharing...

Damián Fanaro said...

Share the knowledge is also part of a good senior developer. Thanks for this useful and awesome blog!

Javin Paul said...

@Damian Fanaro, that's true. Senior developer should help junior developers in their team, can answer questions on StackOverFlow, comments on blog. These are nice ways to keep your knowledge current and updated as well.

Javin Paul said...

@rupesh padhye, exploring Java 8 is certainly a good resolutions. Every Java developer now should learn Java 8.

Shashank said...

I totally agree with you.

Torsten Werner said...

explore another JVM language e.g. groovy, scala, kotlin

Anonymous said...

A typo in point number 5.
"differences between TCP and UPD protocol" please change it to UDP

Shimpu Borthakur said...

Mine is to make my basics of everything strong. I believe if your base is strong, everything is stable above it.

Javin Paul said...

@Torsten, exploring Scala or Groovy is definitely a goal worth pursuing, though I am slightly inclined to Groovy, given that you can use it as scripting language.

Javin Paul said...

@Anonymous, thanks for spotting that typo, corrected it now.

Javin Paul said...

@Shimpu, well said, knowing basics is the most important thing. If its time to go back to basics, its time well spent.

Raghu Nair said...

Thanks for this blog

Chinmay Patel said...

You have summed up everything very well. Reading was interesting. But practicing this regularly is important.

Javin Paul said...

@Chinmay, you are right, easier said than done :-) learning is not easy, you need lot of self motivation.

muralinadh pampati said...

Very nice.. best resolutions

abhishekringsia said...

my goal is to read javarevisited every day. I always find new stuff for me .

Javin Paul said...

Thank you abhishek for such a nice comment :-)

Anonymous said...

the internals of JVM are not known because Java has been sold as "you don't need to know about internals... programming is easier... encapsulation makes you reuse code without having knowledge of it..." and all these bullshits

Javin Paul said...

@Anonymous that's true but you need to know as much as possible about JVM, JIT, JVM options, various tools to analyse heap dumps, profilers etc to support a Java application in production.

Dinesh Krishnan said...

Hi,
Thanks for this blog its useful. But regular practicing is very important.

Post a Comment