DEV Community

loading...

Discussion on: What programming language should I learn next?

Collapse
gabrielfallen profile image
Alexander Tchitchigin

extending my overall programming and engineering skills

unfortunately largely contradicts

solid tech in my stack with a promising future

Thus I'll first make a list for the first requirement, and then a separate one for the second.

First, important aside. To very large extent "engineering skills" are completely independent from particular programming languages. There's a whole (research) field of "Software Engineering" that pretends to be language-independent, though to my taste it (has been) concentrating and revolving around OO-design and languages too much. Anyway, from 30000 feet Software Engineering is comprised of Requirements Engineering, Software Architecture, Quality Assurance (Software Testing, but also Verification and Validation) and overall Project Lifecycle and Management. There are books and books on each of these topics, and learning any and all of them will make you much better developer.

All right, enough of boring stuff let's talk about languages! A list of select languages to make you "think different" and become a better programmer:

  1. Scheme (Racket)
  2. Prolog (PiCat)
  3. Haskell

The order is mostly irrelevant, though the first two being dynamically typed are significantly closer to JavaScript. Some comments on these languages.

You've probably noticed that Functional Programming kinda eats out client-side Web development: React (especially with the Hooks), Redux, Elm and TEA and many less popular technologies. Thus learning a language that basically kickstarted modern FP (Scheme) seems reasonable. Another famous trait of Scheme programming is advanced meta-programming facilities in the form of Hygienic Macros (and we all now know how paramount hygiene is). Racket is a modern Scheme derivative further developing meta-programming facilities and incorporating systems programming features and package management. Not mentioning Contracts, Types (Typed Racket), Laziness (Lazy Racket) and cross-platform IDE with REPL and images support. Though the most valuable thing might be How to Design Programs book that in itself is arguably the best introduction to programming out there.

Even further than Functional Programming down the declarativeness line lies Logic Programming. And Prolog is the father of it all though PiCat is much more modern language incorporating Imperative, Functional and Logic programming with some important extensions like Constraint Programming and Planning. Worth learning especially considering there's a nice book on it.

And Haskell is just a cornerstone of contemporary programming languages, it's so important and distinctive there's a whole host of memes about it. It's the most practical of all research languages and the most pure and mathematical of all practical ones. Due to almost complete functional purity it forces you to really learn the ways of Functional Programming whether you want it or not. Besides arguably modern Functional Programming is all about Type Systems and Effect Systems (for strong reasons) and Haskell is both the testbed and the integration point for the Industry for research in these fields. Additionally to that GHC has one of the most advanced compilers among all of them and one of the most advanced and stable runtime systems (on par with JVM, Erlang and Go).

OK, let's finally talk about future technology.

First of all it depends on how far in the future one looks. If we think 50 years ahead programming as we know it won't be very important and as lucrative as it is now. That future will be dominated by BioTechnology — Genomics, Bioinformatics, Bionics, Neurointerfaces and somewhat biomorphic Artificial (General) Intelligence. But for us it's too late to switch fields as the body of necessary knowledge is huge. I kinda looked at it and got scared.

So the most practical and useful among recent and interesting languages might be Rust. It's a bit hard to learn without knowing C/C++ or Haskell (as it borrows — no pun intended — from both worlds) but many do and many find it to be a pleasure to work with not the least thanks to the tooling. It has pretty strong Web-dev support and expands into Embedded and IoT world, which in itself continues to expand and penetrate both our lives and our industries.

Closer to the client-side Web-dev is WebAssembly which is a success already and going to become much more important and ubiquitous in the near future. Too many languages already can compile to Wasm, but the most prominent are Rust (again) and AssemblyScript (which looks a lot like TypeScript).

For a little bit more distant future technologies (about 10 years give or take) I'd look at Probabilistic Programming (and Probabilistic Programming Languages in particular), Bayesian Inference and Judea Pearl's "the Science of Cause and Effect". I expect it all to make quite a splash going mainstream on that time horizon after overcoming some technical and pragmatical challenges.