Got the first email from my mentee on the Coding Black Females Fellowship. She wanted to know a bit about several languages, so it was the perfect excuse to rant about many things. Here is what I wrote:
C is a "low level" language. that is, the code you write is very close to what the machine actually executes. You have to specify almost everything. That means that in the end the program does exactly what you say.... which is very hard to get completely right. It's one of the fastest, because the end code doesn't do anything you haven't explicitly written, but that also means if you get lazy and take shortcuts you can end up with bad or even slow results.
C++ was originally "C plus objects", but now it's a huge thing. almost anything that any other language does is also there. I used to use it many years ago, but got disconnected... I've tried a few times to get back to speed on it, but it's SO_BIG... still consider it a very worthwhile goal. In theory it's as fast as C, and usually better, since there's a lot of things already done with high quality code.
Lua it's not so well known. it's a "minimalistic" language, in that the whole reference is a single webpage that you can easily read in a couple of hours. It's very powerful because the few concepts have been carefully chosen to be able to easily express common patterns. For example, there's no "object oriented" facilities, but you can still create them in just a couple of lines instead of relying on special keywords. It's what most of Kong Gateway (the core product I work on) is written on. It's also widely used as an "embedded" language, that is, inside some other application to make it programmable. The most known example is in games. Lots of games are written in C++ to handle the graphics and controls, but also include a Lua environment and everything that defines the "behaviour" of the characters, animations, strategy rules, levels, etc. is written in Lua. Some of them allow the users to add their own game modules writing Lua code.
Python is also a "big" language, but still very beginner friendly. That's because there are many basic elements, but they are easy to put together to solve problems. The official documentation is very good and easy to read once you get the hang of it. It has a long history on web backends (that is, the part that runs on the server, not on the browser), so there are many high quality frameworks to write website and web applications, typically in front of a database system. That required a lot of development to access and manage data, which recently resulted in a huge growth in data mining, data science and machine learning.
Javascript is called "the language of the web", because it's the only language that runs on browsers. At first it was only used to make web pages a bit more interactive, but after lots of research in compiler technology, it became possible to run it much, much faster than what it was originally expected (around 2-10 times slower than C, instead of many thousands of times slower), so now it's possible to write absolutely anything in Javascript. Here I have some personal and unpopular opinions, in short, I consider the language mostly OK, with some very nice touches, but the general environment is (again just in my opinion) completely broken. But don't let me discourage you if you're interested in web front ends. I guess the best advice I can give about Javascript is to not believe anything I say about it.
Rust is a newcomer and still evolving, but it has gathered a lot of goodwill. It promises to be "as fast as C but safe", with some powerful ideas that allow the compiler to detect and reject a wide range of dangerous errors common in low level languages. High level languages (like Lua, Python, Javascript) avoid those problems by continuously checking that the values are somehow "sane", but with a heavy cost in performance. Some languages (like Javascript or some versions of Lua) can get back performance by detecting that the checks aren't necessary on some parts, but that's hard to get consistently, so the programs keep working but can become slower unexpectedly. The promise of Rust is to do those checks while programming, so the final program is as fast as possible. The downside is that the code must be very explicit in complying with complex conditions. It can be argued that good programmers should do that work anyway, but usually don't.
Java was a previous experiment on "safe but fast" language. It is actually very fast (typically 50-90% of C performance), but the safety improvements relative to C++ were limited. There's a huge ecosystem of libraries and frameworks, but many of them are about specific things. Like enterprise management web applications, or text editors, or geological probes data crunching.
Go (or golang, to make it easier to search) was created by Google and it shows. It's a very readable code, many people that like Python find it likeable too, even if the original objective was to replace C++ within Google. It's designed and very appropriate to write "microservices", small programs that do things by network commands or queries. Somehow it has also become the most used on "cloud" infrastructure. that is, the myriad little programs that manage the execution, migration, communication, administration, etc. of the data and programs that developers put "in the cloud".
Those are some of the most well known. I also have a few favorites that are less common, but I still want to mention
Dart was also created at Google, initially it was supposed to be a replacement for Javascript. It is not only a much more sane and clean language, but also much more maintainable and has great tools for development. The idea of replacing Javascript was abandoned, instead now it can either be compiled to executable code to run standalone, or compiled to Javascript to run in a browser. A few years ago, Google created Flutter, which is a very complete and high performance framework to create apps in Dart. Initially was for both iOS and Android but now it works very nicely for web, windows, mac and Linux too. I haven't really used it yet, but any time I think I'd like to write anything front-end'ish, I think I'd like to use it.
Zig started as a personal project by a lone developer. It's supposed to be able to replace C with the same low level feel and high performance, but with some more modern feel. It's somewhat "safer", but mostly because it makes it easier to do safe things and not because it tries to detect and block unsafe things like Rust. I find it really enjoyable, and in fact most days I "unwind" by writing some small projects in Zig after work hours, just to relax.
there are many, many others that deserve mention:
PHP: used to be the easiest way to write websites, but the evolution has been somewhat messy. It's not "hip" anymore, but in fact it's still heavily used (Facebook!, Wordpress!)
Perl was a big one in text processing just before the web got popular, so it was also used for websites for a while, until PHP displaced it. Most people consider it obsolete, but it's still evolving. The biggest drawback is that it's easy to write unmaintanable code.
Assembly language. it's (almost) the "machine language", the only code that is actually executed by the CPU. There are very few reasons to write by hand because usually the compilers do it much better but; who will write the compilers if nobody knows it? In my case I do use it not for writing but for debugging. Sometimes I have to check what assembly code was generated from the Lua code we write. Either to verify optimizations or sometimes to find a bug in the language itself.
Lisp. a real oldie. it was the original "artificial intelligence" language back in the 50's. it's so different and seldom practical, but it was the pioneer in so many aspects that are still being rediscovered. there are many variants, but my personal favorite is Scheme. As said, it's rarely practical, but in the few cases where I've been able to write something significant in it, it brings so much joy...
Haskell. another weird one, but there are a few real world uses. I keep meaning to learn to write it but never find the time or a solid excuse. It's not as old, but it also created many things that are new in other aspects, mostly about complex, expressive and strong typing systems.
HTML (plus CSS). if you search for "is HTML a programming language" you'll find lots of heated discussions about elitism, gatekeeping, snobbery, and so on. In my opinion it's absolutely in no way anything like a programming language, but it requires a very similar mindset so the actual work of writing is almost indistinguishable from programming. Also, since it's very rarely used without Javascript, in the end it's written by developers. In the end, what I don't understand is why it's "offensive" to say it's not a programming language.