The Go Workbench
Bridging the chasm��adg@golang.org
The new user experience
New users don't understand our tools
Let's install Go.
Nice! That was easy!
Uhh… now what?
I guess I'll check the docs again.
Let's see now…
I don't want to read about "workspaces" just yet, but I can create a directory. OK.
Environment variables… that's like PATH right? I can do this… I think.
Hey, I understand this code. Go is cute!
Hm, "install" to build. I guess that works.
Oh look, I made it say "Hello, world". Cool!
Well, I suppose I should read that doc now...
Oh my gosh. What IS this?
I don't have time for this.
Maybe I'll just write a Python script.
(At least I understand that.)
Why is it so hard to get started?
There's nothing inherently complex about our tools,�they're just not what people expect.
The docs are even pretty decent.
New users just need a little hand holding to get started.
The intermediate user experience
Intermediate users love our tools…�once they know about them!
Intermediate users love our tools…�once they learn how to use them.
The go tool documentation is good, but it only documents some of the available tools.
Some of the go tool sub-commands are documented elsewhere in other ways.
Other tools are available only through "go get", and are documented on godoc.org.
There is no centralized point of reference for our tools.
The expert user experience
Expert users love our tools
But nobody is born an expert.
This document proposes a tool that unifies our tools and creates experts.
Filling the gaps
Assisting the transition: new -> intermediate -> expert
What if after this...
...the user could continue without reading a doc?
Introducing the "Go Workbench"
On first run, it guides the user through setting up a workspace.
Critically, it tells the user exactly what it did.
Hitting the ground running
Using the Go Workbench, a newcomer can get their workspace set up and start hacking on a basic program.
Other "project templates" could be provided, so that newcomers can get an idea of best practices. For example:
Experienced gophers might want to set up their own templates.
To address the discoverability problem,�the features of the various tools are made obvious in the UI.
Demo
Potential features
The scope for this tool is potentially huge.�I intend to keep the scope very narrow for V1.
Guiding principles
Non-goals
What do you think?
Let me know.
adg@golang.org