Skip to content

Instantly share code, notes, and snippets.

@jsteenb2
Last active November 7, 2024 18:13
Show Gist options
  • Save jsteenb2/922711d67d45b18373d7754c7d511753 to your computer and use it in GitHub Desktop.
Save jsteenb2/922711d67d45b18373d7754c7d511753 to your computer and use it in GitHub Desktop.
Go Learning Rubric

Go Learning Rubric

This rubric will be a fanciful place for sharing really excellent content. This content is a list of high quality resources that have stood tall. However, it is not meant to be exhaustive. There is much to learn beyond here! Let's dig in.

LEGEND:

  • πŸŽ₯ - video
  • πŸ’Ύ - source code
  • πŸ“• - book
  • πŸ“‘ - blog

Testing

Testing is ever so important. I can't stress this enough, think beyond your mocks. Think about the anatomy of your tests. Think about the lifecycle of your test code. Think about how tests become documentation. Here's some testing gems:

  1. TDD, Where Did it All Go Wrong - Ian Cooper πŸŽ₯
  2. Absolute Unit (test) - Dave Cheney πŸŽ₯
  3. Advance Testing with Go - Mitchell Hashimoto πŸŽ₯
  4. Go Testing by Example - Russ Cox πŸŽ₯
  5. Vice test suite - Mat Ryer πŸ’Ύ

Structuring Code

  1. How to Inherit a Mess Workshop - Johnny Steenbergen (me) πŸ’Ύ
  2. Idiomatic Go Tells a Story πŸŽ₯
  3. Preemptive Interface Anti-Pattern in Go - Jack Lindawood πŸ“‘

Concurrency

Go's concurrency is amazing to work with. Quite the paradigm shift from the way other most other languages.

  1. Concurrency in Go - Katherine Cox-Buday πŸ“•
  2. Concurrency is not Parellelism - Rob Pike πŸŽ₯
  3. Lexical Scanning in Go - Rob Pike πŸŽ₯
  4. Rethinking Classical Concurrency Patterns - Bryan C. Mills πŸŽ₯
  5. Go Concurrency Design Patterns - Rob Pike πŸŽ₯

Error Handling

  1. github.com/jsteenb2/errors πŸ’Ύ
  2. Go Lift - John Cinnamond (strucuting code to maximize dev ex and encapsulate correctness) πŸŽ₯
  3. Error Handling in Upspin - Rob Pike (amazing look at modeling errors in a real program) πŸ“‘

Generics

Generics are newish, and provide a ton of utility in Go. They are somewhat limited compared to some other languages, but in my experience, those same limitations stop folks from off the deep end :-).

  1. Generics Unconstrained - Roger Peppe πŸŽ₯
  2. Constraining Go type Parameter Pointers - Axel Wagner πŸ“‘
  3. Closures are the Generics of Go - Jon Bodner πŸŽ₯

Diagnostics

  1. Gophercon 2018 Performance Tuning Workshop - Dave Cheney πŸ’Ύ
  2. Profiling Go - Russ Cox πŸ“‘
  3. An Introduction to go tool trace - Rhys Hiltner πŸ“‘
  4. GopherCon 2021: Go Profiling and Observability from Scratch - Felix GeisendΓΆrfer πŸŽ₯
  5. GopherCon 2017: An Introduction to go tool trace - Rhys Hiltner πŸŽ₯
  6. More Powerful Go Execution Traces - Michael Knyszek πŸ“‘

Systems Thinking

Systems thinking teaches how to understand the importance of the relationship of components within a system. The easiest way I can think of to go from 0 -> Hero Engineer!

  1. Systems Thinking - go beyond the JIRA ticket πŸ“‘

Career Growth

At the end of the day, we work as engineers or programmers. Probably best that we understand how to function in a professional environment :-D.

  1. Real 10x Programmers Are SLOW To Write Code - Jayme Edwards πŸŽ₯
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment