Hacker News new | ask | show | jobs
by enneff 5570 days ago
Languages don't reach mainstream popularity overnight. Go has been public for one year. Look at where Java, Python, or even C++ were a year after their release. With that in mind, I think Go is doing pretty well.

An important thing to note is that, while Go is a great general purpose language, we're building it to make systems development easier. That's what we're using it for at Google, and also how it's being used at other companies like Canonical and Atlassian. In that sense Go is already successful.

3 comments

As one of the folks who was on the Java team when it was released to the public, I can tell you the response was very different than the response to Go's announcement.

Having been at Google (but not associated with Go in any way while there) when Go was announced my question then, as now, was "What was the problem again?"

The basis of that question is that languages that have been successful often, but not always, have a strong correlation with solving a painful problem.

Java solved a number of problems; the problem of connecting across architectures (I thought of it as the 'system libraries' problem), the C++ is too complicated problem (which would be the too complex;didn't learn (tc;dl) problem), and the interactive content from an untrusted source problem (which, in all fairness was a problem it self created when being able to run in a browser).

The only problem that I have ever heard as being at least in the sights of Go was the 'building parallel applications' problem (which is huge, but why ignore millions of man hours in HDLs which also solve this problem but with the caveat that you have to be able to infer hardware from the compiled code)

So unless there is something that is much easier to do in Go that you both need to do, and is so much better that doing it in your current language is too painful, it will join the ranks of languages like Lisp, APL, Modula-n, and Eiffel which all have things to recommend them but nothing to compel them into wide spread adoption and use that we associate with a 'popular' language.

"An important thing to note is that, while Go is a great general purpose language, we're building it to make systems development easier. That's what we're using it for at Google, and also how it's being used at other companies like Canonical and Atlassian."

Historical reference see the design, development, and use of the best language you've never used Mesa [1].

[1] http://en.wikipedia.org/wiki/Mesa_%28programming_language%29

My interest in Go stems from its potential to replace C as a systems programming language. Basically, it seems like everything that has been tried for improving upon C has failed. However this is not because C doesn't have problems, rather it's because every replacement has been trying to achieve other things at the same time and has introduced complexities that made things worse.

So I think it's interesting to have a language that is finally being built with the primary purpose of being better than C at systems programming. My main issue however is the lack of support for Windows. One of the main points of a system language and the reason C dominates is that with enough hacks you can make it portable to anywhere. I can understand the Go folks probably don't have much interest in or use for Windows (or resources to support a port) but honestly, in my mind that's just incompatible with the stated goal of being a "systems programming language".

There is a small group of dedicated programmers working on the Windows port, and it works. Not 100% parity with the other Operating Systems, but it passes most tests: http://godashboard.appspot.com/ (see the rightmost column)
"The only problem that I have ever heard as being at least in the sights of Go was the 'building parallel applications' problem"

That's only a small part of it. It's also designed to be less confusing than C++, and more flexible and faster than Java. As a result, it's actually a very different kind of language. Feels like a scripting language, but you get static typing and the performance of a compiled language.

Lots of smart programmers are finding good use for Go, so your comments seem like unnecessary and misplaced negativity to me.

> Feels like a scripting language, but you get static typing and the performance of a compiled language.

Exactly. I'm a longtime enthusiastic Python programmer and reluctant C++ programmer, and for me Go is the first language that could realistically replace both Python and C++ for my programming.

For me the killer features of Go are:

- Go code is almost as compact as Python but--especially for numeric code--much, much faster.

- You never have to wait for the compiler! Everything I've written compiles and links in a fraction of a second.

- Easy CSP-style concurrency: goodbye races and deadlocks w/ threaded code.

Note too that, apart from the C runtime and low-level OS interfacing stuff, the entire Go standard library is written in Go itself. Contrast this w/ "scripting"/dynamic languages like Python or Ruby where much of the standard library has to be written in C for performance.

(FWIW I have published some open source Go code on Github at http://github.com/jbarham and the beginnings of an AWS library at http://code.google.com/p/goaws/.)

Go isn't the only language that matches those requirements though. I took a long hard look at Go for very similar reasons and ended up deciding on Scala.

It feels like a scripting language, incredible performance, extremely compact code when you need it to be, actors.

>Easy CSP-style concurrency: goodbye races and deadlocks w/ threaded code.

I actually disagree with this, CSP style, actors, message passing, you still have potential race conditions and deadlocks. What you gain is a nice separation between what is shared and what isn't. Just don't think Go's concurrency is the many-core silver bullet anymore than locks or Tx Memory is...

Java solved a number of problems, but introduced some of its own.

The work I do in C++ I could do in Java, but the extra memory and compute overhead would cost us on the order of another engineer. Go interests me because it might let me escape C++ without the cost of Java. (Go may still prove too expensive, my experiments aren't done yet.)

Also: Go developers have the Python ethos of short names and simple interfaces. Take a look at the Go standard library[1]. I may get the safety of Java and the productivity of Python in one go.

[1] http://golang.org/pkg/

The fact that it was created by a big rich company makes all the difference. Seriously. Companies commit themselves to development projects in hideous proprietary languages like ABAP without a second thought, but a well-regarded language with multiple high-quality implementations can be a difficult sell if it comes without a ™ and a corporate logo.
Go does solve some painful problems for certain communities, esp. the linux desktop folks. Java hasn't caught on writing linux desktop apps, probably because of memory requirements and there are mixed feelings about Mono. Python is just too darn slow for such apps. I imagine this is why Canonical is using Go. Admittedly this isn't a huge space.
I work at Google, but let's be honest: Java and C++ continue to be the only game in town for existing and new projects, Go occupies only a very tiny niche in our code base, mostly for the reasons that Chuck mentioned: a lot of the parallelism value that Go claims is already widely available, battle tested and very robust in Java and C++.
The parallelism features of Go are a side-effect of the concurrency features, which are far more about how you structure your code than about how it runs.

Go's main feature is what it removes. I got stuck with C for a long time because nothing better with the same simplicity came along. Languages march forward with increasing complexity while offering very little in return for it. Go is a reaction to that and a solution to that problem.

"ava and C++ continue to be the only game in town for existing and new projects"

That is simply not true. Yes, Go occupies a small niche, but there are growing numbers of people using Go for real things at Google.

From my understanding, Go doesn't make things possible that are not available in Java/C++, but it attempts to make them easier and less error-prone.

The big problem with parallel/concurrent/distributed programming is that it is very hard to do both correctly and efficiently and scalable with current languages (and at the same time, keep the code maintainable). It has been bolted on, so to say, in may different ways. OpenMP, OpenCL, IPP, the list goes on. All those abstractions serve a certain purpose, and are useful at a certain scale, but are less useful outside of that, and generally you need to worry about way too many low-level details.

OpenMP: loops are easily parallelized, but due to data sharing, writing code that scaled to a large number of cores is very hard. Supports some other primitives like task parallelism, but in a limited way. At least you don't need to manage threads manually.

OpenCL: designed for huge numbers of cores, but very much focused on GPU-based development, makes it very inflexible on general purpose CPUs.

IPP: Work queue primitives to automatically distribute load over multiple cores. This is the most advanced approach, but fits very clumsily into C++ using arcane template syntax, which quickly results in macaroni code.

A language that would truly support scalable high-performance parallelization without having callbacks all over the place would be great. I'm not sure how far Go delivers on this promise, but it's certainly a step in the right direction. Which is expected from a company like Google, which understands these problems.

my friend, I am not anti Google or anti Go. 1 year in tech is like 10 years in real life. I am glad you mention "systems development" but Google is marketing or at least the Go lang site is marketing it as a mainstream application development language. The repeated thing I hear and see is Go is fast and simple, which I don't disagree. If it is so simple and fast why is this not even listed in any of the rankings at http://langpop.com/

Before java was even officially released colleges were teaching Java classes. I remember it, cause I took the class and I still have the book that says covers beta. That's how popular java was. We were wowed by animations (feels funny to think about it now) and how easy it was to write screen savers, moving robots and shooting games. This is not the 90s. Look at the success of Android development (different topic). It came from freakN no where wowed everybody. Made stupid HTC (who knew about it before Android) a huge competitor of Apple. We are wowed not by what a programming language can do (this is what we are getting from Google) but by it's demo implementation. Again, look at Android, App Inventor and google has tons of such examples. Go marketing team (if there is one) failed miserably in my opinion.