... Yes? Clojure and Scala are quite popular and normal. Java itself is still extremely common. Even if you end up writing your API endpoint in Node or Go, odds are you'll still end up using sidecar infrastructure that's written or maintained in Java.
The competitors are:
- Node, which simply has a hard time scaling. This gets better every year, but it is sort of in the "you do this and then commit to a larger capex" category along with Python. You can do it and many do.
- Go. Go is a funny language. It's quite good for small projects, but completely fails to scale for large projects due to issues with error handling.
- Rust. I don't think this sees wide adoption in the startup space yet, though.
- Nim. At least as cool as rust, but even more neglected.
- Haskell & OCaml: Lots of TALK but not many actual shipped products use this stack. Some pretty impressive groups do though.
Just my opinion though.
What's more, I do not think the community has "solved" for those strategies. I know google internally has one set of guidelines, but other teams and orgs do other stuff.
Quite frankly, there are many aspects of its design that ended up being sub-optimal for large codebases. Look at the profound about-face the language took on bundling as an example.
We can bandy about all we want about this, but uh... certainly as a longtime user of Kubernetes I can say, "They have found ways to deal with the language's error handling."
For a large or complex codebase, I nominate Cloud Foundry. About 1.5M SLOC of Go (1.8M LOC) in the main cloudfoundry repos[0]. Almost all new development is in Go.
There's still about 370KSLOC (470K LOC) of Ruby. Eventually most of it will be replaced, which will drive that Go codebase up a lot.
Disclosure: I work for Pivotal. Lots of my colleagues wrote most of that Go. I for one pity them, but they seem to have enjoyed it.
Rails left a bad taste on my mouth after using it for one project. Many things about Rails are wonderful, but it feels like the entire project is in shaky ground with so many dependencies. Memory usage and performance aren't nice either.
Python sounds tempting, but I want to avoid dynamic typing if possible. That rules out Node (not that I would like to work with js).
That leaves me with either Java and .NET, which have the taboo of being enterprisey.
Are those the only major players?
I don't like Ruby because it hits a sour spot for me. It used to be very cutting edge, but then stagnated. It has all the problems of a dynamic language, but nothing to really offset it. Its tooling is fairly good for assembling new projects, but not maintaining them.
I think if I went somewhere today, on the spot.
1. FSharp & C#. The .NET Core stuff is exciting. I view, "enterprisey" is just, "I have libraries for lots of things I don't want to solve like calendaring." So long as I can quickly develop and deploy code, those kind of social things are immaterial. People worry about .NET core performance even as they ship Node code, so I find that concern somewhat manufactured.
2. OCaml, in the same vein as F#, but I think this lacks a lot of ecosystem stuff so I suspect it will always be secondary.
3. Go or Rust. I could just bite the bullet and do it. It's doable, it just requires a lot of thought.
2/3) I think the communities are way too small.
So if you are in the Linux world and want to work on Back end . Then Java is your only options. You can mix in groovy/kotlin/scala to make dev less painful .Look at dropwizard and play framework the are an improvement on JSF/JSP/Spring mess.
It's a tax on success they want to impose. They want to turn Java into the same business model as their databases.
Pros:
* Code readability
* Concise syntax
Cons:
* Ruby doesn't perform as well as many other languages.
* There is a cultural tendency among Rails devs to rely on a large number of gems. This creates dependency hell, especially a few years down the line when some libraries are not actively maintained.
* Unicorn is not the easiest server to manage. However I have to admit that I haven't tried any alternative, there might be better servers in the Ruby world.
Do you mind expounding on that?
Is Java that much of a major player on the backend? I didn't think so; especially for new startups.