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?
Nathan: This year I started the Edmonton Go meetup and I’m the current maintainer of fsnotify. My career spans eight years with Ruby on Rails, preceded by eight years of ColdFusion. I write about programming at nathany.com.
Qs. How should one go about learning the Go language? What material (books, eBooks, online tutorials etc.) would you recommend?
Nathan: Start with golang.org - the articles and documentation are authoritative and well-written. There aren’t many books in print, but more are on the way. Watch a talk or screencast, and join a local meetup. Most importantly, pick a small project and write some code.
Qs. What best practices are most important for a new Go programmer to learn and understand?
Nathan: Most best practices cross language boundaries. Write small things that compose well, document what you export, don’t be clever. Code for today, don’t guess the future. Write tests for confidence and take time to refactor.
Learn what idiomatic Go looks like. The best way is to read code - just don’t read mine!
Qs. What are the pros and cons of Go that are being discussed in the development community and what is your opinion on that?
Nathan: Such conversations tend to focus on what Go omits, whether it be inheritance, exceptions, generics or a centralized package repository. Oh my!
I see these omissions as a benefit, but I’ve been looking for language that gets simplicity right.
This quote is from The Evolution of Lua, but I think it applies equally well to Go:
“It is much easier to add features later than to remove them. This development process has been essential to keep the language simple, and simplicity is our most important asset. Most other qualities of Lua — speed, small size, portability — derive from its simplicity.”
If Sapir-Whorf applies to programming languages, I hope learning Go will lead to simple code and simple products. Our colleagues and users will thank us.
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?
Nathan: Look at your dependencies and what you use - and don’t be afraid to challenge yourself. I started working on fsnotify because I was writing an autotest tool, even with nascent knowledge of file system notifications. My first contribution to Go had a fair learning curve, but it was incredibly rewarding as well.
Or just scratch an itch - I contributed to GoDoc because I wanted a badge for my README.
Qs. What has been your biggest challenge while working with Go?
Nathan: Pointers. When to use them, when not to, and how they interact with the rest of the language.
Qs. What types of applications are currently being developed in Go and what changes do you foresee over the next year or two?
Nathan: Command line tools, desktop apps, Android games… and robots like Go too. Is there any place it won’t go?
Go has become the language of cloud infrastructure, that much is clear. As libraries and learning resources improve, I expect Go will continue up the stack, with more companies building entire web apps in Go.
Qs. How do you see the market for Go Programmers in the work place? What is the future for Go?
Nathan: Ultimately, I think programmers who love Go will find a way to make it (part of) their day job. Whether that means convincing a boss or client to use Go for a new project, moving on to another job, or becoming the technical co-founder of something new.
I really hope to see Go break into education. Go feels like a good first or second language. A language suitable for low-level tinkering while learning how computers work, but without the complexity of multiple inheritance or metaprogramming magic.
Qs. Do you have any other suggestions for our readers?
Nathan: The web is a wonderful open platform. For all the servers you’re running, Go is a solid choice.
It’s great to see the community and ecosystem around Go flourishing. Thanks for taking part in it.
Thanks Nathan 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 Nathan would be glad to answer.Tweet