I was recently interviewed by Juan Carlos Perez of IDG New Service about Go. His article was carried by the NY Times, The Industry Standard, Computerworld, Infoworld, Arnnet, Techworld, PC World, and others. Below is the full interview.
Here are the answers to your questions.
How would you rate Google’s role in steering the development of Go?
I think it is imperative that Google, Rob Pike and the Go team are the driving force behind Go. So far, I think they have done a good job. Open source does not mean anarchy. Somebody has to have a vision and the perseverance to see that through. The open source community can then create their own versions if they wish, but, it is best if there is a main line, stable version with a consistent architecture with a guiding force behind it. Look at Linux, with the Linux Foundation and Linus Torvalds, Java with Sun, Open Office with Sun, Apache Web Server with the Apache Software Foundation, and so on. I think the current model with large companies like IBM, Red Hat, Novell, Oracle, Sun, Google, etc. sponsoring foundations is also proving to be a very efficient model for software development.
While Rob Pike characterizes Go as a blank sheet of paper creation, nothing begins in a vacuum. I would characterize Go as C for the 21st century. They use basic C style syntax currently in vogue (Java, C, C++, etc.). They have tried to simplify and make the syntax more regular (orthogonal is the fancy word), they have made good progress in this regard. Programmers looking at Go code can feel familiar with the syntax, but have to be careful because it often doesn’t work the way you would expect from your experience. This can be frustrating, but we have to remember that they are using a different paradigm and we need to learn the paradigm for the language, rather than paste our old style on top of it. These are smart, experienced people, I try to give them the benefit of the doubt and learn how the language wants me to think.
Go is described as not being an object oriented language. I applaud them for their bravery with this statement, they are going against the holy grail. The current “object oriented” languages are just that, “oriented”, which means some ideas from object theory stuck on with chewing gum and bailing wire. Go manages to accomplish most of the goals of the “object oriented” languages with much simpler syntax. My own wish is that they would have gone one step further and changed the syntax style away from the “C” style (not my favorite, I hate curly braces).
While the above is nice, it is not a compelling reason to change languages. The one thing that Go has that the others do not is Go routines and Channels. I think that this is truly a new programming paradigm that makes a wide variety of programming problems much easier. They give a variety of examples, from a server, servicing many clients, to recursive mathematic algorithms. It makes many types of parallel processing easy that before were very hard. Up until now most research on parallel processing was done with super computers and scientific research in mind, Go gives the rest of us a tool to experiment with for making more efficient use of our multicore processors and a new way to think about solutions that do not necessarily require a lot of horsepower.
As I mentioned before, I see possible applications in areas like process control, logic simulation, artificial intelligence. Even more mundane applications, for example, have each tab on your browser running as a Go routine communicating with the browser through Channels, makes an easy way to have a multitasking browser. Or perhaps a GUI (Graphic User Interface) using Go routines and Channels to communicate with Widgets. There are many possible uses where the Go paradigm could provide an easier way to program.
I would like to see a GUI adapted to Go as soon as possible.
To become more than a niche language, it will need at least a good GUI implementation. Rob Pike is well qualified to come up with a new approach to this. If he could have one more leap of intellect and find a new paradigm for the GUI, that is both richer and easier to program, he would have truly created something revolutionary. This is asking a lot, but if you look at a language like Java, it did not go mainstream until it could create user interfaces, initially for the web, with things like JSP’s. That is the greatest weakness of most languages these days, GUI creation is more difficult than it should be. We got away from the 4th generation languages of the 90’s (with the exception of Microsoft) and went back to hand coding user interfaces for the last 10 years. A huge step backwards in productivity.
It will also need to be productized and will require a concerted marketing and support effort by Google, doing that successfully is not trivial. As much as we like think that our creations will be loved because of their wonderfulness, this is generally not the case. The best technology does not necessarily win, as Microsoft can tell you, the best promoted technology wins. The corporate user wants support, they cannot afford to go down or to be abandoned. Support of open source applications is the business model that many organizations are now adopting, IBM, Red Hat, Novell, etc.
Unfortunately, Google has no track record in any of these areas for this kind of product. Go is a long way from being productized, it is still closer to a proof of concept and will require a lot more work before it is ready for prime time.
How long? I have no idea. It took Java at least 6 or 7 years to gain a significant installed base of real applications.
I think that the Go team would be the first to tell you that Go is not ready for prime time. There is much work yet to be done. Their goals for garbage collection, for example, are ambitious, I hope that they are successful. They are working hard to stabilize the syntax and the compilers, but it takes time. More libraries need to created, more documentation written, more testing done. I can see people starting with proof of concept and watching to see how Go progresses. So, to answer your question, not now.
This content on this site is licensed under Creative Commons Attribution 3.0