# New Talk and Tutorials
5 May 2010
Summary: 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).

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.
