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?
Abhishek: A technologist at heart. I am a DevOps consultant during office hours and work for ThoughtWorks. During off-hours I’m an opensource contributor, blogger and mostly trying to learn/build something. My interest in technology is for a variety of aspects and mediums available to depict logic like an art and vice versa. I love all tech. but my key area of interests are Security, System Tools and Network Services. The hub of my online persona is at http://abhishekkr.github.io/.
Qs. Why and when did you decide to start working with Go?
Abhishek: I love trying out new technologies, be it OS, services, frameworks or Programming Languages. Around early 2010 I heard Google has been working on bringing a new language for systems tool development and they covered it in Google I/O 2010. Then they again covered it in Google I/O 2011 and I thought to give it a try and publish a series of blogs (part-1). But lost focus.
Last Year (in 2013) I decided to materialize my idea of a new-style monitoring solution for which I needed a fast and lean FOSS TimeSeries DataStore. The existing one required Zookeeper or some other light-or-heavyweight service to provide it. I didn’t want the user to worry about more components in their infrastructure just to get the monitoring solution active. First I thought of using a mod over Datomic, but then found out it’s not purely FOSS. So, I did some research on what technologies will be best suited and that boiled down to combination of Golang, Leveldb and ZeroMQ.
I picked it mainly because of it’s out-of-the-box acceptance of several helpful features and practices and it was a nifty more manageable replacement of C language for performant system layer tools.
Qs. How should one go about learning the Go language? What material (books, eBooks, online tutorials etc.) would you recommend?
Abhishek: I have experienced Golang as one of the easiest systems programming language to pick, though I took long enough to pick up peculiarities of its philosophy. So you can start using the language quickly but it might take some time to understand the different perspective behind it which makes it strong.
One has to “unlearn” a lot of things first. This particular message has been repeated multiple times in context of Golang but doesn’t lose its importance for that. From my own experience, I started to apply the language in my understanding of C and Python as Golang has been repeatedly called a mix of both. But that’s just the lex design and part of philosophy. It requires developers to bring an open mind to learn how to do things than expecting it provide ways of their favorite language and benefits that they don’t.
To start your journey in Golang world, resources which will help you along the way are:
The way I started with Golang was, most of my intial Golang try-outs happened over the Golang Playground itself. When I seriously thought of learning the language I started trying nifty small examples from talks and books, most of which are available at my repo GitHub-TutorialsAsCode-Golang. Once I got to understand the power and beauty of it, I started a FOSS project GoShare in it.
This style of learning a technology suits me, it might or might not suit others.
Qs. What best practices are most important for a new Go programmer to learn and understand?
Abhishek: The quintessential set of best practices a Golang beginner need to adapt are:
sync
package can be used for safe transactions and so on.Qs. What are the pros and cons of Go that are being discussed in the development community and what is your opinion on that?
Abhishek: Golang has been one of the most discussed (actually fought over) language in the last few years. Some loving it for the new experience they got and some hating it for the misplaced requirements. I’ll discuss the top-3 benefits and flaws that I’ve experienced or came across.
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?
Abhishek: If a person doesn’t have a project idea of their own, it’s ideal to contribute to someone else’s FOSS project. Currently Golang is one of the most growing community in terms of new projects added, lots of them can be browsed through at GitHub’s link.
Though I’ll pick 5 good Golang projects from them, for folks who don’t wanna search GitHub:
Qs. What has been your biggest challenge while working with Go?
Abhishek: Unlearning the design instincts from past languages and use what suits it.
Qs. What types of applications are currently being developed in Go and what changes do you foresee over the next year or two?
Abhishek: In the recent years the most growth I’ve seen for Golang projects has been system tools mainly designed to fit DevOps toolbox. Projects belonging to problems like orchestration, service discovery, monitoring, alerting, containerization and more. There are some teams I see using Golang to build web apps as well over frameworks like Beego.
In next few years I see Golang to be popular language for all kinds of distributed networking services. More importantly popular among people trying to quickly build their idea on decentralized secure communication services. At least I plan on doing so after my current Golang project is production grade.
Qs. How do you see the market for Go Programmers in the work place? What is the future for Go?
Abhishek: Acceptance is increasing, more and more startups are accepting it now. Though enterprise world will be entwined with Java for a long long time to come. The kind of baggage they have, more than that the kind of box they have technically explored. Not being able to appreciate disruptive technologies is understood. Now it’s not JVM-based and can’t use old existing Java libraries directly. Though nobody stops you to convert that to an API and mask it out.
The future for Golang seems bright enough to become one of the top choice languages to develop client solutions in. It will thrive for new system tools. Even if Rust grows up to be a much rich language, Golang has enough momentum and improvement in action.
Qs. Do you have any other suggestions for our readers?
Abhishek: Use the right tool for the given task. If you think your problem could be best solved using an almost pure Functional Language then pick Haskell, Clojure or Erlang. If you wanna build a fancy web application in not much time without worrying for the application structure then blindly pick Rails, Django or something else.
But if you can get over prejudices and wanna create a clean, maintainable still fast systems or distribute networks application… you can trust Golang to fit the bill.
Thanks Abhishek 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 Abhishek would be glad to answer.
Tweet