It seems there are less fullstack jobs and even less Node jobs available which leaves me the option of writing frontend code full-time which I don't want to do.
I want spend the next handful of years specializing in a language with longevity in the industry the same way I did with JS.
My choices are Rust, Go or Python.
What do you recommend for an experienced developer to learn in 2020? I'm open to suggestion.
Here's a video that introduces the framework (April 2019): https://www.youtube.com/watch?v=8xJzHq8ru0M
It's based on Erlang which has always felt a little rough around the edges, but rock solid and very fast. With Erlang, service boundaries become a thing of the past and tangible state makes debugging a breeze. It's still on the upswing after 20 years in industry.
Elixir greatly improves Erlang's tooling and creature comforts and adds syntax that many find more enjoyable.
As a guy with web dev PTSD, I've been testing Phoenix and Live-View a bit lately and it really hits a sweet spot between Node's speed and evented nature and the simpler end of React's interactivity.
And jobs seem to be appearing too.
Plus Elixir is surprisingly simple to setup[2] so you won't be spending all night fighting Python module dep issues. :)
[0] http://elixir-lang.org/
[1] https://github.com/phoenixframework/phoenix_live_view
[2] https://elixir-lang.org/install.html
The Financial Times: https://github.com/Financial-Times/tapper
Discord: https://blog.discordapp.com/using-rust-to-scale-elixir-for-1...
Pintrest, who seems to really like it (note the highlighted comment): https://medium.com/pinterest-engineering/introducing-new-ope...
And looking on https://elixir-companies.com/en I see two in the UK, two in Brazil, Amsterdam, Ukraine, Canada...Plenty there.
We've also seen a major trend in recognizing the importance of strict(er) types with the excitement around TypeScript. Functional programming is also seeing widespread adoption.
The language that is best suited for including the browser as a target, taking advantage of an excellent type system, and applying functional programming concepts is without a doubt Rust.
It has the steepest learning curve, but once you get the hang of a few concepts, you'll be amazed that you're writing a systems-level compiled language with perf comparable to C, because a lot of code is more readable than JS. People go on a lot about the performance because it's impressive, but that doesn't even break my top 10 reasons to use rust. Everything is so safe and thorough, it's one of few languages where I write non-trivial changes that actually work the first time I run them.
I appreciate what you're saying about fundamentals, but its not applicable to me.
I’ve been programming with JavaScript for 20+ years now and learned Python only a few years ago. Actually I did some a very small project in it over 10 years ago but didn’t remember enough so I had to relearn (and it’s relatively quick to learn compared to other languages I feel). I’ve used it at 3 different jobs now for a variety of scripting tasks that I would have previously used C#/.NET or other languages for and I've developed a number of sites with Flask now (both on Linux and Windows with IIS).
If you are based on the US a lot of companies here that look for hire for C#/.NET and Java. Larger corporate type companies for .NET while Java is commonly used for high traffic sites (game engines, etc).
I've also worked a lot with Vue.js and currently with Angular.
The two next big things I want to pick up are React with GraphQL and also Python (Flask and Django). I'm also very interested in longevity, and I think the mentioned technologies have good staying power (I've been burnt enough with AngularJS 1, bower, grunt, gulp, etc :-) ).
Personally it comes down to staying power and community. I really loved being a part of Node's and contributing where I could whether it be forums or open source projects.
After that I'd probably learn Rust - it's kind of a longer term bet. Seems to be getting some critical mass so it'll likely be around for a while, but that's by no means a sure thing at this point. Still, there are lots of good concepts in Rust that are worth learning that would be transferable.
You might also look into ReasonML (https://reasonml.github.io/) a strongly-typed, functional alternative to JS.
1. Rather than focusing on the language, you may get more satisfaction by pursuing a particular industry or sector in which you're interested (for example, podcasting or robotics) and then learning the stack needed to apply for jobs in those fields. If you're working in a problem space in which you're deeply interested, the language feels more like a means to an end rather than an end in and of itself.
2. To help with this, use AngelList (https://angel.co) to search for jobs with startups working in spaces that interest you.
- I do 100% Node.js backend work and am a technical lead.
- I did a lot of Java in college, and tiny bits of Java over the past 10 years (servlets on websphere)
- I've gone through phases of doing Go in my free time, and really like it, but jobs seem scarce
- Before JS I spent ~2 year doing Python/Django professionally. I used to do all my whiteboard questions in Python but now use JS. (I've been paid to write Perl, C, & C# in addition to the languages mentioned above.)
I've looked at Elixir, Rust, & Go but none of those languages seem to have critical mass. Do I really need to learn enterprise Java to go up market in terms of money and scale?
JavaScript is pretty much everywhere, Python is popular, but as a web developer, I don't get as many inquiries as PHP or JavaScript. Could be that mostly webdev recruiters contact me, but could also be regional (I'm in Germany).
I like C for low level stuff.
C#/Java for stable higher level stuff.
Swift/Kotlin for apps.
Cordova for hybrid.
JavaScript for quick prototyping.
JavaScript/jQuery/Bootstrap/Framework7 for web.
MEAN stack for server stuff.
There's plenty of reasons to do otherwise. There's good reason to switch from Cordova to Flutter, for example. Or Java to Kotlin. C to Rust looks like such an example.
But if it's only a 20% improvement, it isn't really worth it. If you are looking for a better web/full stack language, you should know what's best as an experienced dev. What does Go or Python solve better than what you already know?
Python is great, if you want to be a data scientist / data engineer. In my city for example, there are less web development positions in Python.
I like Rust and you would learn a bunch of interesting concepts, but I would not bet on it now regarding available jobs, particularly in Europe.
The addition of multithreading in 12.. didn't seem to change much.
Programming languages are to programming what foreplay is to sex - important but not the main exhibit, my point being that Python and (especially Go) are relatively simple languages coming from your background so you could realistically learn all 3 in a few months if you really wanted to.
A curious C++17 programmer, how does Rust teach you much about "how computers work under the hood?" I thought Rust wrapped most of the ugly bits in 'unsafe' and tried to keep programmers from them?
I'm not a rust guy myself (Fascinated by the memory/thread model but totally disinterested in the rest of the language) but to understand rust (or C++, D, blah blah) you do need to have some concept of a how a computer actually works. The really ugly stuff is hidden but in order to actually do work (thermodynamically rather than REST apis) you need to know what your code actually does (or acts like?)
"Under the hood" is far too complicated to learn from programming as soon as you go below the surface.
If you care about work opportunities - Go, and it's not even close.
If you're experienced in Rust, what problem spaces are associated with Rust stacks?
- either a JVM based ( Java, Kotlin or Scala... ) or C# dotnet ( core/net-standard ).
- SQL ! understand joins and query plans.
I've read this thread and went ahead and read a lot of comparison between languages and I have decided to go with Java.
For context I have been working mostly with Python for the last 4 years with a bit of C++ and the casual React/Js, before that a mix of VHDL and C.
In 2019 I gave a chance to Rust, Elixir, Golang and Clojure. I read at least a book on each, did all the exercises available in the books and did a small size project with Golang (around 5k LoC).
Clojure while cool doesn't seem to have a lot of jobs and I felt the ecosystem to be a bit immature (no big companies / projects behind it). Not only that but there's nothing I saw in Clojure that I thought -- wow Wish I could do that in Python! I also didn't come to some grandiose lisp revelation, maybe python has adopted enough of functional programming that it all seems OK-ish?!
Golang while cool gets under my skin to write anything bigger than a simple microservice. I feel the language doesn't have some OOP/functional constructs that I came to rely on. It really feels like the language makes me write "more dumb" code. I like explicit and simple constructs but it is a bit too much. I am cheering for Golang language evolution and hope it gets Generics/Exceptions.
Rust seems like a really cool idea! It has very cool concepts BUT it hasn't gained enough adoption yet for my taste. There aren't a lot of jobs or big projects using it. I am also only casually in the systems level programming space and I much prefer C/C++ when I get there because at least I remember the language constructs / syntax. Using Rust casually has been proven really hard as its syntax and concepts aren't mainstream yet and I always have to re-read the basics. Cargo is awesome. Cheering for Rust as well.
Elixir was super cool, really enjoyed going through the book I bought and doing the exercises. IMO it also lacks jobs and big projects using it. That said, it was the language that I enjoyed the most out of the new ones and had enough new concepts / a cool framework that it wowed me (unlike Clojure) ! Really cheering for Elixir to be more adopted!
Scala I gave up very early on, the amount of constructs / syntax and ways you can code are just too much for my pragmatic brain.
... so why Java?!
Java is very mature and has tons of well paying jobs. In the last 5-6 years it seems to have gained a lot of cool features that makes it much more pleasant to write. The community also seems to have changed its culture a bit on the AbstractFactoryFactoryFactory pattern.
But the best part is the ecosystem, the IDEs are top notch!
Start a project with Java + IntelliJ and it is awesome. It makes all the difference to have a very solid ecosystem and proven tools / projects that rely on it. After using Java with IntelliJ writing Go feels like you're going back a lot of years.
Java is a language with better performance than Python/Javascript and it is static typed so a bit different.
I feel that with Java + Python + Javascript (for frontend) I have all the basis covered for 99.9% of the problems out there that interest me.
All these languages are battle proven and not going anywhere, they also look very similar to each other. I cannot stress how important it is for me that they look similar, if I am working 8h/day in a language I don't want to have to add cognitive overload to remembering how the syntax and language constructs work in Clojure, Rust or Elixir.
[0]: https://www.rust-lang.org/policies/code-of-conduct
OK.
> ... which Java is.
True, but so are many other languages. Why Java in particular?
One possible answer: You'll learn the most from Java. I doubt this answer.
Another possible answer: There are a lot of Java jobs. This was definitely true 5/10 years ago. Is it still true?