GothamGo Program

Russ Cox

Russ Cox

@_rsc

Russ Cox has helped to create the Go Programming Language since 2008, when the language was still just a prototype. His work there started with the Go compiler and runtime, and developing Go's standard library. Today, he is a co-Tech Lead for the Go project and the Go team (a role he shares with Rob Pike).

The Challenges Facing Go

The challenges facing Go and the overall direction we're headed.

Katrina Owen

Katrina Owen

@kytrinyx

Katrina Owen is an open source advocate at GitHub. She accidentally became a developer while pursuing a degree in molecular biology. When programming, her focus is on automation, workflow optimization, and refactoring. She works primarily in Go and Ruby, contributes to several open source projects, and is the creator of exercism.io

Mind the Gap

How do you learn Go? First do the tour. Then read the language spec. Then write a lot of code. This works for a lot of people, but for some the gap between the tour and the spec is a vast chasm.

In his GopherCon 2015 keynote, Russ Cox said: “Go needs everyone’s help, and everyone isn’t here.”

This talk draws on two years of iterative exploration. It examines three ways to bridge this gap, aiming to make Go accessible to a broader audience.

Fatih Arslan

Fatih Arslan

@fatih

Fatih Arslan is a Software Engineer at @DigitalOcean. Gopher and Coffee geek, he is the author of vim-go and several popular Go packages. He has contributed to numerous open source projects, such as Go, Terraform, and HCL. Have a look at his open source projects on GitHub.

How to write your own Go tool?

Go tools are very powerful and yet simple to use. But how are Go tools created? In this talk I’m going to answer this question by showing the various Go parser family packages (go/token, go/scanner, go/parser, etc…) and how to use them to create your own Go tool from scratch.

Peggy Li

Peggy Li

@_peggyli

Peggy Li is a software engineer on the Infrastructure team at Clever, which builds a platform that connects K-12 students and teachers to educational software. She previously worked on deployment tooling at LinkedIn and graduated from Duke with a double major in Computer Science and Economics. Outside of work, she enthusiastically participates in Women Who Go events and takes blurry photos of her plush gophers.

To Go or Not to Go?

We often hear repeated themes about why engineers and companies like Go: static binaries, cross-compilation, fast build times, concurrency, great community, etc. As a gopher, it’s easy to keep “drinking our own Kool-Aid,” but for a small team building an initial prototype, is the switch worth it? Does it make sense to jump aboard the Go ship when nobody on the team has past experience in Go?

Using the right tool for a job means being able and willing to recognize that the right tool may be different for different people. This talk takes a step back and critically considers when to use Go… and when gasp another language or framework might be a better choice.

Aditya Mukerjee

Aditya Mukerjee

@chimeracoder

Aditya Mukerjee is an engineer at Stripe on the Risk team, based in New York City. He studied statistics at Columbia and computer science at Cornell, and has been writing Go professionally for the past four years. When not defending users against online fraudsters, he spends his free time playing German-style board games and listening to embarrassing music.

Cloning Git in Go

Gitgo began as an experiment: how would programming today be different if Git had been written in Go instead of C?

The result: an implementation of Git that is compatible with existing Git repositories, but simpler, more portable, and fast enough to be used as a general-purpose data store. With Gitgo, Git is no longer just for managing source control. Go makes Git a practical choice for content distribution, distributed build systems, establishing consensus, and more.

Aditya Mukerjee

Tiffany Jernigan

@tiffanyfayj

Tiffany Jernigan is a software engineer currently consulting for Docker. She previously was at Intel Corporation as a cloud software engineer in the Software Defined Infrastructure (SDI) group and is a graduate from the Georgia Institute of Technology. After pursuing a career in electrical engineering, she decided to transition to software engineering. When Tiffany is not writing software, she is learning French, reading mystery novels, in the gym practicing gymnastics, or spending time with family and friends.

How to Raise a Gopher in Record Time

As an electrical engineer, both in college and at work, my exposure to software development was limited. I have been interested in software development, began learning on my own and then I got an opportunity to shift at work. The team I joined was writing code in Go and I had a lot to learn quite quickly. For those who are new to Go and learning the language, having the right resources, especially early on, can make all the difference. Without knowing where to find them, a lot of time can be spent searching. I want to share what helped me accelerate my learning, which is not over, by the way, and never will be.

Abel Mathew

Abel Mathew

@nullisnt0

Abel Mathew is the co-founder and CEO of Backtrace I/O, where he and a team of folks are working on changing the way software is debugged and maintained. Prior to Backtrace, Abel was a Head of Engineering at AppNexus where he led a team of developers to improve ad optimization and reduce platform-wide costs. He spent multiple years as a developer and a team lead on AppNexus’ Adserver Team where he helped design and implement their low-latency advertising platform. Before AppNexus, Abel was a kernel module and tools developer at IBM and a server room monkey at AMD.

Building a Go Debugger

Building a Go Debugger walks through the journey of building a debugger with first-class support for Go. The talk will briefly describe what a debugger is and how it works on Linux, ELF-based systems. We’ll then build off this to dig deep into some of the complex issues encountered. These issues include the encoding of debug information for complex Go types, extracting and unwinding goroutines and their state, extracting global and per-processor run queues and more. Finally, we’ll end with some of our motivations behind these efforts and the insights we’ve gained from them.

Cassandra Salisbury

Cassandra Salisbury

@cassandraoid

Cassandra Salisbury a core team member at GoBridge where she spearheads the partnerships and chapters initiative. She currently serves as the lead organizer (and MC) for GoSF, the largest Golang meetup in world, and organizes Gopherfest in San Francisco. Cassandra specializes in developer technologies and is the Head of Communications and Community as part of the founding team at Netlify.

Dissection of Gophers: The history and (possible) future of the Golang Community

In this talk we will start by exloring the Go community with statistics on rate of growth, language comparisons, and diversity. Many people say that technology today as a whole is not diverse, therefore of course you would expect a programming language’s diversity level would be low as well. We will explore the impact diversity has on innovation and creativity. Then looked at solutions other communities have proposed and take notes on what worked well for them and then see if we can implement similar solutions. Lastly we will talk about what Golang can do to become a more approachable, welcoming language as a whole. Let's scrutinize ourselves and see where we can make the most improvements to create a holistic message of inclusivity.

Mat Ryer

Mat Ryer

@matryer

Mat Ryer has been coding since he was six years old where he would copy code out of computer magazines with his father before hacking away at the programs to see what might happen. That same spirit lead him to start programming in Go before its v1 release (when os.Error was still a thing) after falling in love with its simplicity and elegance. He’s a regular contributor to open-source projects (Testify, Silk, Moq, BitBar) and writes about Go on his blog (matryer.com). In 2015 he published Go Programming Blueprints Go Programming Blueprints and is following it up with a Second Edition.

Today he works for GrayMeta but can often be seen and heard speaking at conferences around the world, making jokes that, out of sheer politeness and respect, the audience remain silent to.

Quality Tests in Go

Automated tests help keep quality high, protect from regression, and provide a form of clear and correct documentation about the expectations people can have about your code. The founders of the language knew this, which is why testing in Go is a first class concern. This talk takes you on a whirlwind tour of quality testing in Go; the good, the bad and the fugly. When Alfred builds Batman’s vehicles, weapons and pants, there is no doubt he practices TDD (Test Driven Development). You never hear Batman say, “Alfred, can you revert that last pull request, my utility belt is way too tight!"

Abel Mathew

Cindy Sridharan

@copyconstruct

Cindy Sridharan is a Python developer who learned Go in the fall of 2015. She is interested in operations, infrastructure and systems programming - three fields where Go is rapidly becoming the lingua franca. She lives in San Francsico where she organizes the Prometheus meetup.

Demystifying Channels

Simple concurrency is one of Go's greatest strengths and the reason behind its appeal to many developers. Goroutines and channels are Go's cornerstone primitives that provide an elegant, succinct and easy to reason about way to structure concurrent programs. However, in the recent months, many seasoned Go developers have come out against the use of channels. "Don't overuse channels!". "Don't be clever with channels!" "Don't abuse channels - use a mutex instead!" "Don't use channels as queues!"

This talk aims to understand the design, internals and implementation details of channels and its CSP underpinnings. We will then look good API design both in the standard library and large, popular open source projects written in Go where the use of channels enabled the development of clean and clear abstractions while not sacrificing performance. We'll identify the common use cases and patterns where the (ab)use of channels actually hurts performance and reliability. We will look at how these issues can be circumvented either by better use of channels or by avoiding channels altogether.

Abel Mathew

Jon Morehouse

@jonmorehouse

Jon Morehouse is an infrastructure engineer at BuzzFeed. Before falling in love with programming, he studied Aerospace Mechanical Engineering and Pre-med at the University of Southern California. These days, outside of work he spends most of his time cooking, exploring deep learning and building things in Go or Rust. You can find his open source contributions on GitHub.

5 Times Go was Totally Perfect for BuzzFeed's API Gateway

Over the past 18 months, we've transformed the way software is built and deployed at BuzzFeed. A major component in this evolution was the migration from a large monolithic application to a service-oriented architecture. Distributed systems with lots of moving parts have a distinct set of communication challenges such as authentication, rate limiting and request tracing. An API Gateway is a centralized approach to communication between services, providing tooling for these problems. After an initial release in Python, we recently rewrote our API Gateway using Go, because of its great concurrency features, performance, and robustness.

Brad Fitzpatrick

Brad Fitzpatrick

@bradfitz

Brad Fitzpatrick works for Google as a Staff Engineer and is a member of the Go programming language team. He is also the author of numerous open source projects including memcached, gearman, groupcache, PubSubHubbub, OpenID and Camlistore. Brad is the creator of LiveJournal, one of the earliest blogging platforms.

How the Go Project Operates

A tour of all our tools and processes; code reviews, bots, tests, builders, proposals, triage, etc.