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 one way to bridge this gap, aiming to make Go accessible to a broader audience.
Details (this was the part that only goes to the selection committee)
This talk is about helping developers from non-traditional backgrounds be successful learning Go. It is a practical talk, structured around code examples. Each example explores practical, stylistic, and theoretical aspects of Go.
Go has a reputation for being hard core. This is alluring to some people, and intimidating to others.
There's a perception that Go is not just hard core, but hard. There's a notion that learning Go requires a serious understanding of computer science fundamentals.
Paradoxically, this is both true and not true. Many resources about Go tackle it via its theoretical underpinnings. But Go is simple and consistent. Deep knowledge of programming theory should not be a prerequisite to learning the language. Rather, learning Go is an excellent way to improve ones understanding of these concepts.
I've had a lot of success easing people into the language by giving them frequent, small wins. For people who feel intimidated, this removes the psychological barrier to getting started. Lacking a foundation in computer science is no obstacle. The exercises are tiny, but the lessons that they teach are significant. Having wrestled with a problem, the theory behind the solution becomes relevant and interesting.
For example, one exercise asks the developer to add a billion seconds to a timestamp. This is not a hard thing to do, and yet people find creative ways to solve this. Because they are unfamiliar with Go it forces them to hunt around in the standard library. They learn about
time.Duration and Go's support for scientific notation. Judicious socratic questioning leads people to discover--and understand--Go's untyped constants.
It doesn't take long for developers to start writing code that looks and smells like Go. This fluency with the basics gives them the confidence to explore Go in more depth.