Qs. Welcome and thanks for taking out time to share your thoughts. For the benefit of the readers, could you tell us something about your-self?

Josh: I’m an accidental engineer. I fell into it after dropping out of a Ph.D. program in philosophy. I co-founded card.io, a mobile computer vision company later acquired by PayPal.

Qs. Why and when did you decide to start working with Go?

Josh: I saw the initial public announcement, but foolishly ignored it.

Brad Fitzpatrick told me that Go made him enjoy programming again. I foolishly ignored him at first, but he wouldn’t shut up about it.

Eventually, I gave in, took the tour, and tinkered a bit. I didn’t like it; it didn’t match how I already thought. This is pretty typical, not just of languages, but also of tools, music, toothpaste, and other bikeshed flavors.

When I encountered something I didn’t like, I complained to Brad, and Brad convinced me that I was wrong. After the first few times, I started asking why something was designed the way it was rather than feeling annoyed. It was a tremendously useful (and humbling) experience. Learning Go changed how I think about the art and the craft of programming.

Qs. How should one go about learning the Go language? What material (books, eBooks, online tutorials etc.) would you recommend?

Josh: Excellent general resources:

The Go Tour.

The standard library docs. In addition to being The Standard Library, it is an exemplar of API design and documentation.

Be sure to experiment and write code all along, and ask good questions on golang-nuts.

Be patient and open-minded. The language is small, so you can get started quickly, but there’s a lot to learn about writing simple, clear, idiomatic code.

Qs. What best practices are most important for a new Go programmer to learn and understand?

Josh: Write simple, clear code. Ask for code reviews.

Qs. What has been your biggest challenge while working with Go?

Josh: Learning how to make effective use of concurrency. Go provides lovely, composable building blocks that are easy to reason about. The hard part is seeing what’s possible. https://www.youtube.com/watch?v=HxaD_trXwRE and https://www.youtube.com/watch?v=QDDwwePbDtw were both eye-openers for me. And once you start to see the possibilities, harder yet is to only use the fun toys when there’s a good reason to. Simple trumps clever.

Qs. What types of applications are currently being developed in Go and what changes do you foresee over the next year or two?

Josh: Go was designed with servers in mind, but it turns out to be broadly useful. The firmware for PayPal Beacon, a small embedded(ish) system, is written in Go. It has taken the devops world by storm: Docker, CoreOS, Kubernetes. Go QML opens up desktop applications. We’ll soon see Android applications written in Go, and (I hope) iOS apps as well. In the coming year, an important compiler–the Go compiler!–will be written in Go. And I suspect that the Go community has more happy surprises in the wings.

Thanks Josh for sharing your views with us. I am confident that your insights would help all the would-be Go programmers. In case you have any queries and/or questions, kindly post your questions here (as comments to this blog post) and Josh would be glad to answer.