Skip to content

Latest commit

 

History

History
209 lines (150 loc) · 13.5 KB

README.md

File metadata and controls

209 lines (150 loc) · 13.5 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

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

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

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

Interfaces and Composition

Design Guidelines
Composition - William Kennedy
Interface Pollution - Burcu Dogan
Abstraction Considered Harmful - Brave New Geek

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

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

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

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

Escape Analysis and Inlining

Go Escape Analysis Flaws - Dmitry Vyukov
Compiler Optimizations

Garbage Collection

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

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

Release Notes

Open issues for the upcoming release

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

DINAMITE: A modern approach to memory performance profiling
GoHotDraw: evaluating the Go programming language with design patterns - ACM
Blade : A Datacenter Garbage Collector - David Terei
Text Understanding from Scratch - Xiang Zhang, Yann LeCun
Model Checking of Fault-Tolerant Distributed Algorithms? - Vienna University of Technology
The Modelling and Analysis of Security Protocols: the CSP Approach