Developer Musings

moon
sun

What programming language should I learn: or Why it doesn’t matter

📅 June 23, 2017 - 6 min read

Searching ‘What programming language should I learn’ will return you over 7 million results. The first one says Javascript, the next PHP, another extols the virtues of Java and statically typed languages. What even is a statically typed language you might ask? I just want to make apps for my phone!

This is the struggle of beginners learning to program — and even myself, when I was looking for a second language to learn. There is so much noise and no clear path. Now I’m not about to add to all those articles and recommend you another language.

I’m instead going to promote a new idea — IT DOESN’T MATTER. No really! Here me out.

There is no one programming language to rule them all. Although there are many people who vouch that Javascript can be used anywhere and is therefore the best, with React Native for native applications on both mobile and desktop, Node JS on the server and regular plain ol’ Javascript baked right into the browser. It sounds a very compelling argument. And it certainly is. I think Javascript is a great language to learn for anyone. Having said all that however, let’s look at the history of programming languages and frameworks.

According to the TIOBE index, Java is by far, firmly positioned in the number 1 spot. Javascript is on track to eclipse that, but it wasn’t that long ago, that the coolest language on the market was Perl or even Fortran. My point here is that, even though a language seems popular right now, technology is an extremely vicious landscape. Ever changing as preferences ebb and flow and new technologies are favoured for older ones.

Even within the Javascript ecosystem specifically, only a year ago Angular was the thing. Then React came along, and everyone jumped ship. Angular 2 was later released with little interest — Angular 1’s usage continued to dwindle. It can flip in an instant. A number of people were rightfully aggravated that they had spent all this time learning a framework that was now as good as dead.

My point here is this…

Languages and frameworks, come and go. Concepts are here to stay.

Let’s take React as an example here. I am of the opinion that although React is not here to stay. The concepts and underlying principles behind React are definitely here to stay. The way React promotes a hierarchical component structure and flows data through that structure; The way it only re-renders the parts of the components that have had a state change, is all amazing.

Now whether you chose to learn React or not is your choice, but the concepts behind it will soon be applied in other languages. And at that point, if you do understand React, you will be able to adopt that way of thinking when building your application in that languages version of React.

In the wildly successful game Portal, the narrator comments “Now you’re thinking with Portals”. The idea of the saying is that now you’re thinking with the technology you have, in this case the Portal gun which the player users to create two ends of a portal that link between each other.

We can apply this saying to the technology we work with. When you finally crack the concept of how data can travel from your models through to your views, you can say “Now I’m thinking with MVC”.

You’re not a REAL programming if you’re not doing this #obvi (source: [https://xkcd.com/378/](https://xkcd.com/378/))You’re not a REAL programming if you’re not doing this #obvi (source: https://xkcd.com/378/)

Trying to get into this space and become a developer can be a scary place, but fear not! Programming is about the problem solving skills you develop. Not about what shiny syntax you happen to use. Many people use a language that they never used before that job (myself included). When learning to program, you will naturally acquire these skills. It’s something I was told when I first started to learn to code, when I thought to get a job you had to be this NASA-level genius that had made 10 apps and half a dozen website (hint: you don’t need that — it certainly helps though!), I didn’t believe what they had to say. I simply couldn’t fathom this indescribable skill you just ‘acquired’ as if by some miasma. Well, it is true. Trust me.

My piece of specific advise would be to start building things as soon as possible. They don’t have to be amazing, they don’t have to be original. They just have to be something you’d like to try out. Freecodecamp does this excellently in their curriculum. One of my first projects was a calculator. I came to that project because I know how calculators work and I know how add, subtract, divide and multiple work. From my learning of programming, I knew that to keep track of the buttons the user had pushed I could store it in a variable. I knew I would need to hook up the buttons to trigger a function that would do various things. I had almost no idea of the inner workings of the application. But overarchingly I knew the concepts of how it should work. Apply this same principle to things you build and you’ll go far. It’s also great because you get to solve actual problems as if you were on a job. And debugging, like you will in a job. 90% of programming is debugging what you’ve written — so get used to it! Further, doing a project yourself will give you an understanding of what the code does. Many tutorials adopt a “type this, do that” mentality, with little explanation given to what or how this thing works. Take the time to read documentation and truly understand what you are writing.If you don’t right away, that’s ok. Take some time, chew on it, and come back to it later. That’s part of learning these concepts.

As a bonus to all this project building, at the end, you get something cool you can show your Mum, Dad, Cat or beloved family member/pet.

Keep learning. Don’t get discouraged. And have fun, make some cool stuff, programming is like digital wizardry, use your powers!

Additional reading


Josh Ghent

I'm Josh Ghent. I make robust apps for the web. I wrangle code at Capp & Co. I act as lead maintainer of ESFiddle and organize LeicesterJS