DEV Community

Jan Küster 🔥
Jan Küster 🔥

Posted on

What programming language should I learn next?

I am looking forward to learning a new programming language apart from JavaScript. My reasons are mostly extending my overall programming and engineering skills, getting to think from a different perspective but also having a solid tech in my stack with a promising future in the world of software development. Oh, and it should make fun to program with!

In a prior version of this article I did a short (and not well-thought assessment) based on some resources on the web but it turned out to be uninformed and incomplete.

I'd rather like to hear from people here what language is actually joyful to work with (including tools, deployment etc.) and has at the same time a good selection of paradigms, as well as a strong community and extension / package system.

What are your thoughts?

Latest comments (44)

Collapse
 
mullojo profile image
Bob

I would highly recommend Python because it is a really nice language and ecosystem. I learned Python as an engineer who became a Data Scientist for a start-up for about 3 years. I learned JavaScript after Python and it took more effort to learn JavaScript.

There are analytics workloads that can be done in Python to produce data visualizations that are very powerful. It's large growth in recent years puts it in the top 3 languages and probably the #1 scientific computing language. It's the default language in most machine learning (ML) applications now.

JavaScript is now my favorite because it is so core to the web & creating visual anything in a browser, but I will use Python again soon on data analytics workloads that will come from my Meteor app data in MongoDB.

As a Data Scientist, I tried out many many environments for the most productive analytics platform, and I did end up with a favorite called Databricks.

There is a free community edition that you can try/use here: databricks.com/product/faq/communi...

This environment is sufficient to learn most of what you need with Python, although you'd for sure use your local machine too. The Jupyter notebooks are a very popular open-source local alternative to Databricks.

Databricks was built by the creator of Apache Spark, and there are also Python APIs to access all the of the distributed computing resources made available in Spark. This environment makes it really easy to eventually learn Spark & Scala too.
amplab.cs.berkeley.edu/software/ (check out the Amp Lab stack)

Here is how simple it is to connect MongoDB to Databricks and run some ML analysis on the data. This example is in Scala, Scala is a lot like JavaScript in my opinion, so it's also super easy to pick up.
docs.databricks.com/_static/notebo...

Here is a simple Python notebook in Databricks using the Plotly library which I also really like a lot.

Link to Python Notebook

Anyway I hope you enjoy learning any new languages you pick.

Collapse
 
michaelcurrin profile image
Michael Currin • Edited

I second those who said Python.

Collapse
 
slimdestro profile image
D\sTro

JoyFul programming language?
well, every programming language is joyful as soon as you start getting it. i started my career with PHP and HTML/CSS around 8-9 years ago. designing tables, image rendering thru HTML was interesting but when i started first day of PHP, i was almost prepared to leave this field because it was completely new to me. now i enjoy almost all programming language including Go, Python, Rust, Ruby and Frontends.

thing is, making thing joyful is not others job, its yours. you start thinking theres a ghost inside the house, you will find the Ghost.

Collapse
 
gabrielfallen profile image
Alexander Chichigin

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.

Collapse
 
johnshumon profile image
Abu Shumon

Learn RUST

Collapse
 
crenshinibon profile image
Dirk Porsche

Give Go a try, especially if you are dealing with backend, api or command line stuff.

I have worked with many languages and tried a few more. But the simplicity of the language and the amount of things you can do with just Go itself is amazing. You barely need much else. But the community is great as well.

The support in VSCode is great.

The cloud runs on Go (k8s, docker).

...

Collapse
 
leob profile image
leob • Edited

If I look at your stated goals then maybe you could learn a pure FP language like Haskell or Clojure, because it's a totally different paradigm. But they're pretty hard - maybe something like Elixir would be more gentle (very good tooling and a focus on "developer happiness"). Another one I can recommend is Rust (which also supports some FP concepts), that's a very well designed language.

Collapse
 
aryanabsalan profile image
Aryan Absalan • Edited

hey,
Try Typescript and then Angular or react, because you know JavaScript :-)

typescriptlang.org/docs/handbook/b...

Collapse
 
programmerbyday profile image
Arman @programmerByDay

You learnt javascript which is the prominent language for front-end.
I'd say now learn another one that is for back-end mainly.
Between Java and C#, I'd suggest C# as it has lots of cool framework and features with upcoming .NET 5.
By learning that you basically open your way to system designs, mobile development, cross-platform development as well.

Collapse
 
kayis profile image
K

I'm learning Rust right now.

I think, it hits a sweetspot of good DX (nice type-system, docs, community), good performance, and not being bound to one company.