This post was originally published through 'The String' on September 2.
I have been spending hours upon hours in twitter rabbit holes trying to understand which language to pick when I started my learning journey in tech.
The key questions I asked myself were were pretty straight forward:
- How useful is it?
- Will I be able to build cool stuff?
- How easy is it to learn?
They really triggered my curiosity and I wanted to understand more about what truly makes a good programming language.
Starting On A High Level - With A Purpose
Doing a simple google search will leave us with some obvious answers like:
- Good readability
- Easy to learn
- Recognizable by other fellow humans
… and so on.
Those have all been created based on the requirement of being platform independent, meaning you can write it and run it on different types of machines.
Minecraft is and example of a Java-based game that you can run on both a Mac device and a Windows machine.
What all these different programming languages have in common is that they all started with a specific purpose.
And as time flies and the tech evolution continues, programming languages have to adapt and be updated.
New problems emerge, new demands arise and the languages need to be more effective, adaptable and understandable.
So, selecting a programming language is not only an individual decision to make you thrive, but also a business decision. Choosing the right one(s) is crucial for your business success but also directs how nimble you are when new industry standards arise, regulations apply and but also how new user behaviors evolves.
John Carmack’s view, that he shares in the discussion with Lex Fridman (the question is asked at 11:23) is that a good approach is to apply minimum amount of languages to your stack to avoid unnecessary complexity.
The best programming language is the one that you currently use. - John Carmack
Staying in one language so that everyone can collaborate effectively through your project seems to be a great place to be in.
But sticking to one and the same is not always the case for many teams and organisations and even the biggest players in tech seem to fall into the trap of mixing too many languages.
Take Spotify for example, they have a reasonable amount of technologies enabling the product to serve millions of users worldwide.
Creative Constraints, Or Creative Sparks?
Software development is a creative craft. Having a toolbox and working with languages that spark your creativity is key to enable you to build great programs, systems and solutions that serve a higher purpose.
It is worth investigating sometimes on how much creative room is there?
Take your current project or situation and ask yourself; which possibilities are there to build that new functionality? Are there more than one way to do it?
Can I re-write that function to save up some cognitive load for both me and my team?
In what way can I re-write this code so it is more effective?
Think about it, will your language be the creative constraint between you and your program you are trying to build?
The Infrastructure Around The Language
Another important aspect of identifying a good programming language is to understand the underlying infrastructure.
- How are the available libraries structured?
- What are the ways to deploy?
- How portable is it?
These are all great questions to ask when selecting a programming language and maybe even more important for the decision makers in your organisation to be aware of?
What about garbage collection?
Some of the most influential languages have a smart garbage collection functionality to ease up even more cognitive load for you as a developer.
This seems to be a good thing to factor in when analyzing a “good programming language”.
Some tech bro’s out there may have strong opinions about this since it “makes us lazy” freeing up short term memory space.
In general it seems to be a good thing to have, right? Good thing for the vast majority at least.
By Humans, For Humans... so far
Do you need to earn a PhD to understand the syntax or how much do you need to twist your brain to grasp a single function in the code?
My point is, the program you are building should be reasonably easy to understand what it should do. If there is a huge “language barrier” to get a quick understanding of what your system is up to then you might consider what benefits the language itself has.
Any human being should be able to drill down and be able to read the code and get a good understanding what your program does.
My mentor once mentioned that we can refactor and write as much clean code as we want, but making it too effective may lead us to code that is unreadable and would require us to abstract reasons and logic to make sense of it all.
I wrote about my Java17 upgrade where I updated +30 repositories to make it aligned with new standards (I know Java18 is out since March this year) and one big lesson from that experience is that it was pretty smooth to update each project with the new development kit.
We want to use a language that doesn’t require too much work to adapt to new requirements, standards or regulations.
It’s not just your code, isn’t it?
We want to use a language that is easy for our team mates to understand and dig into, quickly. We want to shorten the feedback loops here to make it easy to maintain our code-base and save up time and energy to focus on other features perhaps.
We don’t want to be stuck with long handovers trying to explain the reason around a certain syntax.
Are there more than one person maintaining it?
This brings us into the power of community.
The Community Around It...
Last but not least. A great thing with us humans is that we create communities around things that are worth nurturing.
A programming language is a big enough domain to be basis for a curious community. A healthy mix of people who don’t only share the same views, but arguing about the best updates, and more.
These communities are usually self-organized by practitioners, new joiners, students and more and they all add on to a healthy, diverse mix of long experience and know-how’s and eager new perspectives derived from upcoming generations.
These are the thoughts we have gone through today on what makes a good programming language. Do not consider it is an extensive list, but rather have it as a get started guide on how to navigate in your own learn to code journey:
- It has a purpose and applicability for Your specific problem/domain.
- It has good infrastructure around it.
- It triggers your creativity.
- It is created for humans so it needs to be easy enough to read, adapt and maintain.
- It has a great community around it to continue the evolution.
Every Friday I send insights & learnings on interesting programming topics. Easily absorbed in 5 min's.
Sign-up below to get the latest issues, day of release.
Maildrops & Articles
Join the group and get a couple of crafted emails and articles per month, on technology and learning.