# New Talk and Tutorials
5 May 2010
Summary: More materials for learning about Go: one talk, one codelab and one screencast.

Andrew Gerrand

##

Rob Pike recently gave a talk at Stanford's [Computer Systems Colloquium](http://www.stanford.edu/class/ee380/) (EE380).
Titled [_Another Go at Language Design_](http://www.stanford.edu/class/ee380/Abstracts/100428.html),
the presentation gives an overview of the itches Go was built to scratch,
and how Go addresses those problems.
You can view [a video stream of the talk](https://www.youtube.com/watch?v=7VcArS4Wpqk),
and [download the slides](http://www.stanford.edu/class/ee380/Abstracts/100428-pike-stanford.pdf).

Last week's release included a code lab, [Writing Web Applications](https://golang.org/doc/codelab/wiki/),
that details the construction of a simple wiki program.
It is a practical introduction to some fundamental Go concepts,
and the first of a series of Go code labs.

Lastly, we are often asked "How do Go packages work?" It's easier to show than to explain,
so I put together a [Go Packages screen cast](http://www.youtube.com/watch?v=jDWBJOXs_iI)
that demonstrates the process of writing,
building, installing, and redistributing Go packages.
I hope to post more of these covering a variety of Go programming topics
to the [gocoding YouTube channel](http://youtube.com/gocoding) in the near future.
