Live data from Hacker News

Why Go Is Not Good (2014)

yager.io

61–70 of 76 posts

Re: Why Go Is Not Good (2014)

#61

You wrote this, about the potential for user error with a Go example, as a negative: > To Go's credit, it is idiomatically correct (and encouraged) to leverage Go's multiple return mechanism to return a second "failure" value if there is a possibility that a function will fail. However, this mechanism can easily be ignored or misused A few paragraphs above you wrote this in defence of Rust's approach: > No matter the…

Not OP, but original author.

I’m not sure I would agree that poor naming is even the same category of problem as ignoring error return values.

Haskell/Rust provide much more robust error-return mechanisms that can’t simply be ignored or forgotten.

Re: Why Go Is Not Good (2014)

#62

> · Go doesn't really do anything new. · Go isn't well-designed from the ground up. · Go is a regression from other modern programming languages. I don't really like how the author just chooses some features which Go doesn't have, and based on that says "Go doesn't bring anything new". Yes, Go lacks some features, for better or worse, but that's not really the right conclusion. One feature Go does really well and imo…

Even at the time, other languages like Erlang and Haskell had similar or superior green threading. These days there are many languages with decent green threading. I know you used the hedge “widely used language”, but that’s cheating because any language Google sponsors will be widely used :)

Re: Why Go Is Not Good (2014)

#63
post #9
post #7

Needs a "2014" note in the title.

Blogs without timestamps ought to be illegal.

Sorry! It’s in the HTML. That said, nothing about the blog post has become outdated AFAIK, which makes my points a bit stronger if anything...

I don’t put anything on my blog unless I think it has a pretty long contextual lifetime.

Re: Why Go Is Not Good (2014)

#64
post #57
post #26

This seems odd for an article that got 30 upvotes in 15 minutes ( probably not really enough time to read it all, mind you .) The complaints are a rehash of what’s been said already, only worse. Which is completely fair considering it is at least as old as 2014! It says Go’s solution to generics is interface{}. Not really; Go just doesn’t have a solution for that yet. Go 2 of course, promises to add one, that would a…

> The complaints are a rehash of what’s been said already I wrote this like 7 or 8 years ago, so it was fairly novel at the time :) > Go just doesn’t have a solution for that yet. Go 2 of course, promises to add one I’ve also been hearing this since I initially wrote this. In any case, the article is about Go as it exists. If Go 2 actually makes significant improvements in these domains I will add an updated header p…

Yes, to be clear, it makes sense for back then. It was weird to see it on HN frontpage as if it were new.

However the Go 2 thing is not in the same state it was in 2014; the design proposal was formally accepted and a compiler exists. It will likely take a long time to see how it hashes out, but it’s probably fair to treat it as an inevitability at this point.

Re: Why Go Is Not Good (2014)

#65
post #58

Is there something here that hasn't been said before? From skimming it just looks like the usual list of complaints we've seen a thousand times

I wrote this 7 or 8 years ago, so it was pretty novel at the time :) My goal was to derail the Go hype train that dominated HN at the time, and I think I was pretty successful. As you say, everyone is pretty aware of Go’s shortcomings by now.

Fair enough!

Re: Why Go Is Not Good (2014)

#66
post #55
post #33

Earlier quoted context omitted.

One important reason: Because Java encourages inhertance-based designs, which are especially dangerous if your goal is to get inexperienced programmers to write simple, straightforward code. Go does not have inheritance.

But it does have goroutines and many other features which are easy to make a mess with. Also, the worst abuses of inheritance I've seen were all from supposedly senior engineers. And inheritance seems to be attacked a lot lately for questionable reasons. There are many places where it's a natural fit.

True, but I would argue that a novice/mediocre programmer will tread more carefully when using goroutines because the subject itself is often taught as a more complex/high level topic. Meanwhile, inheritance is often taught as a basic concept which can deceive inexperienced programmers into thinking that they completely understand it. That invites more potential missteps.

Re: Why Go Is Not Good (2014)

#67
post #42
post #19

Go is like a superior version of Java. Rust is like a superior version of C++. I wouldn't use Java or C++ any more for a new project, barring some very specific reason. But I might use either Go or Rust depending on the project's priorities. These criticisms of Go are basically correct, but it does have some advantages over Rust, like in some situations absolute performance is not so important, copying strings around…

I don't think I would classify Go with Java. I would not use Go to write a system with a rich domain model and lots of business logic. Java, in its own dated and awful way, is designed to cope with complexity. Go is designed to punish it. Go is the language you design when you have absolute conviction that whenever you feel forced to write complex code, you need to rethink your solution instead. It is not a language…

It is odd that Java was conceived for set-top boxes. Even before generics were added, it was clearly a language aimed at establishing and enforcing contracts in a largish team over long development cycles. You can see it in the Hello, World program, which has a lot of weight you wouldn't need for space and time constrained programs on a set-top box.

Gosling was obviously inspired by C++ ("without the guns, clubs and knives", as he said), which itself adds a lot of the complexity to support large-scale projects, features that C was lacking. I'm not entirely sure he thought about it much past that.

Re: Why Go Is Not Good (2014)

#70
post #26

This seems odd for an article that got 30 upvotes in 15 minutes ( probably not really enough time to read it all, mind you .) The complaints are a rehash of what’s been said already, only worse. Which is completely fair considering it is at least as old as 2014! It says Go’s solution to generics is interface{}. Not really; Go just doesn’t have a solution for that yet. Go 2 of course, promises to add one, that would a…

> As for operator overloading and language extensibility, I think most people would agree these are never really clear cut wins as they can add inordinate complexity in exchange for sometimes dubious value. It certainly makes some things look nicer (matrix and vector types for sure) but you can always use functions to get the same utility with less sugar.

Operator overloading to do what C++ did from the outset is a mistake. It looks flashy, but it buries land mines in the habits of your programmers. A programmer who is actually both shifting numbers and doing some other arithmetic operation may look at the code and wonder, "What is the precedence of these operations?" and having concluded that they don't remember, or at least, that their reviewers may not remember, though the compiler surely does, they'll add parentheses or re-factor. But if they've learned that shift is really some other operation concealed by overloading - they can be astonished when the compiler cheerfully applies that other operation with the precedence of a shift 'cos as far as the compiler is concerned that's still what it is.

But there definitely are uses (matrix addition for example) where just overloading an operator feels very sensible. I can see a strong case for == and != too if your language has that from the outset, it won't make sense to add it later.

So the trick is that a language should do this very sparingly and encourage programmers likewise, but I think that only makes it a feature to avoid entirely if you're very dedicated to having a small language, since overloading is nice but not necessary. Go maybe is in that category.

Post reply on HN