Era of Polyglot Programmers


Work from home has become a new norm and even conventional tech companies are slowly adopting the culture. As New York/New Jersey states have likely seen their peaks already,  I write this blog on a somewhat pleasant note. In this blog, I want to address the elephant in the room and put out some of my thoughts and few borrowed ones on "Is it truly necessary to stick to a single language, go deep into it for the rest of your life, or use multiple languages to solve your problems".

I might have mentioned this before that I am a huge fan of 'Fragmented - Android Developer podcast'. The podcast covers mostly Android-specific technical stuff but they sure touch upon general things help to become a good developer. Recently they released an episode called 'Polyglot Programmers' which pushed me to write about the topic. I sort of knew what the term meant, but never really organized my thoughts on the necessity to become a Polyglot Programmer. It sounds like one of those buzz terms, but what it really means is a person having knowledge of multiple languages and this not just applies to programming but also any language in general. We will stick to programming languages for the scope of this blog.

One of the great lines from the episode that I agree 100% - "Software Developers are problem solvers. We are not here to be experts in any particular language. We are here to solve business problems using the right tools at the right job at the right time"I see a trend to undermine people if they google/StackOverflow a way out of any bug or even feature. I think it is completely fine. If someone else has already figured out a solution to your problem, why waste your time unriddling everything again! Instead, use that time to build new things that solve real-world business problems quickly. Use pre-built libraries, see if someone else has already solved your issues. Life is too short to do the rework. As far as learning goes, understand the solution and apply it, you will remember it quickly the next time you face the same problem. TensorFlow or any other machine learning library has a lot of pre-built functionality, you really don't need to understand calculus and complex algorithms to solve your business problems. Build things, get work done, and if there's anything wrong iterate it from there. The feedback system remember?

As far as my experience working with multiple languages goes, I started with old school C++, Java, and embedded C in my college. Picked up HTML, CSS, SQL, and a tiny bit of JavaScript on the way. As I moved to grad school, I was already using multiple DevOps tools in Python, YAML, and Bash in my projects. Sidenote, Bash commands are just so useful wherever you work and get the job done quickly. I also learned Node.js a while back but never really got a chance to work on professionally. Currently, I am back to basics and working on Java backend and Java Android SDK frontend. I am learning Kotlin as well because of Android and JVM compatibility and I already feel like it has started becoming my favorite. Kotlin has everything a modern programmer can ask for that's not available in Java. It is not dynamically typed (this is for JavaScript haters), the verbosity is incredibly less and it has so many cool things. For eg. you can use forEachIndexed() for streams as compared to forEach in Java,  varying arguments for functions, default parameter values without using Builder pattern and the list goes on.  To sum up, I picked up languages to get work done and not to be an expert in one particular language. Software Engineering changes so much every day and the resources keep getting updated every single second, it is extremely hard to pick up everything. So take a step back and understand the fact that sometimes not knowing everything is okay!

Now talking about the career aspects, often when I interview people, I tend to be language agnostic and try to understand a candidate's logical ability to solve problems. But to be honest, knowing multiple languages does increase your employability chances and gives you considerable edge compared to others. Consider this, If you have known one language for the longest time and suddenly the licensing agreements change in the next version! Next thing you know, nobody wants to hire someone with that skillset. Knowing multiple languages keeps you in much better shape and ready to face the situation. As a Software Engineer, the learning process should never stop, if it does then there's something wrong.

Now that you know the importance of being a Polyglot Programmer, and you want to start learning a new language, which one should you pick? These wise words come from the Podcast - "What interests you? Frontend development? Server-Side programming? Low-level programming? Data Analysis? What makes you productive? Go and learn that!" If you have worked on statically typed JVM related languages, go and learn JavaScript, Ruby, or even Python. It will just give you a whole different perspective on problem-solving. Coming from the background of statically typed languages, I avoided JavaScript for a long time. When I took JavaScript seriously, it just blew my mind and opened new dimensions in my head. One more thing I want to slip in, if I am learning a new language, I can't just sit and watch videos on syntax basics such as data types, control statements, data structures, libraries, etc. That type of learning methodology is just not right for me! I just start building a project in it and that keeps me motivated to learn it.

To quote fragmented guys one last time before ending this blog - "What does learning a new language exactly mean? It means you know a way to build things in it and how to figure stuff out as you go along". Remember this and happy coding!

PS -  Please check out the 'Fragmented - Android Developer podcast' latest episodes. Just google them, they are famous! :) Also check out following few articles I found interesting -
Send me any other blogs/podcasts/books that you find interesting. Thanks and stay tuned!

Comments

Popular Posts