Clicky

Philosophy, culture and design

Salih Muhammed. Contact: root@lr0.org

Prerequisites

  • Go is not always a good first-programming-language choice.
  • It’s better if you are familiar with programming.

Why Go Exists

  • Large codebases taking too long to compile (C++ builds taking hours)
  • Difficulty managing dependencies in existing languages
  • Complexity of modern languages making them hard to learn and maintain
  • Multicore processors becoming standard, but concurrency was Development

Primary Design Goals

  • Fast compilation
2025-11-30_21-05-35_screenshot.png
  • Easy concurrency
  • Simple syntax
  • Strong tooling
  • Efficient execution
  • Scale well

More on that on: Go at Google: Language Design in the Service of Software Engineering https://go.dev/talks/2012/splash.article

Go’s Core Design Philosophy

“Simplicity is complicated, but the clarity is worth it” - Rob Pike

  • Clarity over cleverness

    evens = list(filter(lambda x: x % 2 == 0, range(20)))
    
func EvenNumbers(n int) []int {
    result := []int{}
    for i := 0; i < n; i++ {
        if i%2 == 0 {
            result = append(result, i)
        }
    }
    return result
}

Cont. Go’s Core Design Philosophy

  • Composition over inheritance, always build complex things from simple parts
  • Explicit over implicit and no hidden behavior or magic.

    i = 42
    f = i + 1. 5  # Auto-converts int to float
    
    var i int = 42
    var f float64 = float64(i)  // Must convert explicitly
    
  • Consistency. Only one way to do things

Go is “Simple” But Not Small

“Simple” Means:

  • Small language specification (~50 pages vs C++’s 1,300+)
  • Only 25 keywords (vs Java’s 50+)
  • Limited type system compared to other modern languages

“Not Small” Means:

  • Rich standard library covering most common needs
  • Powerful concurrency primitives built-in
  • Complete toolchain included (formatter, test runner, profiler)
  • Can build anything from CLIs to web services to systems software

Less is (Exponentially) More

Go deliberately leaves out features found in other languages to keep the core simple. This means occasionally more verbose code, but code that’s easier to understand six months later.

  • Every feature has a maintenance cost for everyone
  • Features interact in unexpected ways (complexity grows exponentially)
  • Removing features is nearly impossible once added
  • A smaller surface area means easier onboarding and maintenance

Further Learning

  • Go Proverbs by Rob Pike
  • “Less is Exponentially More” - Rob Pike’s blog
  • Go specification (short enough to actually read!)
  • Effective Go (official documentation)

Some works I recommend engaging with:

I seek refuge in God, from Satan the rejected. Generated by: Emacs 30.2 (Org mode 9.7.34). Written by: Salih Muhammed, by the date of: 2025-11-30 Sun 16:58. Last build date: 2025-12-18 Thu 23:58.