Q. Welcome and thanks for taking out time to share your thoughts. For the benefit of the readers, could you tell us something about yourself?
Cory: I am currently an instructor for gSchool. We are investing heavily in Go and creating curriculum for several immersive Go programs. I also co-host the Denver Go meetup, and we just started doing additional meetups in Boulder.
Q. Why and when did you decide to start working with Go?
Cory: I started working with Go almost immediately after the 1.0 release in March 2012. I had been previously doing ruby/rails for several years, and before that .net At the time, the company I was working at was making a major pivot with our business model. One of my coworkers, Levi Cook had been following Go for a while, and thought it was time to give it a real try. The timing was a great fit. Looking back, it was the best decision we ever made.
Q. How should one go about learning the Go language? What material (books, eBooks, online tutorials etc.) would you recommend?
Cory: I get this question a lot. I think the answer is “it depends”. For experienced developers, usually reading Effective Go is enough to get moving. If you are new to development, this can be a longer process. I have mixed feelings about the “tour”. While I think it does a great job of showing off a lot of language features, I don’t think it does a great job in “building” up your skills in a manner that is conducive to actually learning the language. I have taught a couple of “Intro to Go” workshops, both to experienced and junior level developers. I’ve found that goes very well, and very little is “confusing” to any of the audience. Where people really get lost is when they start their first “real” project, and haven’t been exposed to the idioms of Go, and therefore end up writing their previous language (ruby/java/c#/etc) in Go. That turns out poorly. You can pretty much expect a blog post from everyone that does that about why “go sucks” after that. Now, I’m certainly biased here, but I think the best way to get a real jump on the language is to either attend a workshop, meetup, or find somebody that is willing to pair with you that is already experienced with Go. In the long run, like anything else, just continuing to work with the language is the only real answer.
Q. What best practices are most important for a new Go programmer to learn and understand?
Cory: Interfaces and composition. That is the real magic sauce in Go. Once you really understand those two concepts inside and out, you will begin to write some amazingly readable code.
Q. What are the pros and cons of Go that are being discussed in the development community and what is your opinion on that?
Cory: Cons: I think that this has been beat to death. Having been on Go since it’s release, I’ve read just about every reason why Go “sucks”. The reality is I’ve never ran into any of those problems (yet). I’m not denying that there are some good points out there, or that some of the “wants” aren’t a bad thing, but I don’t find myself at a disadvantage for not having them. I believe some of the debates originate out of fundamental mis-understanding of interfaces and composition.
Q. What has been your biggest challenge while working with Go?
Cory: Trying to keep up with Levi Cook! Beyond that, continuing to find more idioms. I’ve found that when I’m not happy with my code in Go, it’s because I did it wrong. It’s not always obvious what the solution is, but I know it’s out there. What has never been a challenge is getting code out the door. I’ve never shipped as much quality software in such a short amount of time. No other language has allowed me to do this before.
Q. What types of applications are currently being developed in Go and what changes do you foresee over the next year or two?
Cory: I see people trying just about everything. There tends to be a sweet spot for cloud and dev-ops focused projects. I’m hoping to see mobile become a platform that Go can develop for in the future (not just android, but ios as well).
Q. 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?
Cory: Give your feedback and contribute to the tour and documentation! As a beginner, you are uniquely qualified to point out where you were confused, or where you felt the documentation simply didn’t do a good job of explaining. Shall we talk about date formatting? I spent hours before I figured out that “Mon Jan 2 15:04:05 -0700 MST 2006” was a “magical” date. The documentation has since been updated (but could still be made clearer imo).
Q. How do you see the market for Go Programmers in the work place? What is he future for Go?
Cory: Adoption in the workplace is moving even faster than I predicted, but still needs help. Very large companies are already starting to post jobs for Go, and this is a good sign. I think the final cog to making the market really take off is training (yes, I’m biased). It needs to be training for all levels, from first time programmers to experienced. I’m very fortunate to be in a role where it is my full time job and focus to do just that.
Q. Do you have any other suggestions for our readers?
Cory: Get involved with the community. If there isn’t a meetup in your area for Go, CREATE IT! Nobody is looking for you to be a Go expert, just someone who has a passion for it like they do. We’ve recently found that the appetite for “beginning Go” tracks at our meetups is quite large. Large enough, in fact, that we have dedicated an extra day a month to just beginning Go training. We have also launched a beginning Go track in Boulder as well, that starts next month.
Thanks Cory 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 Cory would be glad to answer.Tweet