Skip to content
0:00 / 0:00

#goproverbs#robpike#concurrency

Gopherfest 2015 | Go Proverbs with Rob Pike

The Go Programming Language

35K subscribers • 5 videos on Hallway

YouTube
  • Recommended by 2 people: 1 on Hacker News and 1 on Lobsters.
  • Presented by Rob Pike, co-creator of Go
  • An opinion. It argues one side of a question engineers disagree on.

Intermediate. Assumes working knowledge.

317K views10 years ago2 recommendations

Programming languagesSoftware designGoDesign patternsSimplicity and complexity

Rob Pike presents a set of pithy aphorisms about the design philosophy and idiomatic use of the Go programming language.

See the full list of proverbs here → goo.gle/38Uft1P Gopherfest 2015 Playlist → goo.gle/3jDyasP Subscribe to The Go Channel → goo.gle/go-subscribe #GoLang #Gopherfest

Why it's here

2 people recommend this

What people say. Highly recommended as a foundational guide to the philosophy, simplicity, and design patterns of Go.

Dawny33on Hacker News • Recommends

On “Go Proverbs: Simple, Poetic, Pithy”

Just in case you haven't read the footer text: The proverbs are based on this awesome talk by Rob Spike: link to this video And for new proverb ideas, you can open an issue here: link

inactive-useron Lobsters • Recommends

Go Proverbs - Rob Pike

dpflanon Hacker News • Mentions

On “Hello Go”

Indeed, taken from "Go Proverbs" - link "Concurrency is not parallelism." > Video: link to this video

mtalantikiteon Hacker News • Mentions

On “Pulumi – Modern Infrastructure as Code”

…ther last thought, I think a lot of the mindset in Terraform comes from Go, where the proverb "A little copying is better than a little dependency" is pretty well adopted. Before I started writing Go as my main language I didn't appreciate that mindset, but after 5 years with Go I've found it more and more appropriate 2. 1 link 2 link -- link to this video…

shadowgovton Hacker News • Mentions

On “Leveraging the Go Type System”

…ers this a feature, not a bug (and, conversely, considers "bare initialization" of structs at dozens of places in your code to be bad practice if that struct could ever grow new fields). If you're bare-initializing structs, you're comfortable using them in a "loosey-goosey" context where zero-initialized fields are permitted (or, better, useful... link to this video ). In Go, the issue of required structure is addressed by wrapping the struct in an interface and then providing a function in the package that can create an instance of the interface. Used in that way, you get something very similar to a Java class (though Go doesn't force you into the "everything is a class" paradigm that Java demands).…

jrockwayon Hacker News • Mentions

On ““Shared libraries are not a good thing in general””

Vendoring is when you just copy the dependencies into your own source tree, like in a third_party directory. Personally, I'm a big fan of just taking what you need. A little copying is better than a little dependency1. 1 link to this video

thegeekpirateon Hacker News • Mentions

On “Go 1.18”

You've also opened yourself up to bugs by allowing the map values to be "false". Using a "set's" value in an if statement doesn't make sense either, compared to if _, exists := somethingitem; exists { ... } which is explicit regarding what's actually going on. As Rob said, "Clear is better than clever." link to this video I also don't want to be hunting down whoever creates a mapTbool and doesn't leave a comment explaining it's a set ;) Hopefully we won't have to worry about it for much longer regardless, since I imagine we'll be using proper sets (with methods) some point in the near future.

paskozdilaron Hacker News • Mentions

On “Safety and Performance – Threadsafe Datastructures in C++”

Agreed. The problem with mutex is that it's often hard to get right, since it's a low-level primitive for serializing access to shared memory, and it does not compose (cannot atomically lock two mutexes). CSP/Actor model simply takes the problem that mutex solves on the low level - concurrency - and makes the whole world concurrent-by-default, so that mutexes are not needed. Note the 1st Go proverb 0: "Don't communicate by sharing memory, share memory by communicating." 0 link to this video

barsonmeon Hacker News • Mentions

On “No safe efficient ways to do three-way string comparisons in Go”

I think manual three-way comparisons are very clear. But so is strings.Compare. For better or worse, copying code is a pretty normal thing to do in Go. See "A little copying is better than a little dependency." 0 0: link to this video

Xeoncrosson Hacker News • Mentions

On “Redundancy vs. dependencies: which is worse?”

"The bigger the interface, the weaker the abstraction." - link to this video Abstractions are good if 1) they can't be any smaller and are 2) covering well understood processes warranting them.

rakooon Hacker News • Mentions

On “Virtual Threads Arrive in JDK 21, Ushering a New Era of Concurrency”

It's not so much part of the language but it's an idiom that is said by one of its authors ( link to this video ). "Code reuse" always has some non-compressible context: another import with a line in go.mod, another repo and dependency, which doc is going to be on another page/site, etc... It makes sense for big dependencies but not for small ones; the threshold where "small" becomes "big" being of course subjective.

rogierhofboeron Hacker News • Mentions

On “Rob Pike's 5 Rules of Programming”

I am missing a very important one: Don't communicate by sharing memory, share memory by communicating. link to this video And lot's of others here: link

kiricion Hacker News • Mentions

On “Rust’s dependencies are starting to worry me”

> This whole fiasco led me tho think .... do I even need this crate at all? 35 lines later I had the parts of dotenv I needed. "A little copying is better than a little dependency." - grab the parts that you need and then include the library only in a test to ensure alignment down the line, an idea I liked a lot. link to this video

pbohunon Hacker News • Mentions

On “A million ways to die from a data race in Go”

The first Go proverb Rob Pike listed in his talk "Go Proverbs" was, "Don't communicate by sharing memory, share memory by communicating." Go was designed from the beginning to use Tony Hoare's idea of communicating sequential processes for designing concurrent programs. However, like any professional tool, Go allows you to do the dangerous thing when you absolutely need to, but it's disappointing when people insist on using the dangerous way and then blame it on the language. link to this video

liampulleson Hacker News • Mentions

On “Don MacKinnon: Why Simplicity Beats Cleverness in Software Design [audio]”

"Clear is better than clever" is often touted as a key part of the Go philosophy: link to this video You can see the impacts of this in the language design. I find Go code to be boring and fairly easy to understand.

catlifeonmarson Hacker News • Mentions

On “A MitM proxy to see what your LLM tools are sending”

I don’t use stars to select dependencies FWIW. I look for age, CVEs and what other reputable projects depend on a repo. Also try to look for other signals, like if claims in the readme don’t match the implementation, or if there’s poor hygiene in the CI workflows. (And yes, I have gotten burned by an otherwise well meaning project with a supply chain vuln). As the saying goes “a little copying is better than a little dependency” (see: link to this video ).