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

Hana: I am from Seoul, moved to the USA for graduate studies, and now work in Google NYC office. I am one of the core developers of the Go Mobile project. Previously, I worked on Google internal projects, such as building support for Google production use of Go. Before joining the Go team, I worked on projects building Google’s cluster monitoring/alerting systems, and distributed performance debugging tools, and wrote a lot of C++ code.

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

Hana: I was originally skeptical about Go. Why do we need another language? I even rejected my former coworker’s proposal to use Go for a new service, because I thought Go was not ready for serious production services. Later I was looking for a new project and I found out the Go team was looking for a C++ engineer for a new project. It was about enabling Go and other languages to access existing Google tech infrastructure mostly written in C++. I thought it’s cool and joined the team. I maintained a library that was written in C++, Java and Go. The Go version was much simpler than others while doing a lot more things. Excited, I started learning it and fell in love with it immediately. It’s practical while fun.

Qs. What are you currently working on?

Hana: I am working on the Go Mobile project. Now, I am mostly focusing on the use of Go to develop libraries for mobile apps. Together with David Crawshaw and Burcu Dogan, I developed build tools to simplify the library build process. I will continue to improve the tools and build/test infrastructure. When I have free time, I also work on Ivy apps and think about next mobile apps.

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

Hana: Go tour was the first thing I did. Then I read Effective Go to learn about idiomatic Go. For more advanced topics, check out the wiki page. Once you write code, think about sharing your code with other people and asking for reviews and comments. I learned a lot through the code review process.

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

Hana: Write Go like Go. Many things that were hard or impossible in other languages are easy in Go. What we learned from other languages are often unnecessary in Go. Forcing Go to follow the style from other languages will diminish the strength of Go and produce unreadable code.

Qs. Which areas in Go should a would-be Go developer concentrate on, in your opinion?

Hana: Go offers many cool features that allow us to write more intuitive and powerful APIs. Take advantage of them when designing APIs.

For example, goroutines and channels allow us to easily perform asynchronous tasks with synchronous APIs. Support for multiple return values allows us to avoid in-band error values (e.g. -1 or null for error). Interface composition allows us to define small interfaces. You don’t need to design your APIs like in OO languages. Go test allows access to unexported methods and variables, so it is possible to write good tests without polluting the APIs.

Go comes with various useful tools. It is important to learn about them and take advantage of them. I use ‘go doc’ to check how my package looks. It is not only about documentation. If my package looks ugly in go doc, it’s likely that I need more thought on the APIs.

Qs. What are the pros and cons of Go that are being discussed in the development community and what is your opinion on that?

Hana: Pros — Simplicity is often mentioned as the strength of the language. It made the language more approachable. I love Go’s tools (“gofmt”, “go vet”, “goimports”, …). Simplicity enabled many of these useful tools to be written relatively easily. Gobind from the mobile project is another tool that benefited from the language’s simplicity.

Cons — Missing generics? I was a big fan of templates when I was a C++ programmer, and I even felt proud of myself that I could use advanced template features to produce short code. Yeah, I sometimes miss generics, for example, when I had to deal with non-trivial third-party packages for numeric analysis offering only float64 support. But, most of the time, I rarely think about generics. Supporting generics while not sacrificing the language’s simplicity is a big challenge. We need to be very careful about it.

Qs. Most beginners in Go would like to contribute their time, skills and expertise to a project but invariably are unaware of where and how to do so. Could you suggest some?

Hana: Most projects appreciate contributions to improve documentation and test coverage. Start with projects in the domains you are already familiar with. What I miss from Python is the rich collection of packages and tools accumulated over a long period of time. The Go community could certainly benefit from contributions from more diverse areas.

The Go mobile project also welcomes contributors, but like many other projects, Go has its own project contribution guidelines. Read them first and follow the guidelines — e.g., discuss your design and plan before jumping into CLs.

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

Hana: My biggest challenge was to deal with the legacy systems written in C++ or other languages. When I joined the team, Go was still a young language and used by a relatively small number of adventurous users. Back then, much of Google’s technical infrastructure required access through thick client libraries written in C++. Re-implementing them all again in Go was not practical. The situation has improved as more engineers started using Go, and new projects start to use Go early or offer good, language-agnostic APIs.

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

Hana: Mobile apps. :-) It is still experimental, but we have already started seeing mobile apps that use Go. Over the next year or two, I hope people will consider Go as an attractive alternative to C/C++ in mobile app development.

Qs. How do you see the market for Go Programmers in the work place? What is the future for Go?

Hana: I think it will continue to grow. I am probably biased, but I am seeing fast growth already. This year GopherCon 2015 in Denver, USA had ~1250 attendees. The hallway was filled with company booths that are using Go and hiring Go developers. Even people who were originally skeptical about Go are reconsidering, largely due to all the recent success stories from the industry, and many are taking Go much more seriously.

Qs. How excited are you about GopherConIndia 2016?

Hana: Very excited! I always wanted to visit India, and finally I am visiting! My friends who worked with companies and engineers in India told me a lot of exciting good things — fast growing markets, smart engineers and designers whose first programming experience are mobile apps, scale, etc. I am so excited to meet people there and learn about their experience. And all the spices and food!

Qs. Do you have any other suggestions for our readers?

Hana: Start to play with Go now, if you didn’t get a chance yet. Until I wrote Go code myself, I didn’t fully appreciate the strength of the language, no matter how many articles I read. Even if it initially appears that some features available in other languages are missing, don’t give up yet. Check how other gophers approach similar problems — e.g., by browsing the source code of standard libraries and well-known packages. I often find more idiomatic ways that I’ve never thought about. I am also still learning. https://godoc.org and https://golang.org are my most visited websites.

Thank you, Hana, for sharing your views with us. I am confident that your insights would help all the would-be Go developers. In case you have any queries and/or questions, kindly leave a note here and Hana would be glad to answer.