Two recent Go articles
6 Mar 2013
Tags: google, talk, ethos

Andrew Gerrand

* Introduction

In today's blog post I'd like to highlight a couple of recent articles about Go.

* Go at Google

In October last year, Rob Pike presented a keynote at the ACM [[http://splashcon.org/2012/][SPLASH]] conference in Tucson. The talk, titled [[http://talks.golang.org/2012/splash.slide][Go at Google]], was a comprehensive discussion of the motivations behind Go. Rob later expanded on his talk to produce an essay titled [[http://talks.golang.org/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering]]. Here is the abstract:

	The Go programming language was conceived in late 2007 as an
	answer to some of the problems we were seeing developing
	software infrastructure at Google. The computing landscape
	today is almost unrelated to the environment in which the
	languages being used, mostly C++, Java, and Python, had been
	created. The problems introduced by multicore processors,
	networked systems, massive computation clusters, and the web
	programming model were being worked around rather than
	addressed head-on. Moreover, the scale has changed: today's
	server programs comprise tens of millions of lines of code,
	are worked on by hundreds or even thousands of programmers,
	and are updated literally every day.  To make matters worse,
	build times, even on large compilation clusters, have
	stretched to many minutes, even hours.

	Go was designed and developed to make working in this
	environment more productive. Besides its better-known
	aspects such as built-in concurrency and garbage collection,
	Go's design considerations include rigorous dependency
	management, the adaptability of software architecture as
	systems grow, and robustness across the boundaries between
	components.

This article explains how these issues were addressed while building an efficient, compiled programming language that feels lightweight and pleasant. Examples and explanations will be taken from the real-world problems faced at Google.

If you have wondered about the design decisions behind Go, you may find your questions answered by [[http://talks.golang.org/2012/splash.article][the essay]]. It is recommended reading for both new and experienced Go programmers.

* Go at the Google Developers Academy

At Google I/O 2012 the Google Developers team [[http://googledevelopers.blogspot.com.au/2012/06/google-launches-new-developer-education.html][launched]] the [[https://developers.google.com/academy/][Google Developers Academy]], a program that provides training materials on Google technologies. Go is one of those technologies and we're pleased to announce the first GDA article featuring Go front and center:

[[https://developers.google.com/appengine/training/go-plus-appengine/][Getting Started with Go, App Engine and Google+ API]] is an introduction to writing web applications in Go. It demonstrates how to build and deploy App Engine applications and make calls to the Google+ API using the Google APIs Go Client. This is a great entry point for Go programmers eager to get started with Google's developer ecosystem.
