Live data from Hacker News

Ask HN: Go programming language is over ten years old. What do you think of it?

news.ycombinator.com

251–260 of 310 posts

Re: Ask HN: Go programming language is over ten years old. What do you think of it?

#251
post #210
post #204

Earlier quoted context omitted.

golang is anemic in front of Java (the JVM, the language, and the ecosystem) and introduces its own set of gotchas. Once Java gets green threads (by means of Project Loom), golang will be an extremely difficult sell for anyone considering a new project.

Until Docker, Kubernetes and its ill fades into obscurity, even us on Java and .NET platforms now need to keep a passing knowledge of Go for tooling related on the eco-system.

Sure, but I was referring about the state and design of the language in general, and its viability for new projects.

Re: Ask HN: Go programming language is over ten years old. What do you think of it?

#252
post #238
post #233

Earlier quoted context omitted.

No language will magically give you maintainability. I've worked on several year old golang projects and they've been terrible, made worse by the fact that golang doesn't scale well for teams or larger programs.

> No language will magically give you maintainability. That's true. But Go will certainly help with it. > made worse by the fact that golang doesn't scale well for teams or larger programs. What? That's one of the major recognized selling points of Go.

> That's one of the major recognized selling points of Go.

It's exactly just that, marketing fluff and hype made up by the golang team that is not backed up by actual evidence. Look up several other comments in this thread that mention exactly that. I'm not the only one challenging their false claim.

There were never any specific language features that make golang good for large projects. Quick compilation was touted at the beginning, but that went out the window when the golang compiler was rewritten in go. For large projects, it's in the same ballpark as Java and C#, and in my experiences, even slower especially for incremental compilation due to the bottleneck of the linker. Secondly, its features work against scaling for large programs and teams (no generics, verbose and error-prone error handling, interfaces are poorly thought out and optimized for minority use cases at the cost of usability and correctness, etc.)

Re: Ask HN: Go programming language is over ten years old. What do you think of it?

#253
post #252
post #238

Earlier quoted context omitted.

> No language will magically give you maintainability. That's true. But Go will certainly help with it. > made worse by the fact that golang doesn't scale well for teams or larger programs. What? That's one of the major recognized selling points of Go.

> That's one of the major recognized selling points of Go. It's exactly just that, marketing fluff and hype made up by the golang team that is not backed up by actual evidence. Look up several other comments in this thread that mention exactly that. I'm not the only one challenging their false claim. There were never any specific language features that make golang good for large projects. Quick compilation was touted…

You seem to be writing that a simple language is somehow harder to scale for large teams. My experience is the exact opposite - too expressive language make devs have different dialects and be too "clever" for the teams long-term good - and I'm pretty dumbfounded that you can try to make sense of that.

> verbose and error-prone error handling

Verbose (and consistent) is exactly what you want for large teams. What's error prone about it?

You're tone is also suspiciously overconfident which just signals that this is more a you issue.

Do you have an example project that has problematic build times in Go?

Re: Ask HN: Go programming language is over ten years old. What do you think of it?

#254
I won't re-hash the many great things about Go that have been said. Instead, I will explain some of the reasons why I continue to use Java (for now) instead of Go. Go is seen as one of the best alternatives to Java, and some see it as a better Java. It has won over many shops from Java. Therefore, I think these reasons are relevant to this question, and not just me doing the usual "my language of choice is better":

1. Tooling and library ecosystem of Java is still better. There are tools for pretty much everything, including high-quality commercial offerings. For example, IDEs, profilers, build systems, other languages that run on the same VM. Nearly every major SaaS I have ever integrated with has a Java SDK.

2. Weight of big players behind the ecosystem. Big companies all over the world are heavily invested in Java. Even Google is still more invested in Java than Go (internally, and in Android, especially). This makes Java an insanely safe choice for us small players.

3. The many, many warts and deficiencies of Java (and parts of the Java ecosystem) are well-known. Experienced developers, at least ones with good taste, know how to mitigate them without pain. For us, a language with fewer warts, like Golang, is therefore not as big of a selling point. It's like getting your hands dirty. When your hands are clean, you are reluctant to make them dirty. When your hands are already dirty, touching dirty things is not a big deal.

