After searching online and asking friends I've gathered some feedback on the most popular solutions.
Rails: Proven and mature. 3rd party gems that can help you with anything web-related. The ecosystem is thriving and most developers are happy using it.
Laravel: Made PHP cool again. Took lessons from Rails and probably provides the best Developer Experience when it comes to building a monolith app from development to deployment. PHP is also the most popular backend language.
Django: People love python. I hear that Django Rest Framework is a great tool, plus, the ability to add ml features on your existing app is a big plus.
Node.js: Full-stack Javascript is great but the backend landscape is a mess. Probably a thin backend without complex rails-like structure.
Phoenix/Go/Rust: Good options for specific use cases where performance matters.
Java/C#: Complex and enterprisey. C# is gaining traction but the 3rd party ecosystem is still lacking behind other options.
Backendless: SPAs, Next.js/Nuxt.js/Ember, JAMstack. Use services like Firebase/Auth0 and 3rd party APIs for backend logic or serverless functions.
What would you suggest someone learn in 2020? I know the answer is "it depends" but I know that for example Rails, Laravel and Django are basically tools for the same job, building CRUD applications on the server. Would you suggest someone to learn Ruby or PHP in 2020, though many consider them dead?
Now if the question you're really asking is "which one should I learn from a long-term career standpoint?" or something along those lines, the equation changes a little bit. BUT even there, the simple reality is, you can be gainfully employed, making good money, doing fun work, using any technology you listed, and plenty you didn't.
If you're coming at it from the career / long-term perspective, and want an objective measure, then scan the job boards, and see what you find the most open reqs for. Go with that. Otherwise, pick two or three off your list, dabble in each, and see which one feels right to you.
The only thing I'd explicitly advice against is going with something really outside the (modern) mainstream, like COBOL, or some really new'ish languages which may or may not catch on (Nim, something like that), or any "esoteric" languages: Brainfuck, Intercal, Whitespace, Befunge, etc.
As to what I personally would pick? Groovy and Grails, along with PostgreSQL, and one of the popular JS frameworks for front-end (React, Vue, Angular, etc.). But that's just down to familiarity and personal preference.
Edit: let me add one bit of clarification... I don't mean to slag Nim, or any of the other newer'ish languages. And I don't mean "don't learn it" in the general sense. I just wouldn't "bet the farm" one of those just yet. By all means, dabble with lots of different languages, and constantly pay attention to how they are evolving over time, and how they are (or are not) gaining industry acceptance.
Having said all that, obviously the right answer is Django.
If your goal is to build something to have a product/service/business, build what you know. That will let you build and iterate quicker. Startups don't fail only because they were built on If your goal is to learn a new framework, just pick one and give it a shot! There are many concepts you can learn that extend across stacks. If your goal is to list languages/frameworks on your resume, that's a little tougher. One not very scientific way to decide is to do a brief search for job listings in your target location and pick the BE mentioned most frequently.
> though many consider them dead?
Anyone who says that, you can safely ignore.
I'd focus on that first, then when you're comfortable, move towards front-end. Again, focus on what employers are hiring for, React being top of the list, Angular is loosing market share.
Node isn't very complicated to develop in, front-end experience like ES6/7 will help you figure out JS and you can learn the event loop model later on.
This way you'll have a solid foundation in backend, front-end and can expand out from there as needed and specialize but this is a good starting point to be a full-stack developer. Spend time looking at development workflow, learn Git, write tests, etc.
Aside from languages/frameworks, I would say focus on the container/orchestration area of development. This is becoming the real focus I am seeing from someone who has been working in software development for over 5 years. More and more it is containerized micro services that are being produced and it is people who can weave them together with kubernetes or similar software that is the real ticket.
So my advice would be to pick one and commit to it for as long as you can. To the point where you both love and hate it. Get to a point where you can contribute to an well known open source project that is built in it’s domain.
Django set me up with the tools and skills I needed a couple years ago. The other ones probably would too. Echoing other commenters you can build anything in any of these frameworks and shouldn't spend too much time choosing stack. Despite it not mattering, my vote is for Django.
Java and C# absolutely do NOT lack a third-party ecosystem. If anything, both have immensely powerful frameworks behind them and thriving package ecosystems.
IMO, your choice only matters if the product you're building is tied to a given library. For example, you might have more luck doing ML in Python/Java than in Ruby, although there is no reason why you can't mix and match depending on what you need to do and what you're trying to accomplish with each.
I am in a somewhat similar situation (albeit considerably older, almost 41) and still considering my options. I have used plain PHP + MySQL to build web applications in the past but I am now trying the same with Python's Flask and liking it so far. Later down the road I'll either try Django or go fullstack Javascript (Node, React, Express, ...) because it is in such a high demand and not going anywhere.