At the very end, there's quote from Scala designer Martin Odersky:
"I like a lot of the design decisions they made in the language.. Basically I like all of them."
Considering how (at least, to my eye) the design principles of Scala seem very different than Go, I find that surprising. I guess it makes sense if you consider that there are multiple valid design paths that one can take.
I think it's much more challenging to find quotes from Martin Odersky where he talks about disliking a language than it is finding quotes where he talks about liking one.
Scala is a bit of a kitchen-sink language; there are things in there from all over the place. It makes sense that he can find things to like in many disparate languages. (fwiw: I like Scala, and I like that Martin Odersky can find good things to say about other programming languages :))
> [Go] gives a new breed of concurrency you won't find in other languages, including Erlang. And this comes from goroutines. Goroutines aren't threads or lightweight threads. They aren't callbacks. They're processes within a single address space that can communicate with each other.
> Grasping the concurrency may take a little longer, even if you're experience with something like Erlang – "the concept's a bit difficult to grasp if you've never been exposed to message-passing inside of a program before,"
There are many interesting differences between erlang and go (eg single mailbox vs channels, process separation vs shared heap) but the above is misleading at best. Goroutines are very much like erlang processes and both languages make heavy use of message-passing inside programs.
Journalists: get your interviewees (ie the people who know what they are talking about) to proof-read articles!
"Previously, these operations people would write these in Python, but they're finding that Go is much faster in terms of performance and time to actually write the code."
Go beating Python in time to code?
"[Node.js is] a single thread. In a very similar amount of code, you could write a goroutine-heavy server that could handle tens of thousands of requests and use all the cores on your machine, so that if the requests were expensive – if they were CPU-intensive – you'd have a chance of keeping up," Pike says.
"Node.js shows great numbers for heavy numbers of clients, and they've done a really good job. But if those clients are CPU-intensive, they've got no place to go. You can't get the parallelism you need. With Go, you get the best of both worlds: You get many clients easily handled, and if they're CPU intensive, you can imagine scaling to a much larger number of requests."
What's more, Gerrand argues, Go doesn't force developers to embrace the asynchronous ways of event-driven programming. ... "That lets you write asynchronous code in a synchronous style. As people, we're much better suited to writing about things in a synchronous style."
Not quite true about CPU-intensive tasks. Node can use webworkers and leave the main thread for handling small requests. Obviously JavaScript is slower, webworkers open up heavy OS level threads (at least in browsers, not sure about node), but there is somewhere to go.
I like the competitiveness either way. Go deserves more popularity.
I wonder, is it possible to do some syntax rewrite to make it look like a weak/dynamic typed language and only use static types when you need the performance? That would give them a popularity boost from superficial Ruby/Python devs traumatized by systems programming.
> I wonder, is it possible to do some syntax rewrite to make it look like a weak/dynamic typed language
Go already in practice feels very much as light as a weak/dynamic-typed language thanks to (implicit) interfaces, type inference and the plain simplicity of the type system and syntax.
What is nice about these lightweight thread multiplexing languages and runtimes is that you don't have to write your apps in the butt-ugly continuation passing style (doSomething("foo", function(result, err) { print(result); }). This is something that the compiler and runtime can do for you in Go/Haskell/Erlang/etc where using a blocking system call will effectively do the same, but it's automatically done, not by the programmer.
Of course you can get the same effect with Node.js/Boost.asio, but I find it a bit clumsy.
I think the Doozer people misunderstood Zookeeper. They claim that ZK is focused on providing locks, but ZK really just provides a consistent hierarchical datastore that can then be used to construct locks, perform leader election, etc. See http://zookeeper.apache.org/doc/r3.3.3/recipes.html