Live data from Hacker News

"14 Years of Go" by Rob Pike

codereliant.io

11–20 of 75 posts

Re: "14 Years of Go" by Rob Pike

#11

Earlier quoted context omitted.

> I hate the team Can you link to where you have interacted with them personally, so that we can judge whether your hatred is justified?

By team I mean team culture and general go culture. And I don't mean attitudes or treatment. I mean design philosophy. Just to be clear. No links just look at some go libraries. Many libraries feel like it's designed for java.

I have used lots of Go libraries. I even wrote some.

Your opinion here is just bizarre because typical Go code is as far away from typical (bad) Java code as you can get.

Your typical Go library doesn't have FactoryFactory classes, doesn't overuse interfaces, doesn't have dependency injection, doesn't have callstacks 20 frames deep etc.

So yeah, I would like to know which Go libraries specifically you're referring to because I just don't see that in the popular Go packages.

Re: "14 Years of Go" by Rob Pike

#12

Earlier quoted context omitted.

> I hate the team Can you link to where you have interacted with them personally, so that we can judge whether your hatred is justified?

By team I mean team culture and general go culture. And I don't mean attitudes or treatment. I mean design philosophy. Just to be clear. No links just look at some go libraries. Many libraries feel like it's designed for java.

A lot of go developers are coming from Java and so write in Java style. That’s a problem of itself.

To understand idiomatic go, it is better to look at its own standard library source codes.

Re: "14 Years of Go" by Rob Pike

#13
post #11

Earlier quoted context omitted.

By team I mean team culture and general go culture. And I don't mean attitudes or treatment. I mean design philosophy. Just to be clear. No links just look at some go libraries. Many libraries feel like it's designed for java.

I have used lots of Go libraries. I even wrote some. Your opinion here is just bizarre because typical Go code is as far away from typical (bad) Java code as you can get. Your typical Go library doesn't have FactoryFactory classes, doesn't overuse interfaces, doesn't have dependency injection, doesn't have callstacks 20 frames deep etc. So yeah, I would like to know which Go libraries specifically you're referring to…

To be honest, I saw a plenty of factory of factories in go on top of dependency injection systems with everything is an interfaces nightmares for simple libraries.

Some people need to justify their salaries with the complexity for nothing.

Re: "14 Years of Go" by Rob Pike

#14

[dead]

I was with you until you slagged on the other options. Rust and Scala are designed for other use cases than yours. That doesn’t trivialize their worth.

> Rust and Scala are designed for other use cases than yours

This has become a sort-of gotcha for any discussions that involve comparing programming languages, but I think it has been over-extended beyond what is reasonable. It is true that some languages are much better at certain use cases than others, and especially if you consider their ecosystems when making this determination. For example, I don't feel Go makes a very good programming language for desktop applications or games, and there are some use cases where it is either not a good idea or flat-out non-viable due to limitations of its design.

However, I think the complaint of "intellectual masturbation" is definitely not invalid on these grounds. That's a far more general (and vague) complaint about language design. It's one thing to disagree with this assessment, but this counterpoint doesn't really address the assessment, it's just dismissing it.

That said, I do think that complaining of "intellectual masturbation" is still rather shallow. I think that if you were to compare the personalities of people who prefer Go vs people who prefer Rust you would find that the language design choices are not just intellectual masturbation, but they do reflect the priorities and mindsets of the people who design and use the language.

And that said, I think you could also make the argument that Rust has made some very costly decisions in the language design department to uphold its ideals. This does hit me when using Rust: It's not that there's anything wrong with it, but it absolutely 100% makes me appreciate where Go decided to cut the scope. Flat-out ignoring invalid UNICODE filenames may mean that Go is not suitable for programs that simply must deal with bag-o-bytes filenames gracefully, but on the flip side it sure does simplify just about every downstream decision regarding filenames. You can see this pattern repeat throughout the language. In some cases Rust goes through great pains to meet the ideals of those who love the zero-cost abstraction, but it does hit some awkward points. A point that I am always bringing up is the lack of the ability to directly allocate heap memory in safe Rust. With features like const generics, it's tempting to reduce indirections and flatten fixed-size buffers into your structs and so forth, but it's very easy to find yourself in a stack overflow if you do so, depending on the platform's default stack size. OTOH, I appreciate that in Go you don't really need to worry about a stack overflow, but Go's design decisions around the stack and goroutine do add some overhead to making C calls and stack allocations, which is a vastly different trade-off than Rust makes.