4. Golang is not the only language evolving. Rapid improvements to the language and JVM are already here, and more, bigger changes are planned (e.g. Loom, Valhalla) that will nullify some of Go's advantages.

Re: Ask HN: Go programming language is over ten years old. What do you think of it?

#255
post #206

Earlier quoted context omitted.

Curious, what's your definition of a large system?

I'm not the person you're replying to, but I've had similar experiences with larger programs in golang. It's quite terrible to deal with, and overly verbose. I'd say anything more than 2000-3000 lines and golang becomes tedious to manage (and that isn't much given how verbose golang is).

Interesting. I currently maintain 2 repositories, 20k and 60k LOC, and I consider both applications fairly small as it's super easy to cruise its modules/files. In my books, a large system is probably around 500k LOC and I'm curious how that'd work with Go. It's all about project structure and organization of packages. A single file with 3k LOC is most likely unmanageable. 20 files with 150 LOC each is also not much helpful. However, 5 files with 600 LOC each is a much more balanced split. You are not getting lost in files and each file is of reasonable size. Obviously, it's not always possible and highly depends on application specifics, but I'm just trying to make a point. One should always strive for a project structure that doesn't require too much of a brain juice to comprehend the structure. Otherwise it's possible to get lost in 2-3k LOC regardless of a programming language.

Re: Ask HN: Go programming language is over ten years old. What do you think of it?

#256
post #253
post #252

Earlier quoted context omitted.

> That's one of the major recognized selling points of Go. It's exactly just that, marketing fluff and hype made up by the golang team that is not backed up by actual evidence. Look up several other comments in this thread that mention exactly that. I'm not the only one challenging their false claim. There were never any specific language features that make golang good for large projects. Quick compilation was touted…

You seem to be writing that a simple language is somehow harder to scale for large teams. My experience is the exact opposite - too expressive language make devs have different dialects and be too "clever" for the teams long-term good - and I'm pretty dumbfounded that you can try to make sense of that. > verbose and error-prone error handling Verbose (and consistent) is exactly what you want for large teams. What's e…

> You seem to be writing that a simple language is somehow harder to scale for large teams

I've worked on a large Scala program before, and because the team generally agreed not to let things get too crazy, it was very manageable. However, I've seen other programs in complex languages get out of hand.

There is a sweet spot in terms of language simplicity/complexity and usability. Make it too simplistic (like golang) and the low modeling ability and inexpressiveness of the language will result in shifting the complexity into the code and onto the programmer, there's no running away from it, it's just reality. IMO, languages like Java, C#, and Kotlin do a much better job at balancing features with modeling power and expressiveness, without sacrificing simplicity.

> Verbose (and consistent) is exactly what you want for large teams. What's error prone about it?

I've seen many instances where errors are ignored by mistake, e.g.:

    a, err := foo()
    if err != nil { ... }

    b, err := bar()
    // oops, error not handled and compiler doesn't complain
    
    c, err := baz()
    if err != nil { ... }
not to mention things like

   defer file.Close() // Error not handled
and more insidious occurrences (e.g. when was the last time you handled the error for fmt.Println()?)

Consistent is good, verbose just for the sake of being verbose isn't. And honestly golang is not that consistent (e.g. the entire nil interface is not nil issue is just bizzare)

> Do you have an example project that has problematic build times in Go?

At my employer, we use a monorepo and build with bazel. Builds routinely take several minutes, and even more on "less powerful" machines (e.g. 4 cores). Linking time is abysmal, and we routinely end up with 50+MB binaries. It's closed source so I can't share them.

Re: Ask HN: Go programming language is over ten years old. What do you think of it?

#257
post #206

Earlier quoted context omitted.

I'm not the person you're replying to, but I've had similar experiences with larger programs in golang. It's quite terrible to deal with, and overly verbose. I'd say anything more than 2000-3000 lines and golang becomes tedious to manage (and that isn't much given how verbose golang is).

Interesting. I currently maintain 2 repositories, 20k and 60k LOC, and I consider both applications fairly small as it's super easy to cruise its modules/files. In my books, a large system is probably around 500k LOC and I'm curious how that'd work with Go. It's all about project structure and organization of packages. A single file with 3k LOC is most likely unmanageable. 20 files with 150 LOC each is also not much…

I work on a program that is 100+ KLOC. It's quite atrocious honestly. I can't help but think that if it were written in Java, it would have been much shorter, probably at least 50% if not even more.

Re: Ask HN: Go programming language is over ten years old. What do you think of it?

#258
post #214

Earlier quoted context omitted.

> a GC that can has relatively smart defaults without having to tweak a ton of parameters Depends on the JVM being used > don't have to ship a vm You get to ship a runtime instead. Which Java also allows since around 2000, given how long commercial AOT compilers do exist for Java. > simpler language Java 1.0 was also Go simple, and just like Go does nowadays, full of code generation tools to work around that simplici…

> Depends on the JVM being used Is picking a jvm not tweaking a parameter?

Just like picking Go, gccgo, TinyGo, TamaGo or whatever might come down the line.

Re: Ask HN: Go programming language is over ten years old. What do you think of it?

#259
post #256
post #253

Earlier quoted context omitted.

You seem to be writing that a simple language is somehow harder to scale for large teams. My experience is the exact opposite - too expressive language make devs have different dialects and be too "clever" for the teams long-term good - and I'm pretty dumbfounded that you can try to make sense of that. > verbose and error-prone error handling Verbose (and consistent) is exactly what you want for large teams. What's e…

> You seem to be writing that a simple language is somehow harder to scale for large teams I've worked on a large Scala program before, and because the team generally agreed not to let things get too crazy, it was very manageable. However, I've seen other programs in complex languages get out of hand. There is a sweet spot in terms of language simplicity/complexity and usability. Make it too simplistic (like golang)…

> I've worked on a large Scala program before, and because the team generally agreed not to let things get too crazy, it was very manageable. However, I've seen other programs in complex languages get out of hand.

In my experience this kind of gatekeeping eventually breaks down due to deadlines and similar. There's also a slow rot that always creeps in, and unfortunately seniority doesn't always keep "clever" solutions and general over engineering out.

But it looks like we'll have to agree to disagree here.

> I've seen many instances where errors are ignored by mistake, e.g.:

It's true that there's sometime bugs due to mistyping err != nil sometimes. But I have not noticed that it's too often or that it's somehow is such a large problem that it out-weigh the benefits of the clarity and simple flow brings.

> At my employer, we use a monorepo and build with bazel.

Hard to compare with an anecdote like that, I just haven't heard much complaints regarding compile times, if anything the opposite, and certainly not that it's a significant problem in a pros/cons comparison.

Re: Ask HN: Go programming language is over ten years old. What do you think of it?

#260
post #259
post #256

Earlier quoted context omitted.

> You seem to be writing that a simple language is somehow harder to scale for large teams I've worked on a large Scala program before, and because the team generally agreed not to let things get too crazy, it was very manageable. However, I've seen other programs in complex languages get out of hand. There is a sweet spot in terms of language simplicity/complexity and usability. Make it too simplistic (like golang)…

> I've worked on a large Scala program before, and because the team generally agreed not to let things get too crazy, it was very manageable. However, I've seen other programs in complex languages get out of hand. In my experience this kind of gatekeeping eventually breaks down due to deadlines and similar. There's also a slow rot that always creeps in, and unfortunately seniority doesn't always keep "clever" solutio…

> In my experience this kind of gatekeeping eventually breaks down due to deadlines and similar.

I don't disagree. That's why I said the sweet spot is much closer to Java/C#/Kotlin.

> But I have not noticed that it's too often

That's the problem though. Those silent difficult to detect bugs are what affect reliability and safety. With exceptions, you're going to have to explicitly ignore them, whereas with golang errors, it's much easier to misuse them. Not to mention the fact that golang errors are basically strings, which makes dealing with them very error prone.

> Hard to compare with an anecdote like that, I just haven't heard much complaints regarding compile times, if anything the opposite, and certainly not that it's a significant problem in a pros/cons comparison.

My guess is that most people don't use golang for large projects, and few who do don't care about the long compile times.

Post reply on HN