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 [[https://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 [[https://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.
