🔙 All posts

Which programming language should I choose?

Planted July 25, 2020

I’m largely a self-taught developer (I guess even those who studied CS at college are too!). Before I started working with code professionally, I would often get distracted by some thread on the internet that told me about the language I should be learning right now. I’d read a post about how this language was better or that language sucked and change direction. So, I would buy and read a new programming book, enroll in a new MOOC or go down a rabbit hole of learning and reading and thinking.

While I love learning this wasn’t helpful for me. I was living with a strong sense of shiny object syndrome. Never staying long enough to allow the concepts to go deep and to draw deeper understandings. I was stuck in tutorial hell.

As I made the transition to full-time professional (ha!) development things changed.

Finding a map

First, I enrolled in (but didn’t complete #sadface) an online, remote bootcamp. The biggest gain I got from this was realising how all of my previous learning and exploring fit together.

When I visited New York with my American Mom, the first thing we did was take the bus tour around the city. Both of us appreciate building a mental model or map of where things are and how they fit together. We had a much better trip because of this.

During the bootcamp, I realised that I didn’t have a strong model of how the skills, languages and processes I knew fit together. The bootcamp helped me see both what I already knew and where I had gaps. I had a map that allowed me to read those posts from before and, largely, ignore them.

I also was clearer on what I didn’t know and what I needed to learn. I was better equipped to ask more relevant questions and to find the answers.

Yak, yak, yak - get a job!

The second thing that happened was I got a job. I moved from being a teacher to being a developer. I worked for an awesome company that worked mostly with Python, PHP and Javascript (with a smattering of MySQL, Bash, Livecode and all of the configuration languages). Suddenly, I had to go deep on this subset and bend them to my will.

I thought a lot about being a T-shaped developer at that point - going deep on a few points and having a broad grasp of all the pieces of the puzzle. I got some exposure to excellent designs, architecture and development practices.

I was still reading a lot about other’s opinions about programming languages. The devotion to certain languages and frameworks sometimes felt cult-like. I began to reflect and realised that rather than being critical of these opinions, I was forming my own version of them.

Javascript was a toy language - I mean it was made by a guy in 10 days, how could it be any good? PHP is a language for dinosaurs, only boring products and applications are built in it.

But, when I stepped back, I realised I really like working in both those languages. The PHP that people remember is often PHP 5, which was pretty bad to be fair. But, modern PHP (7+) is an excellent and robust language.

Javascript is an awesome language (and one I do most of my paid work in at the moment).

My opinions were strongly held and incorrect - they were making it hard for me to grow and develop. They had to go!

How about now?

Over the past weeks, I’ve been involved in a book group reading the book ”7 Languages in 7 weeks”. We read a chapter each week and meet to talk about the languages for an hour (thanks for organising @laurosilvacom). It’s been a lot of fun and I’ve learn a lot. We’ve looked at Ruby, Io, Prolog, Scala and Erlang, with Clojure and Haskell left to go.

As we’ve been going through the book, I’ve been thinking about why I choose to work in a particular language. I realise this is opinionated and pragmatic but here are my top reasons for using a language:

  1. I know it already.
  2. I can find other developers who know the language, both for support and collaboration.
  3. I can find a community, tutorials and documentation around that language.
  4. Someone else has solved a similar problem using this language.

Languages are written to solve particular problems. Their syntax, approach and paradigm can shape how you perceive problems and how you solve them. You don’t need to know every language intimately but having an awareness can help deepen the grasp you have of your primary one.

Sadly, I don’t speak another human language. I studied French for GCSE and did a year of Irish when I was 11. I can get by in restaurants in French and German but that’s down to the patience and generosity of the serving staff. But, I know that there are idioms and turns of phrase that work in one language but not others. That people who are bi-lingual can call on two ways of describing and seeing the world - deepening their experience. I had a German housemate whose English poetry was so beautiful which he largely put down to his being able to think in two languages.

I see exposing yourself to other programming paradigms as serving a similar purpose.

If you’re just starting out and still haven’t picked a language, I agree with all the advice you’ve probably heard. Namely, build something - pick a project, an API, a problem you had and a language and go for it. Try to avoid tutorial hell and solve your problems rather than the ones presented in posts and books. I’m not going to tell you the best language (because I don’t think it exists) but would encourage you to pick one and do something significant in it.

Try not to buy in to the turf wars between languages (Go vs Rust) or frameworks (React/Angular/Vue) and instead use the tools you have to do amazing things. Join in with the communities that exist and ignore the gatekeepers who can, deliberately or not, undermine your enthusiasm with their loud and unhelpful opinions.

If you’re more experienced, how about trying a new language? Put on the beginners mind and try to solve a familiar problem in an unfamiliar way. See if the idioms of this new and different language can help you to “speak” in new and exciting ways.

I send out a weekly newsletter where I share some of the more powerful learning resources I’ve found in the web. The aim is to help my readers learn and escape tutorial hell, no matter their current level. Sign up below if that sounds interesting to you.

Like what you see?

I send out a (semi) regular newsletter which shares the latest from here and my reading from around the web. Sign up below.

    Your next read?