Skip to content

Latest commit

 

History

History
244 lines (181 loc) · 16.6 KB

README.md

File metadata and controls

244 lines (181 loc) · 16.6 KB

Important Reading

There is a ton of links to extra reading and videos through out the material. Occasionally we run into material that we feel is important and don't have an exact place to put it. This is a section place for that material.

Books

Go In Action - Kennedy, Ketelsen, St. Martin
Learn Go - Nathan Youngman

Blogs

Going Go - William Kennedy
The acme of foolishness - Dave Cheney
The Go Blog - Language Team
Ukiah Smith - Ukiah Smith
Mechanical Sympathy - Martin Thompson
Go Documentation References - Language Team

Interviews

An Interview with Brian Kernighan
Interview with Dennis Ritchie, Bjarne Stroustrup, and James Gosling
"C" Programming Language: Brian Kernighan

History

The Evolution of Go - Robert Griesmer
Language Design in the Service of Software Engineering - Rob Pike
A Very Brief History of Computing, 1948-2015 - Martyn Thomas
The Rise and Fall of Minicomputers - Gordon Bell
After Moore's Law - Economist - Tim Cross
A Crash Course in Modern Hardware - Cliff Click
The Future of Programming - Uncle Bob
The Best Programming Advice I Ever Got - Rob Pike
A Retrospective on SEDA - Matt Welsh
Software Development for Infrastructure - Bjarne Stroustrup
Let’s stop copying C - Eevee
15 Years of Concurrency - Joe Duffy
Normalization of Deviance in Software - danluu.com
The Future of Programming - Bret Victor
Systems Past: the only 8 software innovations we actually use - davidad
Lessons learned from reading postmortems - danluu.com

Contribute to Go

Contributing to the Go project - Matt Layher
Contribution Guidelines - Go Documentation
CONTRIBUTING: The Talk! - Michael Matloob

Standard Library

io package - Ben Johnson
bytes + strings packages - Ben Johnson
encoding package - Ben Johnson
strconv package - Ben Johnson

Testing and Structure

Structuring Tests in Go - Ben Johnson
Structuring Applications in Go - Ben Johnson
Advanced Testing with Go - Video - Mitchell Hashimoto
Advanced Testing with Go - Deck - Mitchell Hashimoto
The tragedy of 100% code coverage - Daniel Lebrero's
Logs and Metrics - Cindy Sridharan

Vendoring / Versioning

How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript
The End of Software Versions - Pieter Hintjens

Profiling, Debugging and Optimization

Profiling Go Programs - Go Team
Profiling & Optimizing in Go - Brad Fitzpatrick
Go Dynamic Tools - Dmitry Vyukov
How NOT to Measure Latency - Gil Tene
Go Performance Tales - Jason Moiron
Debugging performance issues in Go programs - Dmitry Vyukov
Reduce allocation in Go code - Python Bytes
Write High Performance Go - Dave Cheney
Static analysis features of godoc - Go Team
Go's execution tracer - Rhys Hiltner
Using Instruments to profile Go programs - Burcu Dogan
Designing for Performance - Martin Thompson
Fighting latency: the CPU profiler is not your ally - Filippo Valsorda
go tool trace - Will Sewell

Interfaces and Composition

Design Guidelines
Interface Pollution - Burcu Dogan
Abstraction Considered Harmful - Brave New Geek
Methods, Interfaces and Embedding - William Kennedy
Composition In Go - William Kennedy
Reducing Type Hierarchies - William Kennedy
Avoid Interface Pollution - William Kennedy

Buffer Bloat - 2011

Bufferbloat: Dark Buffers in the Internet - Jim Gettys
Buffer Bloat Videos

Linux

The Definitive Guide to Linux System Calls
Linux Performance Analysis in 60,000 Milliseconds - Netflix
Tenets of the UNIX Philosophy - Mike Gancarz
Monitoring and Tuning the Linux Networking Stack: Receiving Data - packagecloud
The Linux Scheduler: a Decade of Wasted Cores
Path: add BBR congestion control

Container and Orchestration

How To Deploy a Go Web Application with Docker - Kulshekhar Kabra
An introduction to Clear Containers - LWN.net
Getting Started with Docker - Docker
Kubernetes Bootcamp - Google

Distributed Systems

Notes on Distributed Systems for Young Bloods - Jeff Hodges
The Queen Does Not Rule - Deborah M Gordon
Load Balancing is Impossible - Tyler McMullen
Dapper: Distributed Tracing - Google

