Live data from Hacker News

Go is not an easy language (2021)

arp242.net

31–37 of 37 posts

Re: Go is not an easy language (2021)

#31
post #29
post #23

Earlier quoted context omitted.

Yeah, I often wonder what threshold people use when they say they picked up a language in x hours/days/weeks. I guess it's largely a matter of opinion, but like you I consider a working understanding of the standard library, popular packages in the ecosystem etc. to be beginner level stuff, and for me it takes at least a few months to start getting a grasp on these things (especially in something like go which has a…

As you point out there's a lot to cover. There's the language, the libraries, and the tooling. Then there's learning how different people use the language. The stylistic elements, how to play to the strengths of the language, how to deal with the shortcomings etc. All that takes time because you have to gain some experience with all of this. Even the things you figure out aren't very good. The reason it took me a lon…

Do you think you’re doing Java correctly now?

Do you have reason to believe you won’t be looking back in 10 years’ time, realising you’ve been doing it wrong in 2024 still?

Re: Go is not an easy language (2021)

#32
I was quite unhappy when they added generics to golang. That seemed like a slippery slope to C++ or Rust like monster.

I much prefer the pre generics Go. Crisp and compact.

Go is like Prostaff 90 upgrade to the great PS 85. It is not the plasticky Babolat APD 100 that beginners love.

Re: Go is not an easy language (2021)

#33
post #24
post #12

Earlier quoted context omitted.

Go was designed to be easy to learn for inexperienced developers. Is it actually intended for systems programming? Its main (and intended) use seems to be a faster and better at concurrency and parallelism alternative to Python, Ruby etc.

Rob Pike was after C++ programmers initially, turns out that naturally the language isn't appealing to that community. > Although we expected C++ programmers to see Go as an alternative, instead most Go programmers come from languages like Python and Ruby. Very few come from C++. https://commandcenter.blogspot.com/2012/06/less-is-exponenti...

I messed around with Go early on but haven’t touched it since (I mostly do numerical work these days) but this tracks with what I expected from the language. It felt reactionary to the C++ monster. It felt like the early goal was to make the language as simple as possible, like C, and add quality of life improvements that don’t increase complexity, especially for parallelization with the go routines.

Re: Go is not an easy language (2021)

#34

This has been my argument since I started using it. It's definitely simple but the easiest stuff can be such a pain.

It's really the other way around : it's simple, which makes it not easy to use. The way Arch Linux defines simplicity is "Arch Linux defines simplicity as without unnecessary additions or modifications."[0] Go is simple because it only really has what you NEED. People complain about wanting this and that feature, but they don't really NEED it, it would just make writing code easier. Personally I love that because if…

But Arch let's me make my system as complicated as I want after providing the minimalist base layer. It gives almost total freedom in that respect.

I think it's more like a Lisp than Go.

Re: Go is not an easy language (2021)

#35
post #29

Earlier quoted context omitted.

As you point out there's a lot to cover. There's the language, the libraries, and the tooling. Then there's learning how different people use the language. The stylistic elements, how to play to the strengths of the language, how to deal with the shortcomings etc. All that takes time because you have to gain some experience with all of this. Even the things you figure out aren't very good. The reason it took me a lon…

Do you think you’re doing Java correctly now? Do you have reason to believe you won’t be looking back in 10 years’ time, realising you’ve been doing it wrong in 2024 still?

I don't think it is about doing it "correctly". I don't think there is a "correct". There's stuff that works and then there's stuff that is a waste of time. For many years, most Java practitioners wasted time doing things that don't actually work.

It is about finding a practice that works better than the other ways that you have been exposed to and then try to figure out if you can write it down and explain it in a way that makes other people more productive and more capable of producing quality. Of course, that requires you to be exposed to a lot of practices and having the ability to figure out if they work. Not all programmers have that ability.

Some people find plateaus that are better than other plateaus. If you teach other people what you do then sometimes people think of that as the way to do it until someone else improves on it. Or someone finds an entirely new direction to go in that is perhaps even better.

> Do you have reason to believe you won’t be looking back in 10 years’ time, realising you’ve been doing it wrong in 2024 still?

A lot of the thinking that went into how we did Java evolved slowly over a couple of decades and we eventually started seeing people come around to our point of view. We just started a bit earlier than most. And it wasn't just informed by how we did Java. A lot of ideas came from how we did things in other languages as well.

Things like avoiding large frameworks that lock you in and dictate design choices, embedding servers rather than loading the application into the server (which never actually worked), or even making self-contained applications that have no external dependencies, were, to varying degrees, controversial at different points in history. Even the idea of treating servers like cattle rather than pets was controversial at some point.

Some of the things we spent a lot of time thinking about I don't see wide spread awareness of. Like designing for evolvability which is very, very different from over-engineering. Those bits are still hard to explain - and especially when people have short attention spans. But they are just as important today as they were 15 years ago. (I'm still terrible at explaining how we design for evolvability)

(I stopped doing Java around 2016. But most of the practices we developed live on in how we do Go. I think the reason switching to Go was so easy and happened so fast was that Go was very compatible with what we tried to do in Java)

Re: Go is not an easy language (2021)

#36
post #26

Go is so minimalistic that it forces developers to reinvent the same things again and again. Just think about how common certain collection operations are and how easy they are in some languages (e.g. Java, Kotlin, C#, Rust), but in Go you'd write list and for loops like in the last century. This wastes developer time, makes the code harder to understand and adds chances for bugs. So, this cite applies to Go: “Everyt…

As someone dabbling in Go, still a n00b really, but experienced in many other languages, I find this too, why's there stuff that's just standard in e:g Python, yet missing in Go? Apparently a thought-out, deliberate decision by the language designers. But then, since many people feel this way about Go, I'm mystified that 3rd-party libraries haven't evolved to cover "missing features" of Go. One would think, someone w…

There are some libraries that add the kind of utility functions you're talking about; I'm fond of samber/lo [1] myself. I don't know how widely used they are, though.

[1] https://pkg.go.dev/github.com/samber/lo

Post reply on HN