This makes it even harder for me to decide what to learn for my next programming language. Go, Rust, or Julia.
This makes it even harder for me to decide what to learn for my next programming language. Go, Rust, or Julia.
If you want something halfway between Go and Rust, I'd look at Gleam--it seems like a garbage collected Rust, so you get a nice ML-inspired type system without the pedantry of the borrow-checker (sometimes that pedantry is helpful, but rarely so for the applications I write). This would be next on my list of languages to learn.
Also, my favorite way to learn a new language is to write a static site generator. It will take you through a tour of the standard library as well as the third-party library ecosystem. It's a simple project without being a toy.
Don't get me wrong: Go is a really good language, and eminently practical (and I am ATM working on getting productive with it myself) , but it doesn't have anything particularly novel to teach you, and part of what makes it good is that it's really easy to pick up, so it's something that you can just learn on the fly if you need to.
Inversely, Rust requires a fair bit more ramp up time if you ever need to use it in anger, and there's a lot of fairly novel stuff to learn there that is generally useful, so you'd benefit more from learning Rust as a project.
However, Rust is a very difficult language and so Julia or even Go might be a better second programming language (definitely not a good first language). While Go is pretty standard as languages go, it does have static typing which PHP lacks (at least by default).
This is an underrated benefit of go, but to me it is by far the most important aspect of the language.
Go: https://github.com/gin-gonic/gin
Rust: https://rocket.rs/
Julia: https://genieframework.com/
For example at $WORK we're slowly rewriting our entire data processing pipeline in Rust, but for awhile we've had a hybrid Rust / Python setup using PyO3, which makes it really easy to build your Rust code into a shared library and call it from Python, with the entire API specified declaratively using derive macros and the GIL handled for you using typestate tokens. Really cool stuff.
Databases, distributed systems, backend web systems, webassembly, low level systems programming. Rust is fantastic at these things.
When aiming to learn something new, I find it best to ask myself what I want to accomplish with it. Each of the languages you’ve listed have made significant inroads in various areas, learn the one that fits your use cases the most.
If you regularly find yourself solving problems with Matlab, numpy/torch/pandas or R, you'll be delighted to learn Julia. R and Matlab were great at the time, but really show their age. Python was never meant to be fast, so all the algorithms are in C/C++, making them very hard to inspect, modify or build upon. Julia excels at bridging the gap between high-performance numerical algorithms, great composability through it's type system, and a great syntax for vectorized programming, which makes it straightforward to inspect and change code for very complicated algorithms. For instance, check out Octavian.jl for a pure-julia (fast) alternative to BLAS - or try reading the DataFrames.jl source code (and compare it to the source code of pandas).
Note also that the mentioned applications go beyond data science into general machine learning (+deep learning), simulation science, optimal control, decision making under uncertainty, and many other fields leveraging custom numerical algorithms.
BUT, Julia is (imo) only worth learning if you need to write sophisticated numerical algorithms. If you're more of a systems level programmer, web dev, etc, you might not appreciate what sets Julia apart. Julia and Rust target somewhat different niches, with Rust being much more aimed at developing applications with many interacting components that may not fail. Go doesn't really target numerical programming at all and is instead great for multiple-instruction-single-data (MISD) applications (as opposed to SIMD applications like matrix multiplication).
Job? I'd say Go
Command line tools with complex logic for fun and community support? Rust
Julia? Julia.
Many of the majors are hiring a ton for rebuilding backend stacks and crypto still wants as many as it can get as well.
I should've been more careful about this in my statement :)
If you want to work in the learned language, then sure. But if you just want to increase your general employability then Rust is probably a better bet. You'll learn more, and it will make you a better engineer in every language you use. My JavaScript has been greatly improved by learning Rust.
That's what I mean, yes. Obviously you should broaden your horizons to learn or discover something new and improve your skill in a general way.