Heater wrote:I'm really into the idea that anyone interested in programming should learn more than one language.
It's going to become immediately apparent that even if you can't easily write new code seriously in some random language, you might have to interact with it in some manner.
"structured programming" idea. Choose 1, namely C.
C has so many ways to get you into trouble unnecessarily that starting out with that is probably not a great idea. Of course you'll end up having to interact with it, so as those times make themselves apparent, it's good to learn.
Then we come to the object oriented languages: Eiffel, C++, Java, C#. Choose one, namely C++.
C++ has the reputation of being everything including the kitchen sink. As a superset of some version of C, it's got a lot of baggage. While there probably is a REPL for it, it's not really oriented towards that.
Then there are the list processing languages: Lisp, Scheme, whatever. Choose one, I have no idea, Scheme is cool.
Nevertheless, I think even MIT switched to bloody Python for its whatever it is course that used to be Scheme. I would argue right now for Clojure. It's available on the JVM and compiled to JavaScript. I think there's even something for the .NET.
Of course various libraries on these various virtual machines can be used by Clojure (or other languages using a similar set up) but there is the brick wall if you've used something available, say, on the JVM but not for JavaScript. I guess don't do that. Walmart Labs and others are using Clojure in production, so it is getting used.
Then there are the functional programming languages: Erlang, Haskel, Lisp...
If you look at the various languages, it seems that there is a possible language universe and the languages basically pick bits from that universe. There's very little truly new under the sun. They often will include this or that done in a different manner, perhaps only slightly different manner, and the real core things that separate languages are not capabilities but how each capability is implemented.
Another language, which is modern and includes a lot of different options, procedural, object orientated and functional is Scala. It is available on the JVM and in JavaScript. Effort has been made to release libraries that work under both VMs. Of course the huge amount of Java code out there that only works on the JVM would have to be avoided to get this portability. One nice thing for the Python haters is that Scala is minimally verbose in syntax but doesn't go off into using the indentation white space to define scope. I hate Python for that.