Interviews: Ask Alan Donovan and Brian Kernighan About Programming and Go
Alan Donovan is a member of Google’s Go team in New York and holds computer science degrees
from Cambridge and MIT. Since 2005, he has worked at Google on infrastructure projects and was the co-designer of its proprietary build system, Blaze. Brian Kernighan is a professor in the Computer Science Department at Princeton University. He was a member of technical staff in the Computing Science Research Center at Bell Labs, where he worked on languages and tools for Unix. He is the co-author of several books, including The C Programming Language, and The Practice of Programming. Recently, the pair have co-authored a soon to be released book titled The Go Programming Language. Alan and Brian have agreed to give us some of their time to answer any questions you may have about the upcoming book, Go, and programming in general. Ask as many questions as you'd like, but please keep them to one per post.
There's already a game called Go, which has about a gazillion articles on how to program it. Couldn't you come up with a name that would be less ambiguous? Now, when you see a user group for "Go programming", you have no clue which one it is.
Support microSD: in a post 9/11 world, it is unwise to carry your data on media that you cannot comfortably swallow.
Why the hell would anyone use Go?
(Serious question, since our editors didn't tell us why Go was created, what Go's intended purpose was and whether or not anyone is actually using Go.)
Seeing as how it was created after the Internet was big, and one is constantly searching the Internet about the programming language one using, wouldn't you want a distinct name so search results are what the programmer wants? "Go" is the 35th most common word in the English language. When you search for "go" you get entries about games, movies, etc. Google, coincidentally gives the best results if the programming language is what you are searching for, but even Google gives you results for all sorts of things. The programming language isn't even a dominant result on other search engines.
Obviously, if you use a search engine to find things about "JavaScript" or "Erlang" you get what you want. I can't imagine going through the trouble of creating a programming language and then failing to give it a distinctive name.
Democracy Now! - your daily, uncensored, corporate-free
What serious long-term real-world potential do you see for Go?
How do you see the potential of Go replacing existing open source webstacks such as Apache and PHP, Python or Ruby? Was Go built with a technology update of existing approaches in mind? How feasible is it in your opinion to try and replace the existing complex stacks with pure Go runtimes?
We suffer more in our imagination than in reality. - Seneca
Is there an official cross-plattform Go IDE in the works? Experience shows that adoption is accelerated by offering a solid toolkit that is easy to pick up and get started with - such as the formidable Android Studio IDE Google offers to developers. Are there any plans similar to this for Go?
I would like to see it take the place of C++ in the development of performant end-user applications with GUIs - are there any officially sanctioned projects that aim to provide a serious GUI toolkit and stack based on Go?
We suffer more in our imagination than in reality. - Seneca
Well, if all of computer language history is any guide, that's going to present an asynchronous performance issue.
I'm a C programmer by choice. I require that the program does what I told it to, when I told it to. Anything else is malbehavior. Data structures are not garbage unless and until I say they are. So, if go follows the example of every other garbage-collected language I've run into thus far, I'd need to disable garbage collection (and most likely anything else that is running off by itself to do things I didn't ask for within the context of what I write.) I'm perfectly satisfied with local variables that are cleaned off with one CPU instruction on procedure exit; that's as automatic a "cleanup" as I care to indulge in.
Also, threading's not all that difficult. I use it all the time in C. I really don't see the big deal, but I'm willing to listen / read why it might be.
So that would be my question: As a C programmer with a deep collection of working, very fast algorithms in my areas of specialization, and a regular, nearly constant need to get as close to the metal as I can get, why would I want to transition to go? Just as an aside, being able to call C from go... go would have to offer something very significant indeed for that to fly. I can already call C from C.
I've fallen off your lawn, and I can't get up.
"But go get ... reaches out and..." Stop. go get isn't part of the Go langauge; it's the default Go build environment. And yes, it lacks many features you'd want in a so-called "professional" build system (whatever that means this week).
I get the impression that Go was perhaps intended to be used with repo, a tool principally used for managing the Android project, but also used elsewhere inside Google to manage large numbers of independent Git repositories. With repo, you establish a common branch or tag name across all the repositories that comprise your project, then "repo sync" to them. Poof! Build and version management. (Sorta.)
Editor, A1-AAA AmeriCaptions
In many languages, building code is a language issue. The fact that Go takes a fairly old-fashioned view of batch compilers and separate build systems is just a choice it makes, not a fundamental part of nature. Furthermore, language issue or not, the question simply becomes why are the commonly used build systems for Go so poor.
Now that Go has been in the wild for some time, which parts of the language would you change, and which bits have been an unexpected success?
Are there any plans for Golang version 2, and what might that include?