FOSDEM is the biggest free and non-commercial event organized by and for the community. Its goal is to provide Free and Open Source developers a place to meet. No registration necessary.

   

Interview: Andrew Gerrand

Andrew Gerrand will present Practical Go Programming at FOSDEM 2011.

Could you briefly introduce yourself?

I'm an Engineer at Google Sydney working on the Go Programming Language. I have a long history as a programmer in the Internet industry, from billing systems to web start-ups, and I also have a keen interest in coding for old 8-bit platforms. My official title is Developer Advocate, and in practice I spend my time trying to make it easier for programmers to learn and use Go.

What will your talk be about, exactly? Will it differ from earlier 'Practical Go programming' talks?

In the talk I go through the full implementation of a web application in Go. As you can imagine, this touches on a lot of different aspects of Go. We'll look at syntax, built-in and user-defined data structures, concurrency primitives, disk I/O, and RPC. It's a talk for programmers that gets straight to the point.

It will be similar to the Practical Go Programming talks that I have given in Melbourne and Tokyo, but I have adjusted the focus of the talk to cover some new ground. The more often you do these things, the better they get, so I hope it will be better than ever by the time I get to Brussels.

How do you expect the FOSDEM audience to react?

The talk is designed to show Go as a practical language that is ready for use today. I hope the audience will start thinking about how they might use Go for their own projects. More than anything, I want to share my passion and excitement for the language with the hope that some of it will rub off.

Go's type system is 'lightweight'. What does this mean in practice?

Go doesn't have a lot of things present in most mainstream languages. It doesn't have classes, subtype inheritance, "protected" methods, or abstract types. The entire type system is defined by a small set of rules that are easy to understand and predictable in practice.

I think “lightweight” should be interpreted as “less to decide.” Some languages force you to make a lot of structural decisions about your program up-front. Go encourages you to think first and foremost about data structures and functions, which you can then organize into types and packages after the fact. This makes the path from prototype to production system shorter and more direct.

What's the most difficult part of Go to explain to others?

Go’s features are subtly different from those of other languages. At first glance, Go can seem odd. It’s only after using it for a while that you discover the subtle benefits of the language design. These things are easily recognized by users of the language, but are still hard to explain to newcomers. Over time I think I’m getting better at it, though.

Ho does Go fare when you blend it with libraries written in other languages?

We have good support for linking against C and C++ programs using CGO (part of the Go tool set), and SWIG. There are libraries available that link against a wide variety of existing C code, from curses to sqlite, and they work well. We recognize the importance of integrating new programs with existing systems, and have recently made some changes to CGO to make it easier to deploy Go programs that link against C libraries.

The Go toolchain is written in C. Any plans to make it bootstrap itself?

The compiler and linker are written in C, but the rest of the standard library and associated tools are written in Go. Making the language self-hosting is a laudable goal, but in practicality it won't help us make the language better for our users. In short, we have better things to do for the foreseeable future.

Right. So what's next for Go? Will it remain an 'experiment' or grow into something bigger? What about the ARM and Windows platforms?

Go is still young, but it's no plaything - we're in for the long haul. Go is gaining a large following in the open-source community, at Google, and at other companies. The Windows and ARM ports are both coming along nicely. It's early days yet, but we see bright things in Go's future.

Go is fairly young; what are the most interesting programs that you know are using it?

There are a few projects within Google using Go, but I’m not at liberty to discuss them here. Brad Fitzpatrick's recently announced Camlistore project uses Go heavily. It’s worth watching: www.camlistore.org.

Do you feel Google's culture is somehow reflected in the Go's design?

It's hard to define what constitutes "Google's culture," as the company is a lot more chaotic on the inside than it appears on the outside. Rather than the language design, it’s our development process (code reviews and the like) that reflects Google’s philosophy.

Thanks for these insights!