When whatever language I am using as my main workhorse language at the time gets new features I worry. Go is getting generics and I have to admit I’m a bit worried. I think it’ll be fine, but there is always the risk that this might attract a different crowd to Go.
Programming languages depend on (at least) two factors to be pleasant. First the language itself, and second, the people who use it. Especially the people who make libraries and frameworks. Usually the language is somewhat less important than the people who use it.
Workhorse languages
I’m a relatively conservative developer. I choose a workhorse language, invest in learning it and then try to stick to it for as long as it makes sense. Until there are good reasons to stop using the language or when something worth the switch comes along. Typically I stick to a workhorse language for the better part of a decade.
I use, and learn, other languages as well, but I always have a workhorse language that I do most of my work in. This is a good practice.
My interest in programming languages tends to be purely in terms of what kind of work I can get done in them. You can learn to like most languages. Especially if they make you productive. And the longer you stick to something, the better you become at it. It takes years to become sufficiently proficient in a language to the point where you have the ballast needed to focus on arhictecture and implementation strategies.
If someone tells you that you can become proficient in a language in just a year or less, they are wrong. Usually because they have never been proficient in a language or they have never worked in a competent environment.
When choosing a workhorse language I have a short list of absolute requirements.
Strongly typed and compiled
There is no actual advantage in using dynamic languages. The advantages people list are mostly liabilities. And they have a nasty tendency to manifest when you have lost the context you had in your head while writing the code.
The first requirement of a program is to be correct. If it isn’t correct, the rest doesn’t really matter. Strict type enforcement and good compilers can do a lot of heavy lifting for you in this regard. It is poor professional judgement to not accept that help.
If you think compiled languages are a lot of work: you have to practice more to become efficient. Learn how to do things right efficiently. Nobody cares what you can do wrong quickly because it doesn’t have actual value to an employer.
Sufficiently mainstream
If you are going to invest in a programming language you want to invest in something that has the largest possible ecosystem. If you choose a niche language there will be fewer books, videos, conferences, libraries, and fewer developers at a sufficiently senior level. This is not a good investment.
The argument that people who choose niche languages are smarter is perhaps true. I haven’t checked if there is credible research on this. But it is also irrelevant. Most of the profitable software industry is