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?
Matt: I’m a backend engineer mainly working on distributed systems and infrastructure at Hailo, London. I also contribute to a number of open source projects and teach a back-end web development course at General Assembly.
Qs. Why and when did you decide to start working with Go?
Matt: I was introduced to Go in early 2013 by one of my colleagues, but it wasn’t until mid 2013 when we started developing some backend services that I really got into the language. Now I’d never go back!
Qs. How should one go about learning the Go language? What material (books, eBooks, online tutorials etc.) would you recommend?
Matt: The Go tour is a fantastic introduction to the language, and for more experienced developers Effective Go gives you idiomatic ways to achieve common tasks. There are also lots of blogs, such as gopheracademy.com - the Go Advent series in particular was really interesting. Beyond that I learn best by doing, so finding a small project to tackle in Go really helped me learn the language.
Qs. What best practices are most important for a new Go programmer to learn and understand?
Matt: I’d say that object composition and structuring code into well organised packages are some of the key aspects to grasp. gofmt
is an invaluable tool, and following the best practices from Effective Go should give new developers a great start.
Qs. What are the pros and cons of Go that are being discussed in the development community and what is your opinion on that?
Matt: One of the things I love about Go is its simplicity - the language is small, but complimented really well by the standard library. On the other hand when you do need additional libraries, versioning is often mentioned as a problem. We’ve certainly had issues with this, but there are a number of solutions including vendoring and using tools like godep
which can solve most problems.
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?
Matt: There are loads of interesting open source projects which are under heavy development including Kubernetes, CockroachDB, Weave, GoLearn’s machine learning, and more web related projects like Revel and Negroni. But I’d suggest working on a small project is the best way to learn the language - as an example there are lots of client libraries which would really benefit from extra help.
Qs. What has been your biggest challenge while working with Go?
Matt: Refactoring! When I started writing Go I was definitely influenced by my previous Ruby and PHP experience. I then usually ended up refactoring several times until my code was a lot more idiomatic, and (thankfully) a lot simpler.
Qs. What types of applications are currently being developed in Go and what changes do you foresee over the next year or two?
Matt: I see a lot of systems and infrastructure tools being built in Go at the moment, ranging from Docker and Kubernetes, to InfluxDB, Etcd, and NSQ, and Hashicorp’s suite of tools. As an example we’ve recently replaced a lot of our platform at Hailo with Go micro-services. Beyond this I think Go has great potential for teaching and introducing people to programming, as its simplicity makes it much easier to learn that a lot of other languages.
Qs. How do you see the market for Go Programmers in the work place? What is the future for Go?
Matt: The market is really heating up at the moment; there is a lot of demand for Go developers, and this is only going to increase as the language gains more widespread adoption.
Qs. Do you have any other suggestions for our readers?
Matt: If you haven’t already tried Go, pick something interesting and give it a shot! The community is really friendly and helpful in both the go-nuts group and a number of meetups around the world, so there’s plenty of opportunities to get involved.
Thanks Matt 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 Matt would be glad to answer.
Tweet