As a professional Golang dev (among other responsibilities), I see more hate for Go on the internet than praise. Like most things people complain about, I usually can barely discern what people's exact complaints are, as most people seem to just complain about the unknown. I take it you get the opposite on your travels around the internet, and I'm just wondering, how do I get into your newsfeeds? The internet algorithms seem to be putting us both in the wrong places, and I'm wondering if we might be having a Freaky Friday moment, if you will.
I don't hate Go, I'm just disappointed in it. Decades of programming language research to draw from, and the best they could manage was a warmed over C++? I know that Go is practical and useful but it feels like a lost opportunity, a "local maximum" if you will. Ultimately I think it will prove to be a dead end with no path to the future.
Is it a perfect language? Far from. But it's a language where I've recognized more pros than cons to using it. My primary complaint lately has been with the inflexible unmarshal functions that cause weird behaviors with converting serialized objects into structs. A recent example is if you use cobra-cli, arguably the most common CLI framework, which ships with another dependency, Viper, for managing your app configuration. If you unmarshal a config with a map[string]anything, where the map keys may contain periods, it just cuts off everything at the first period because it uses periods behind the scenes as a delimiter _for some reason._
Basically, take some yaml like:
```
stuff: 1
things.and.stuff: 2
```
If you unmarshal this yaml into a `map[string]int`, the string keys will actually be, "stuff" and "things". Completely dropping the ".and.stuff". Wild. Keep in mind, this is specific to the Viper unmarshaller, the stdlib json or yaml unmarshallers actually handle this fine, I just have other similar complaints about those.
Given this is my main complaint, not performance or general syntax, I do enjoy writing applications in the language though.
What's the language you're using these days that you feel accomplishes the jobs you need it for better than Go? And preferably also has strong concurrency builtins and is typed.
But those issues aren't the point. The fact that tools like Copilot and ChatGPT work so well for routine coding tasks is an indictment of pretty much all current popular programming languages including Go. From an information theory perspective this means we're still coding at too low a level and writing code with low entropy. There is room for new languages that allow for coding at a higher level of abstraction and factoring out the boilerplate.
As for specific languages, that's not really my area of expertise. Mojo looks promising in some ways. But it may never be suitable for systems programming.
I think, at least in their current form and possibly for the near future, that some kind of new language that relied on abstract human operator queries piped to an LLM, would lead to too high of levels of ambiguity of output for most enterprises to accept. To me, this kind of thinking is excellent as a potentially mid to far off goal. But, again this is just my opinion, thinking of it as a short term goal seems naive. It brings to mind the memes of non-technical people asking ChatGPT to make them a basic website, and they send it to a software developer in their family as an html file and go "Are you worried these things are going to make your job obsolete? I just made a website."
Anyway, with it in mind that I believe that is not a short term goal: in the short term, I still need to make money. So I write Go for a paycheck. And based on what I believe the tools available around me today are capable of, I think by _today's_ standards, it is nice to work with in a wide variety of tasks.
I believe A is great. I'm far less likely to notice or click on an article that starts with "A is great" than I am "A sucks". I usually don't care why other people think A is great, but I am curious why someone thinks it sucks (regardless of the ultimate value of their complaints). So there's a sort of psychological effect that I just don't notice "A is great" articles. My subsequent behavior convinces algorithms I want to see less "A is great" and more "A sucks" which not only seems to be a desired result, but reinforces my behavior.
The way out seems obvious. Either actually stop caring about why people think A sucks or to curtail my curiosity and stop clicking on the "A sucks" articles; and to care more about why people think A is great or at least click on the articles.
Yeah I understand where you're coming from with the psychological effect. I actually noticed a trend of more pro-Go articles on here within the past couple of weeks, and have clicked on them. But historically the topic of an article I click on will be about something like the AWS SDK, and the comment section will be about how Go is trash. Though, I'm sure there's also a fair amount of the exact psychological effect/bias dilemma you're referring to as well.
I work in a large code base where we've told all of the developers to use dependency injection frameworks.
We are now using a mixture of 3 different dependency injection frameworks, manual dependency injection, and instantiating dependencies in the constructor.
We have rules around changing the schema. You can only add new fields and deprecate old fields. You can't rename or reuse fields. All new fields must be optional to make schema evolution possible.
In practice, this is pretty similar to how you maintain compatibility with old clients in JSON. But with protobuf, you have the schema file to make code reviewing this kind of change easier.