To Keep Growing as a Dev, You Should Learn a New Language

This has been my mantra recently. Don’t be loyal to the language you learned first or liked the best!

Thanks to Akshat Giri for the inspiration to write these thoughts out.

Things you’ll learn when you work on a new language:

  • Review your fundamentals — iterators, variable scope, control flow. Most languages are similar, but the differences can point out intricacies in how your language’s compiler works and what’s going on beneath the hood. You’re a better dev when you learn that stuff.
    Also, fluency in programming comes with repetition. Thinking of the code should be the hard part. Writing it should be easy. The more languages you know, the more writing the code is trivial and thinking is the real work.
  • Break your mental models — I code in Python most of the time, so when I switch to a statically typed language, like C, I have to think about completely different problems. “Is an unsigned int going to be enough storage or will I need an unsigned long long?” 
    Of course, Python is thinking about that and allocating space dynamically for me, but there’s value in being forced to think about it in a statically typed language.
  • New paradigms — Following on the heels of the last point, sometimes a new language will completely flip your mental models about programming upside down. If you learn Haskell, for example, you’re going to have to discover functional programming. You’ll use recursion a lot more, and you won’t be able to reassign variables.
    Learning Haskell, even if you won’t use it in your work, fundamentally changes the way you think about code. When you return to other languages, you’ll approach problems more creatively with functional programming in your toolkit.
  • Get exposure to all kinds of new libraries — When you learn a new language, you get new tools and toys to go along with it. A whole world of data science and machine learning opens up to you if you learn Python, for instance. Learning Java (or more recently, Kotlin) gets you into Android app development. Working in C or C++ gets you into the interesting world of embedded systems and high-speed computations where performance matters.

The Trap of Contentment

While you should get really good at one or two main languages for your career, getting content with those languages is a dangerous trap.

This also applies to new libraries and frameworks in a language you already know. If you were a JavaScript developer just a few years ago and you didn’t take the time to learn Angular and then React, your career options have restricted significantly over a short time.

Hunt and Thomas from The Pragmatic Programmer (a book that I love) make the same argument:

“Learn at least one new language every year. Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut. Additionally, learning many languages is far easier now, thanks to the wealth of freely available software on the Internet”

(Hat tip to W Watson for reminding me of this quote!)

The best developers are always learning and testing. They try out new tools and languages frequently, keeping what’s useful and chalking the rest up as a learning experience. If you’re serious about being a great developer, learning new languages and frameworks constantly will be a never-ending quest.