Today I made a firm choice. The choice that “I would dig deep into something and learn about it in detail”.
Throughout my schooling, I didn’t really interact with my teachers a lot. But in college, I ended up speaking and hearing experiences+advices from some of the teachers. On that note, here is one of the incidents that always haunts me.
It was a windy evening and we were talking to our Compiler Design professor on various things that we were working on and explored during that time like Node.js, npm etc. She was very interested and keen on knowing all the details. She was about to leave the room (for a lecture, I guess) and just before stepping out, she gave an advice that will stay with me forever,
Hey Vishnu. It’s cool that you are doing and exploring a lot of stuff. But, take one thing and try to be the best in it. No matter what it is. If they ask for who is the best in it, then it should be you. That’s what I wish for you to persuade in future. All the best.
This advice flashes to me often, but I never made an effort towards it. But the choice I am making today is a step towards it.
Now that I have decided to learn something deeply, the next question was “What exactly should I learn?”
There are a lot of things that I could start with like Node.js, Implementation of key value store like Redis, Go programming internals etc.
At the end of the day, I decided to learn about Java Virtual Machine (JVM).
I think it one of the oldest things in the world of programming. Come on! It’s been around for lot of years (from even before I was born), there should be some thing about it that makes it to be preferred again and again by programmers and companies.
I think it is very important to spend time with the elders. They have the wisdom and experience that could guide us and more importantly help us identify and judge something in the future.
Here are some points that I find interesting
- JVM is an abstraction and helps us run hardware- and operating system-independent code.
- A wide variety of languages use the JVM. (More on this below)
- JVM could be a good tool to understand concurrency primitives like threads, processes etc. and compare it with others like Go routines.
- Multiple implementations of JVM are present - OpenJDK being the Open Source implementation of it. Check other interesting options here.
When learning about JVM came to mind, the counter thought of exploring erlang VM also arised. But I would like to stick with JVM mainly due to the above reasons and due to the fact that JVM has wide variety of programming languages use it.
- Java - Object Oriented Programming Language
- Scala - Multi-paradigm programming language
- Clojure - Functional Programming Language
Above is the list of three different type of programming languages which are used in a lot of production systems today. JVM is the secret sauce that enables all of them. I am interested in knowing what exactly in the JVM allows completely orthogonal programming styles (Java vs Clojure) to co-exist and use the same JVM.
I don’t know if I want to be the best. I don’t even know if it is even possible to quantify “best” in programming.
But I would definitely like to visit the old to understand the new.