Hey @IronRod – multi-decade developer here; I owe you one, so here goes:
@Halono has a good start; from that I would focus on one, add two language ecosystems not mentioned, as well as speak against one in particular, and shy away from another, and just skip past the top choice.
I come from an Assembler / C / C++ / *Basic / other background in the 1990s and then carried that forward to all the main trends in the newer languages
Will start with the bad and move to the great.
This is a flamebait topic usually, so I am going to expect a lot of disagreement. I am trying not to bikeshed and just return the favor here since I still pinch myself when my terminals wake up on their own without a wired button right now.
Skip PHP
that ship has sailed
I have a lot of PHP
code out there but pretty much cannot stand the language ( most C++ like from the list probably though … but replete with gotchas ) … this is a vestigial tail language compared to all the strengths and weaknesses of the others. There will be a lot of fights on this point but I would just say, since this is favor-for-favor, do yourself a favor and just avoid that…
Most of what is going on there is chasing down technical debt and trying to preserve OLD codebases which are rightly rewritten in other languages… and which will be now since ‘AI’ is making that easier and easier. I do not anticipate PHP
being rightly around, but it will likely eek out another 20 lackluster years or so, with all our souls feeling nails on chalkboards until it’s over.
Against
go
is essentially a one-way ecosystem when it comes to prepared packages/libraries, so if you add an application or library, it’s there forever unless you remember everything added and painstakingly remove it. This is a huge pain and especially since go
tends toward telemetry by default, you start to have a network of spies on your drive… whether or not they are running.
Shy away from
rust
is not a sure thing right now; there are awesome applications written in it ( especially Zed
) but it is not very populated compared to the other languages.
It has still not crested the “might mostly be hype” bell-curve … a lot of blood sweat and tears are going into rust
staying or being wiped out, but that is not the environment for a novice/intermediate/cross-over programmer.
Not mentioned and obscure by comparison
Erlang
and Elixr
are radically powerful but very niche by comparison to the other languages. They mostly focus on asynchronous, concurrent, parallel, and somewhat distributed programming.
They are weird though because there is an immutability standard trying to work there, to facilitate the style of development ( a/c/p/d ) but that is a high cognitive price to pay when most people can do everything with Crystal
or even Ruby
and not have to go full-nerd.
Python is kinda compulsory, but not for long
All languages can be translated between each other now using ‘AI’ but Python
is not secure in its position there. It has a lot of underlying drama in the ecosystem and the code is not quite in the same situation as PHP
but not far off when it comes to cultures. Preserving code because it exists is different than advancing. I would not vote for Python
with my blood/sweat/tears.
If I had a green field situation, I would go back to Crystal
and push for that to become a more significant player…
As a fun experiment, in your standard prompts ( if you use LLMs, especially/only local hopefully ) try adding “Give all examples in <language preference>
” … and magically the LLM forgets to push you into Python
by peer-pressure and you see whatever example code in your language of choice. Otherwise you will be seeing a lot of Python
code samples and wrongly feel the world is tending that direction.
Not mentioned but outshines most of the list
Crystal
and Ruby
are very, very closely related; almost identical syntax but semantics are different. One is compiled, one is interpreted. I have a lot of background in both but the one deserving attention these days would be Crystal
more than Ruby
because the power of “Rubyiod” languages that is compiled is just mindblowingly awesome and pretty much ends the debate of whether to consider Rust
and Go
… both those are dwarfed by Crystal
when it comes to overall developer experience ( see: “The Joy of Ruby”
)
Crystal
is also not tied to one BDFL who is a bit too eccentric. There are many other high-tent-posts in Ruby
but they all kinda cheat toward the same eccentricity by deference versus Crystal
which is not anything like that.
What is great in the new design modalities is that is not a choice of “which language” but “which languages” so I do anticipate removing pieces of my infrastructure and re-coding them in Crystal
( see: ‘AI’ ) when performance really becomes an issue. That is a benefit of designing for language agnostic strategies, where you can have many languages in one “system” design.
Crystal
( like Ruby
) has an awesome library/package management system and really shines ( pun intended ) but it is a bit more hard-core than most people can handle… Coming from C++ though you have the seriousness probably, versus just wanting to move icons around and change colors on components.
What will go the furthest with the most tailwind is TS/JS
Compared to all the others mentioned, Typescript
which is really Javascript
with more strictness ( but still JS
once processed ) pretty much wins hands-down on community liveliness right now, in terms of immediately usable code.
There are many alternatives for the same thing without a ton of cross-talk and drama… Real diversity rather than yet-another-this-or-that.
The package management is much better than all the others, arguably, with alternatives for the same basic functionality on that also.
Picture that like having a choice between apt
and snap
and flatpak
( and rpm
) on the OS level, but for code.
Mostly you will see npm
and yarn
which both use https://npmjs.com packages through different CLI tools, and both/all using the same package.json
conventions without clobbering each other too badly.
The most impact is likely in TS/JS but the floor underneath is shifting.
If you are aesthetic as well as pragmatic in mentality, you will love TS/JS; it goes right to the edge of the current conceptions of UI and has cross-platform capabilities without fuss… but also without efficiency unless you refactor to hyper-native. But that too is usually not necessary since PWA
is the new silver-bullet modality. The entire concept of what an “application” is is in transition, and most of my designs expect a single system to be really three major applications behaving as if one… and one of the applications much also be several more within a cluster.
Docker
and other containerization ( but mostly Docker
) goes hand-in-hand with ‘programming’ now, and you are pretty much always talking about releasing a container, unless you are in a niche. This is a generalization but it is pretty much bearing up under scrutiny.
A lot of major languages not yet mentioned, but what matters most is the underlying concepts expressed in the various languages better or worse, depending on the purpose. This is the same as with OSs which make hardware usable and you really need to understand the hardware concepts then pick an OS for the concepts you require.
Most coders these days are losing that concept-depth aspect as ‘AI’ becomes their cognitive ability more and more directly. If possible, try to think about what you think about, then what you want to do with what you think about. A lot of the very abstract stuff is just plain lost on the current generations and is sad to see leaving, but also awesome to mop up.
As was closed on in the post above… the real question is:
What do you want to do with code?
That ought to determine >80% of what language… if not >90%. Usually. I try for more of a ~20% bias toward enjoyment of the experience, then ~70% utility and ~10% pure network-effect, judging by ecosystem momentum. That factor of having a tail-wind and ease of up-take for new ideas is key, and is an x-factor.
Especially for that reason, TS/JS
is versatile enough that if you get in there, you can pivot into any direction pretty easily. It is “layin’ in the cut” within programming right now, with the most activity to watch and take cues from, or jump in and support… TS/JS
is the middle of the field and sort of the Queen
in chess… Can move in all directions as far as you want.
The other languages, even if not obscure, are more crufty and alien feeling, in terms of syntax/semantics, with Crystal
or Ruby
winning the “feel” category.