Ask HN: Should we narrow our language/tech stack focus?

1 points by blunte ↗ HN
The number of programming languages continues to proliferate, as do the frameworks and libraries for each.

In many ways this leads to nice advancements, but it also has negative impacts: distraction, reinvention, technical debt, and other issues.

Proprietary zones have few or no options (C# Windows, Swift macOS); but those are the narrow cases. Internet and web services run Python, Ruby, Elixir, C#, Java, Kotlin, PHP, JavaScript, Perl, and probably half a dozen other languages.

If you look at any one language, you'll usually find one or more heavy frameworks (Rails, Django, Phoenix, Laravel, etc.), and even more lightweight frameworks and libraries tailored to more specific needs (APIs, services, etc.).

Should we not stop for a bit and evaluate what exists, then make an effort to consolidate? Are we not exhausted with job specs that list 5-10 very specific requirements which fit an increasingly narrow target group of devs?

Or the counter question: are we really benefitting from further diversification? Is there an overall return on investment in our proliferation of frameworks and libraries (and languages?).

6 comments

[ 4.6 ms ] story [ 25.4 ms ] thread
Maybe, but how do you get the C# programmers to give up their intellectual capital and switch to Java, or the reverse? If two languages are similar, it makes sense to learn only one of them thoroughly, but that makes it difficult for you to compare them objectively.
What you can do with a modern language isn't so different for each language. It's usually a matter of a few big points: static|dynamic|no typing, time performance, or memory performance. The rest are just details.

I fully admit that I find Ruby a much, much more elegant language compared to Python. I see Python as the caveman's tool. But I find Clojure much more elegant than Ruby. However, at the end of the day, or the project, what matters is what you achieved. I write Python when the libraries that serve me best are for Python, just as I use GNU/Unix tools and *sh when that suits me best.

It seems like time to make an effort to give up some preferences in favor of standards which will normalize and simplify our solutions. These would also make hiring and job finding much better for us all.

It's not only the languages it's the entire ecosystem - frameworks etc. I'm not saying it can't be done, but most devs won't want to do that. Why would they - from a selfish perspective they gain nothing.
In my experience, depending on multiple external ecosystems isn't all that much of a problem (as long as they don't get orphaned) in terms of development and maintenance, but it can hinder internal code sharing and skill transfer. In particular, junior devs will take extra time getting up to speed on each internal app because it is in yet another unfamiliar language. But maybe you don't onboard junior devs all that often.

Anyway, while different languages each have their own tradeoffs and benefits, doing a sanity check on whether the putative benefits actually apply to your use might be advisable. IOW, do you really care that language X has a faster startup time when the app written in it is a long-lived server process, so startup time isn't the bottleneck?

(comment deleted)
It's kinda the same with human languages - wouldn't it be better if all Europeans had one language, or in fact if the whole world just spoke English/Chinese? The thing is there are cultures invested in the languages they learned from their parents. Well, there are Rust and Elixir and Ruby devs who are invested in their language. Not only are they invested, in many cases they actually love their language and deep down think its mostly superior to other languages. They don't wanna speak Java. How will you change their minds?

Also - not all companies adopt more than 1-2 languages. It's pretty crazy to have 5-10 languages in one company I think.