= Programming language
{wiki}
A language that allows you to talk to and command a <computer>.
There is only space for two languages at most in the world: the <compiled programming language>[compiled] one, and the <interpreted programming language>[interpreted] one.
For 2020 now, when you have a choice, you must go for:
* <Python> as the interpreted one
* <C++> for compiled
Those two are languages not by any means perfect from a language design point of view, and there are likely already better alternatives, they are only chosen due to a pragmatic tradeoff between ecosystem and familiarity.
Ciro predicts that Python will become like <Fortran> in the future: a legacy hated by most who have moved to <JavaScript> long ago (which is slightly inferior, but too similar, and with too much web dominance to be replaced), but with too much dominance in certain applications like machine learning to be worth replacing, like Fortran dominates certain HPC applications. We'll see. Maybe non performance critical scripting languages are easier to replace.
<C++> however is decent, and is evolving in very good directions in the 2010's, and will remain relevant in the foreseeable future.
<Bash> can also be used when you're lazy. But if the project goes on, you will sooner or later regret that choice.
The language syntax in itself does not matter. All that matters is how many useful libraries and tooling it has.
This is how other languages compare:
* <C (programming language)>[C]: but cannot make a large codebase <DRY> without insanity
* <Ruby (programming language)>[Ruby]: the exact same as Python, and only strong in one domain: <web development>, while Python rules everything else, and is not bad on web either. So just kill Ruby, please.
* <JavaScript>: it is totally fine if <Node.js> destroys <Python> and becomes the ONE scripting language to rule them all since Python and JavaScript are almost equally crappy (although JavaScript is a bit more of course).
One thing must be said tough: `someobject.not_defined_property` silently returning `undefined` rather than blowing up is <bullshit>.
* <Go (language)>: likely a good replacement for <Python>. If the ecosystem gets there, will gladly use it more.
* <Java>: good language, but has an ugly enterprisey ecosystem, Oracle has made/kept the development process too closed, and https://en.wikipedia.org/wiki/Google_v._Oracle_America[API patenting madness on Android just kills if off completely]
* <Haskell>: many have tried to learn some functional stuff, but too hard. Sounds really cool though.
* Rust: sounds cool, you will gladly replace C and C++ with it if the ecosystem ramps up.
* <C>: <Microsoft> is <evil>
* <Tcl>, <Perl (programming language)>: Python killed them way back and is less insane
* <R (programming language)>[R], GNU Octave and any other "<numerical computing language>": all of this is a waste of society's time as explained at: <numerical computing language>{full}
* Swift: Ciro would rather stay away from <Apple> dominated projects if possible since they sell a <closed source> <operating system>
Back to article page