Shiju Varghese is a Technical Architect at Accel Frontline Ltd. He specializes in Cloud Computing solutions and is passionate on building Cloud-First apps. He writes apps in C#, Node.js and Go. He has been working with Web Technologies since early 2000. His areas of interest include Cloud Solutions Architecture, Distributed Systems, RESTful services, Enterprise Mobility and Mobile Backend as a Service (MBaaS). He is a regular speaker at various conferences and user group events.
Qs. Why and when did you decide to start working with Go?
Shiju: I have started to look on Go after some frustrations with Node.js for building real-world systems. I love simplicity and pragmatism in software development, and I have been a proponent for using software composition over traditional object-oriented principles. When I was looking on Go, I was super excited about the language design, because, finally a language that provides a minimalistic and pragmatic approach for software development which recommend you to follow composition over inheritance.
Qs. How should one go about learning the Go language? What material (books, eBooks, online tutorials etc.) would you recommend?
Shiju: The object-oriented approach of Go is different from existing programming languages such as C++, Java and C# such that developers should have a fresher look on the Go programming language. First, learn the Go programming language and understand its practical capabilities, then understand the standard packages and explore some open-source Go projects from places like Github. http://golang.org/ is a great source for learning the language and exploring various Go packages. Effective Go provides the tips for writing clean Go code.
Qs. What best practices are most important for a new Go programmer to learn and understand?
Shiju: I would like to recommend using composition using Go’s type system. Please keep in mind that there is no inheritance in Go’s type system. Interface is a powerful feature which can be used for building highly maintainable and extensible apps. A new programmer should deeply look on how to perform concurrency using Goroutines and Channels. Concurrency is a first-class citizen in the Go programming language.
Qs. What are the pros and cons of Go that are being discussed in the development community and what is your opinion on that?
Shiju: The advantages are concurrency with Goroutines and Channels, the simplicity of the language, performance, and developer productivity. I really love the design of Go and the simplicity of the language. Go is having a powerful ecosystem with a lot of third-party packages.
The one disadvantage of Go is the lack of generics in the language. I do understand that the Go team is not against Generics, but they are looking for a good proposal. Simplicity is the key feature of Go such that the addition of a new feature should not affect the simplicity of Go programming language.
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?
Shiju: Have a look at the Go projects on github. Martini is a great open source project which can be used for web development.
Qs. What has been your biggest challenge while working with Go?
Shiju: At the beginning, my main challenge was to identify matured third-party Go packages. In Github, the number of stars of the repository, was the one criteria for identifying popular packages.
Qs. What types of applications are currently being developed in Go and what changes do you foresee over the next year or two?
Shiju: Currently Go is used for building distributed systems and servers. It is really nice that Docker was built with Go. In the future, Go will be used for a variety of areas, including System programming and Embedded systems, Desktop development, Distributed systems, Backend services for Mobile and Web, DevOps and Cloud application development. I predict that Go will be a popular development platform for building apps on the Android, in the near future.
Qs. How do you see the market for Go Programmers in the work place? What is he future for Go?
Shiju: Go will be the next big programming language in the enterprises and a lot of existing Ruby, Python, Node.js and Java developers will move to Go. In the next year, we can see a lot of Go adoption in the market.
Qs. Do you have any other suggestions for our readers?
Shiju: Focus on simplicity and pragmatism for software development. Go is a great choice of programming language for building highly efficient systems. Don’t compare Go language’s design with others since Go is designed with simplicity and pragmatism in mind. Learn the programming language with a fresher mind and build great software systems with it.
Thanks Shiju 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 Shiju would be glad to answer.
Tweet