I'd say Go programmers can be categorized by the fact that many of them, myself included, actually like this pattern:

    if err != nil {
        return nil, fmt.Errorf("...: %w", err)
    }
In Rust, you'd no doubt prefer to use one of the many error crates that cut down the boilerplate (somewhat, anyway) and let you use strongly-typed enums for your errors. I know I do this when using Rust, but the Go mindset is very different.

I think both mindsets have value, and it's not surprising that people see Rust as intellectual masturbation to some degree, whereas people see Go as mindless boilerplate a la Java. Both assessments are too simple, of course. Rust feels like it will pay as much cost as it takes in the language complexity department to solve the problems they want to solve as fully as they can. Meanwhile, Go feels like it will spend several years trying to decide if adding a single major language feature is really worth the added complexity, and I think there's a zen to that. I don't think the answer is that they're built for different use cases, and their use cases freely overlap plenty; it's more like, they're built for different mindsets, and some of the use cases just wrap around that.

Re: "14 Years of Go" by Rob Pike

#15

This is just a personal opinion. No offense intended if you disagree. I started go 6 months a go and while I like the language I hate the team. There's so much emphasis on making everything elegant perfect, organized and clean and the way go is designed just doesn't fit well with that. I feel like I'm working with a giant java program. Looking at the libraries I feel this is the go culture. Elegance over simplicity s…

Your comment makes it look as if you're saying you hate the Go development team, but it seems that isn't the case.

I get a little of what you're saying, I wouldn't say I hate anyone, but I strongly dislike how a lot of projects are organized. I think a lot stems from https://github.com/golang-standards/project-layout , which pretended to be standard and was so (ab)used one of the creators opened an issue about it. If you look at the actual Go src, it's much, much cleaner.

Re: "14 Years of Go" by Rob Pike

#16

[dead]

I was with you until you slagged on the other options. Rust and Scala are designed for other use cases than yours. That doesn’t trivialize their worth.

I know C, python, Go and Rust reasonably well and Go is usually my default choice for a new projects.

Well unless it's just a quick script, in which case Python will do just fine.

Tried Scala while learning Chisel and hate it from the bottom of my heart. It's like Kotlin on bad drugs.

My point is, people are different.

Re: "14 Years of Go" by Rob Pike

#17
Lack of support for operator overloading is a bit sad. As a result, Go can't get used in numerical applications, unless you like writing `matrix_plus(A, B)` instead of `A + B`.

Is there a programming language that has a "simple" design like Go but which supports some operator overloading?

Re: "14 Years of Go" by Rob Pike

#19

Earlier quoted context omitted.

I was with you until you slagged on the other options. Rust and Scala are designed for other use cases than yours. That doesn’t trivialize their worth.

I know C, python, Go and Rust reasonably well and Go is usually my default choice for a new projects. Well unless it's just a quick script, in which case Python will do just fine. Tried Scala while learning Chisel and hate it from the bottom of my heart. It's like Kotlin on bad drugs. My point is, people are different.

> Well unless it's just a quick script, in which case Python will do just fine.

Weirdly Go has made me enjoy Python even less and compilation is so fast it's turned into my go-to for quick "scripts."

Re: "14 Years of Go" by Rob Pike

#20
post #17

Lack of support for operator overloading is a bit sad. As a result, Go can't get used in numerical applications, unless you like writing `matrix_plus(A, B)` instead of `A + B`. Is there a programming language that has a "simple" design like Go but which supports some operator overloading?

I mentioned this before, but I wish that Go has a Numeric interface where operator overload methods can be added and confined only for numerical objects.
Post reply on HN