HTTP and Timeouts

Complete Guide To Go Net HTTP Timeouts - Filippo Valsorda

Queuing Theory

Basic Queuing Theory - Dr. János Sztrik

Misc

Shrink Your Go Binaries With This One Weird Trick - Filippo Valsorda
USENIX Association Videos
You wanted a banana but you got a gorilla holding the banana - John D. Cook
Latency Tip Of The Day -- Gil Tene
Proposal: Monotonic Elapsed Time Measurements in Go - Russ Cox
Exploring shared objects in Go - Marcelo Bytes
Evaluation of read-only slices - Russ Cox

Mechanical Sympathy

Much of this content can be found under arrays and data races. We feel this content is so important it has been moved out to this general materials page.

CPU Caches / Memory

CPU Caches and Why You Care - Video - Scott Meyers
CPU Caches and Why You Care - Deck - Scott Meyers
Mythbusting Modern Hardware to Gain 'Mechanical Sympathy` - Martin Thompson
What Every Programmer Should Know About Memory - Ulrich Drepper
How CPU Caches Work and Why - Joel Hruska
Modern Microprocessors A 90 Minute Guide - Jason Robert Carey Patterson
Memory part 2: CPU caches - Ulrich Drepper
The Free Lunch Is Over - Herb Sutter
Data Center Computers: Modern Challenges in CPU Design - Dick Sites
Wirth's Law - Wikipedia
Eliminate False Sharing - Herb Sutter
NUMA Deep Dive Series - Frank Denneman
The Myth Of Ram - Emil Ernerfeldt
Understanding Transaction Hardware Memory - Gil Gene
Want fast C++? Know your hardware! - Timur Doumler
Performance Through Cache-Friendliness (4:25-5:48) - Damian Gryski

Data-Oriented Design

Data-Oriented Design and C++ - Mike Acton
Efficiency with Algorithms, Performance with Data Structures - Chandler Carruth
Taming the performance Beast - Klaus Iglberger

Pitfalls of OOP - Tony Albrecht
Why you should avoid Linked Lists - Bjarne Stroustrup
Data-Oriented Design (Or Why You Might Be Shooting Yourself in The Foot With OOP) - Noel

Operating Systems and Virtualization

The Linux Scheduler: a Decade of Wasted Cores
The Cost of Virtualization - Ulrich Drepper
NUMA Deep Dive Series - Frank Denneman

Runtime

This content can be found under pointers. We feel this content is so important it has been moved out to this general materials page.

Stacks

Contiguous Stack Proposal
Fix corruption crash/race between select and stack growth - Russ Cox

Escape Analysis and Inlining

Go Escape Analysis Flaws - Dmitry Vyukov
Compiler Optimizations

Garbage Collection

The Garbage Collection Handbook
Tracing Garbage Collection - Wikipedia
Go Blog - 1.5 GC
Go GC: Solving the Latency Problem - Rick Hudson
Concurrent garbage collection
Go 1.5 concurrent garbage collector pacing
Eliminating Stack Re-Scanning
Why golang garbage-collector not implement Generational and Compact gc? - Ian Lance Taylor

Single Static Assignment Optimizations

GopherCon 2015: Static Code Analysis Using SSA - Ben Johnson
https://github.com/golang/go/blob/dev.ssa/src/cmd/compile/internal/ssa/compile.go#L83
https://godoc.org/golang.org/x/tools/go/ssa
Understanding Compiler Optimization - Chandler Carruth

Misc

Runtime Hacking
How does the golang scheduler work? - Ian Lance Taylor

Hardware

Learn how to build a processor

Release Notes

Open issues for the upcoming release

Go 1.9 Release Notes - 2017/24/17
Go 1.8 Release Notes - 2017/02/16
Go 1.7 Release Notes - 2016/08/15
Go 1.6 Release Notes - 2016/02/17
Go 1.5 Release Notes - 2015/08/19
Go 1.4 Release Notes - 2014/12/10
Go 1.3 Release Notes - 2014/06/18
Go 1.2 Release Notes - 2013/12/01
Go 1.1 Release Notes - 2013/05/13
Go 1.0 Release Notes - 2012/03/28

Research Papers

Interesting Papers - Damian Gryski
“Balls into Bins” — A Simple and Tight Analysis
Thoughts and links about programming - Russ Cox
Rules of Machine Learning - Martin Zinkevich