Live data from Hacker News

Less is exponentially more (2012)

commandcenter.blogspot.com

81–90 of 102 posts

Re: Less is exponentially more (2012)

#81
post #76
post #73

Earlier quoted context omitted.

Unfortunately a substantial number of people seem to suffer from a type of concurrency Stockholm syndrome. They prefer explicit and awkward concurrency constructs, perhaps because until Go, mainstream languages like JavaScript, C#, and Python implemented hacks largely because of implementation constraints, so it's all they know. They say thinks like, "I prefer knowing exactly when I might block". Yet you never hear t…

Java is going a similar route (project Loom), but they'll be implemented in a better way. Things like timeouts in golang are awkard to enforce, and monitoring hierarchies are not built-in. Java's Loom is already getting both.

Getting getting getting, every time I head about how Golang is spanking other languages I see the "BUT MUH JAVA IS GETTING X IN Y $MONTHS".

If you really can predict the future please tell me lotto numbers rather than being abrasive.

Re: Less is exponentially more (2012)

#82
post #75

Earlier quoted context omitted.

> -- Compile times! golang compile times are similar for any non-trivial project. Ironically, they're even much worse than Java's for quick changes (e.g. change a single file then recompile to run tests) since golang has to spit out a binary that is in the 10s of MBs compared to Java which just needs to change a single class file. > -- Operational complexity vs. Go. The JVM is superior for operations, observability,…

Reading this, it honestly looks like you don't know how to write Golang and wish you could write more Java. That's fine but pretending you're an SME and throwing off false equivalencies is really dishonest.

I know how to write golang, which is why I'm well aware of its shortcomings and the issues its inferior design causes, and the costly bandaids that have to be implemented to poorly attempt to mitigate said issues.

Re: Less is exponentially more (2012)

#83
post #76

Earlier quoted context omitted.

Java is going a similar route (project Loom), but they'll be implemented in a better way. Things like timeouts in golang are awkard to enforce, and monitoring hierarchies are not built-in. Java's Loom is already getting both.

Getting getting getting, every time I head about how Golang is spanking other languages I see the "BUT MUH JAVA IS GETTING X IN Y $MONTHS". If you really can predict the future please tell me lotto numbers rather than being abrasive.

The irony is that golang was created to replace C++ at Google, yet it didn't even make a dent in its usage for serious products. C++ and Java remain the heavy lifters there, as well as at other major establishments, precisely because of reasons like performance and (on the JVM) monitoring. golang ended up being more of a Python replacement.

Re: Less is exponentially more (2012)

#84
post #83

Earlier quoted context omitted.

Getting getting getting, every time I head about how Golang is spanking other languages I see the "BUT MUH JAVA IS GETTING X IN Y $MONTHS". If you really can predict the future please tell me lotto numbers rather than being abrasive.

The irony is that golang was created to replace C++ at Google, yet it didn't even make a dent in its usage for serious products. C++ and Java remain the heavy lifters there, as well as at other major establishments, precisely because of reasons like performance and (on the JVM) monitoring. golang ended up being more of a Python replacement.

I'm not sure I understand the irony but keen to know what monitoring you are talking about?

Re: Less is exponentially more (2012)

#85
post #82

Earlier quoted context omitted.

Reading this, it honestly looks like you don't know how to write Golang and wish you could write more Java. That's fine but pretending you're an SME and throwing off false equivalencies is really dishonest.

I know how to write golang, which is why I'm well aware of its shortcomings and the issues its inferior design causes, and the costly bandaids that have to be implemented to poorly attempt to mitigate said issues.

Got an example repo you've worked on as happy to help work with the ecosystem rather than against it?

Re: Less is exponentially more (2012)

#86
post #83

Earlier quoted context omitted.

Getting getting getting, every time I head about how Golang is spanking other languages I see the "BUT MUH JAVA IS GETTING X IN Y $MONTHS". If you really can predict the future please tell me lotto numbers rather than being abrasive.

The irony is that golang was created to replace C++ at Google, yet it didn't even make a dent in its usage for serious products. C++ and Java remain the heavy lifters there, as well as at other major establishments, precisely because of reasons like performance and (on the JVM) monitoring. golang ended up being more of a Python replacement.

Go was never intended to replace C++. It was aimed at a very specific target: engineers, especially junior engineers, writing function-as-a-service software. Thread-based concurrency (as in logical thread of execution, not "kernel threads") with message-based synchronization, structural typing, and static compilation were their answers to what in their experience were the biggest impediments to writing good network software that could scale reasonably well using the most natural programming approach.

All of the original creators were clearly of the "best tool for the job, even if you have to build it from scratch" persuasion. How many different languages and programming constructs can you find on Unix or Plan 9? The notion of centralizing all development around a single all-purpose language, a la C++ or Java, is anathema to their stated engineering principles and the opposite of the design elements of the many computing environments they spent their careers designing and using.

One can quite easily disagree with their design choices and tradeoffs. I find static compilation short-sighted. But I do appreciate how it fits into their overall approach; and in that way I find static compilation less short-sighted in Go than in Rust. Some aspects of goroutines are problematic. Hassles with dealing with timeouts exposed flaws in their scheduling and message passing abstractions. But those flaws are in the details, not the fundamental model; and the better way to implement those details is more difficult to determine. (I've had to wrestle with such questions myself as I've written multiple async I/O libraries and frameworks. If Go had come out 10 years earlier my entire career trajectory may have been different.)

FWIW, I don't write any Go software. I admire it from a distance, the same way I admire C++, Rust, and Java[1], while I slave away in C and several other languages. Though, there's an honesty and clarity in Go that is lacking in other languages, precisely because Go isn't trying to be an all-purpose language, and because the authors have an understanding of (and deliberately leverage) the interplay between design goals and implementation constraints that can only come with having designed and implemented umpteen different languages before.

[1] I did have a short tryst with Java a long time ago, but it actually ended up driving me into the arms of C. Not because of the language, but because of the ecosystem--licensing, tooling, interop, etc, was an extremely poor fit for Linux, and in many ways still is.

Re: Less is exponentially more (2012)

#87
post #13

A few years ago I started to play with go. First impression was great. But a month or so in I started to having more and more doubts. As a Java/C++ programmer I was missing especially the generic collections. Slice and map are a good start, but not enough. Then one day I had to implement the swap operation for sorting. Again. And I thought that even C's qsort was better, and WTF am I wasting my time on this half-asse…

> I'm not working with an ecosystem where my human time is less important than the language philosophy. I want to express a repetitive pattern in the language, and then never think about dumb bureaucratics again. Writing code is not where time is spent. Repeating oneself, duplicating code, is fast and easy. Debugging someones code that felt like "expressing" themselves through it however, takes time, and a lot of it.…

Have you ever worked with sequences/iterators/generators or their abstractions? They make incredibly composable, portable, sound, and readable code. And most useful programs are built on patterns that can be optimally represented using them.

They're also impossible to implement and extend without generics.

If your mental model of writing a program is giving instructions to an abstract machine, generics may seem pointless. However if you're interested in representing a problem and its solution, and allowing the language tooling to translate that into an optimal list of instructions for an abstract machine - generics are pretty critical.

Re: Less is exponentially more (2012)

#88
post #78
post #75

Earlier quoted context omitted.

> -- Compile times! golang compile times are similar for any non-trivial project. Ironically, they're even much worse than Java's for quick changes (e.g. change a single file then recompile to run tests) since golang has to spit out a binary that is in the 10s of MBs compared to Java which just needs to change a single class file. > -- Operational complexity vs. Go. The JVM is superior for operations, observability,…

> -- Operational complexity vs. Go. The JVM is superior for operations, observability, and monitoring to anything that golang has to offer. >> Disagree on operations part. Take a bare machine and with various configurations (some you don't control) and be ready to drop and run. Nothing beats Go. You cannot be simpler than copy a binary. Yes, the JVM has all sorts of observability. And also a load of tuning that often…

Because of cargo cult of "must be web scale" and people that want to pump up their CVs to work at a FAANG.

All those projects are related to Docker and k8s, so naturally get written in Go.

Thankfully it is also possible to use Rust, C++, Java and .NET with them without writing a single line of Go.

Re: Less is exponentially more (2012)

#89
post #83

Earlier quoted context omitted.

The irony is that golang was created to replace C++ at Google, yet it didn't even make a dent in its usage for serious products. C++ and Java remain the heavy lifters there, as well as at other major establishments, precisely because of reasons like performance and (on the JVM) monitoring. golang ended up being more of a Python replacement.

I'm not sure I understand the irony but keen to know what monitoring you are talking about?

* https://openjdk.java.net/jeps/328

* https://www.baeldung.com/java-flight-recorder-monitoring

* https://docs.oracle.com/javase/tutorial/jmx/overview/javavm....

Re: Less is exponentially more (2012)

#90
post #82

Earlier quoted context omitted.

I know how to write golang, which is why I'm well aware of its shortcomings and the issues its inferior design causes, and the costly bandaids that have to be implemented to poorly attempt to mitigate said issues.

Got an example repo you've worked on as happy to help work with the ecosystem rather than against it?

It's a non-public code base.
Post reply on HN