17 ms·
Four years of Go
- misnome 13y ago> "The state of the Go ecosystem after only four years is astounding. Compare Go in 2013 to Python in 1995 or Java in 1999. Or C++ in 1987!" Wow! The state of C++ searches on google were 0 in 1987, as were searches for "Apples" and "Oranges" so go must be doing incredibly well to have infinity times the results!
- enneff 13y agoKeith wasn't referring to the Google Trends chart. It is an unrelated quote about the state of the various languages' ecosystems 4 years after their release dates.
- dbaupp 13y agoNone of the languages being compared against were released in the ubiquitous-internet age with things like Github and widespread blogging to drive interest and adoption.
- enneff 13y agoI don't think the comparison is supposed to be a value judgement of C++, Java, or Python. It's just an observation about how quickly the Go ecosystem has matured. Of course the internet played a huge role in this!
- yareally 13y agoIf one is going to compare a language to Go, I would go with C#, since it's only slightly older (2001 or so) and also backed by a major corporation.
- gillianseed 13y agoWell since Go made it's appearance in 2009 and C# in 2000, I wouldn't call that 'only slightly older', not even by programming language standards. Beyond that, Go certainly doesn't have the same backing from Google as C# had from Microsoft, on the other hand Microsoft had a monetary incentive to provide support and tools/frameworks as they charged for those proprietary implementations while Google is giving Go away under a permissive licence. Anyway, for fun I looked at the language poll made here recently on HN and compared C# and Go: C# 1130 likes, 465 dislikes Go 1126 likes, 365 dislikes So it would seem that Go has reached the same popularity as C# here on HN atleast. https://news.ycombinator.com/item?id=6527104 https://news.ycombinator.com/item?id=6527104
- dbaupp 13y agoHN is a hotbed of early adopters (and Microsoft is not a favourite among many readers).
- girvo 13y agoThat... doesn't really change the general point?
- dbaupp 13y agoYes it does, the point is "Go's ecosystem has developed really fast" but maybe a (hypothetical) better language developed in this day & age would've reached the same point in 2 years?
- coldtea 13y ago>None of the languages being compared against were released in the ubiquitous-internet age with things like Github and widespread blogging to drive interest and adoption. Which doesn't seem to matter anyway. There are tons of languages released every year that fare even worse than languages released in 1980, despite having "ubiquitous-internet, Github and widespread blogging" at their disposal.
- dbaupp 13y agoHow many are backed by one of the largest companies on the internet?
- overcyn 13y agoWhat is your point here? This is a blog post celebrating the 4th anniversary of a programming language. Shame on them for being proud of what they created because other languages had a harder time?
- coldtea 13y agoNot many, including Go. Go is extremely peripheral to what Google does -- it's essentially a 20% project that did well.
- chongli 13y agoThere are tons of languages released every year that fare even worse than languages released in 1980, despite having "ubiquitous-internet, Github and widespread blogging" at their disposal. Those tools are force multipliers. If the initial force is zero, the output is still going to be zero.
- axaxs 13y agoWith all due respect, I don't feel he is/was old enough to make such claims, as judging by his picture. Not saying that he is right or wrong, only the wrong person to make such claims.
- spullara 13y agoSeems pretty far behind Java in terms of adoption. By 1999, virtually all new enterprise development was being done on Java. In 1997 Java was already #4 on the TIOBE language popularity index. Go isn't even close.
- thrownaway2424 13y agoThat's true. Java in the 90s was a spectacular con job that millions of developers and managers bought hook, line, and sinker. XML was pretty big back then, too, and now nobody gives two warm shits about XML. Just saying. Anyway the hype is surely not the reason why anyone should use go. People should use go because it has good libraries, encourages good interfaces, is fast and space efficient, has good self documentation, is easy to test, etc.
- dbaupp 13y ago> Java in the 90s was a spectacular con job that millions of developers and managers bought hook, line, and sinker Who's to say that a similar thing isn't happening with the current latest and greatest tools?
- masklinn 13y agoOr even just with Go.
- threeseed 13y agoSpectacular con job ? Are you joking ? There was and continues to remain NOTHING that compares to the Java platform.
- thrownaway2424 13y agoI assume you mean in terms of hype? Java can do stuff and people use it which is fine. The con was that it was inherently portable and secure and can be used for client software. None of that is true. Today if someone told me that our new client interface was going to be java that person would be reassigned to a role where their awful judgement would not resurface. Java today is basically the slower edition of C++ which isn't that amazing of a niche.
- sitkack 13y agoEverything in "the future" will always have faster adoption curves. There is more of everything so comparing them is quite difficult.
- tracker1 13y agoNot sure about that.. wasn't ruby around for some time before rails caused the relatively large uptake?
- coldtea 13y agoWho mentioned anything about "C++ searches on google"? There WAS an industry in 1987 and people who are around now were also around then, and can compare how well Go does compared to how well C++ did circa 1987.
- misnome 13y agoBut they are so ridiculously far apart that there is absolutely no way you can compare the "uptake" metric without being completely disingenuous.
- mjcohen 13y agoHow about the state of Fortran or COBOL after four years?
- donutdan4114 13y agoI am only a beginner in Go, but what I have done so far, I have loved. It's a great alternative to your typical scripting languages like PHP, Perl, Python, Ruby, Node, etc, etc, etc... And simpler and funner to use than C/C++ IMO. I really hope it keeps gaining momentum.
- dmak 13y agoCould you go into detail on your experiences for Go compared to JS or Ruby?
- miloshadzic 13y agoI know Ruby and some Go and never really understood why people compare them so much. Very different languages.
- enneff 13y agoI think it's because people use them for similar things. I have met many developers that have rewritten Ruby web services in Go (with good results).
- nXqd 13y ago+1
- jacques_chester 13y agoOn HN there's a lot of people who went from writing Ruby to writing Go. If all you have are a hammer and a screwdriver, everything looks like a blog post comparing the two tools you've tried.
- aaronblohowiak 13y agoTakes me about 10-20% longer to do trivial things in go than ruby, but the results are much faster and bigger refactorings are also much faster to complete (nice type system). The ability to really max your perf out in short amount of time is also delightful
- sergiotapia 13y agoI'm betting on Go at the moment, using it to build some little libraries and writing some dummy apps to test the waters. Hopefully in 4 years when Golang developers are in demand, I have 4 years of experience under my belt. :)
- sitkack 13y agoProgramming is now multi-language and multi-paradigm. It matters more what you can do and not what you can do it in. Being able to compose libraries and systems from parts is way more important than knowing a specific language.
- ihsw 13y agoIndeed, for example getting your brain wrapped around concurrency patterns in Go is very straightforward (especially since there is a plethora of documentation and examples). These skills will transfer very well into other programming languages.
- deleted 13y ago[deleted]
- zenlikethat 13y agoThis is true but, from my experience with developers (not to mention HR/hiring managers) at my own company and elsewhere there is a prevalent attitude that language is the basis of "What You Do". I agree that attitude is totally wrong but a lot of places seem to have this backwards prejudice about hiring good developers and chucking them headfirst into a language or technology they haven't already proven they know.
- genwin 13y agoI'm thinking Go has got to eventually eclipse Python in popularity, since the former can do the same work using a fraction of the servers, for about the same coding difficulty.
- 13y ago
- AlexanderDhoore 13y agoI'll be at the Go room @ FOSDEM 2014! See you there.
- knodi 13y agoI been using Go for a year now. Its hard to explain but for the most part I enjoy coding with Go. I could say i find it fun/enjoyable but that doesn't seem to convey the right feeling.
- stock_toaster 13y agoWhen using Go, I sometimes get the same feeling I get when using a well made drill, saw, or other physical tool. I would qualify it as "satisfying" -- the way it feels and how well it accomplishes the task it is designed for. Like many well designed and well engineered things, I think familiarity and time cause that satisfying feeling to blend into the background and become the norm. You only realize the difference again when you have cause to use some other tool laying around (I just need to pound this nail I will just grab this random hammer laying here) and it "feels" different -- the weight is wrong or the grip is weird. I by no means claim Go is perfect, but it seems to a great match for the kinds of things I tend to work on, and it "fits in my hand" rather well these days.
- aangeles 13y agoI agree with you coding in go is fun & enjoyable, It's a well designed language.
- deleted 13y ago[deleted]
- chetanahuja 13y agoLooks like Go is succeeding more in the space where scripting languages like Python and Ruby are dominant and less in it's original intended space (systems programming). Rob Pike has written about it too. I wonder if they see this as an opportunity missed or unexpected boon.
- enneff 13y agoWe definitely made a mistake at launch using the term "systems programming", because people automatically think of operating systems. What we meant were the kind of systems we build at google. Some of the examples in the blog post are "systems programming" in the same sense. So we are pleased to see Go being used for the job it was designed for, but we are also happy to see that Go has a broader appeal.
- millstone 13y agoYou don't build operating systems at Google?
- enneff 13y agoWell, we have Android and ChromeOS, which are both Linux. While we do have a lot of people doing Linux kernel work, I'm not aware of any "green field" operating systems being built at Google. (Although I wouldn't be surprised to be wrong here.) Most of the software we build at Google are server processes that talk to other server processes. Go was designed primarily for this role, but it is obviously useful for a lot more.
- chetanahuja 13y agoWell, I would argue that there's a level between "db replication infrastructure" type projects and OS kernels. That is the space occupied by things like database engines (everything from BigTable and descendants to Oracle), distributed storage engines (GFS and descendants) etc. I don't think I've seen a project in Go that aims to deal with that level of "system-ness" yet. And I suspect I know the reasons (why, say, I wouldn't write the packetzoom protocol stack in Go) but I'd like to know more about whether to Go team thinks it made the right choices in language and runtime design for a systems language.
- alok-g 13y agoThose experienced in Go, do you miss generics?
- dualogy 13y agoSince Go has generics for slices (aka arrays), maps (aka dictionaries / hash-tables) and channels, I was pleasantly surprised how little I miss them in practice. Just some adaptation-of-thinking-habits mostly. Don't miss them anymore. I have a micro-codegen pre-build step (written in Go of course) for the very few use-cases where something akin to those (more generally, templated programming) does come in handy. But those are really far and few between.
- venuzr 13y agoThat was my initial struggle as well coming into Go (I have worked for several years in C# & Java). You learn to work around this limitation using interfaces for both function parameters and return types. Frankly, I have had to do a little more explicit typecasting that I would have liked (going from interfaces to the actual type) but it is ok.
- alok-g 13y agoAre you saying that making sure the type is correct (just before the cast) becomes the programmer's responsibility? How often does this happen?
- quarterto 13y agoThis is called a type assertion in Go. Whenever you ask for something as an interface but want to use the type's own method, you have to make a type assertion. interface Fooer { func Foo() } type Bar struct {} func (s Bar) Foo() {} func (s Bar) Baz() {} func DoFoo(f Fooer) { f.Foo() // fine // f.Baz() compile error f.(Bar).Baz() // fine }
- grey-area 13y agoIsn't the entire point of an interface to communicate the behaviour expected by the function though? If you want a Bar specifically (as the DoFoo code does above), it should take a Bar as an argument. If you want to accept any struct that satisfies Fooer, add all the methods to Fooer that you need them to satisfy... Doing otherwise is just subverting the type system and you might as well use a blank interface and effectively have no type checking on your input - if you require a Fooer and then typecast someone might pass a Fooer and get a nasty surprise when it doesn't work.
- ARolek 13y agoI spend about 30% of my time system side in Go, and the rest in Node.js. I'm working to migrate almost all of my time to Go. The language is fun to work in and, personally, the overall experience is much improved over Node.js. It's exciting to see the momentum behind the language and the great people who are attracted to it.
- Kiro 13y agoAre Node.js and Go used in separate systems or do they have their own special places?
- voidlogic 13y agoAt a startup I worked for we used node.js prototype/sometimes v1.0 and Go for everything after. We shifted to writing everything in Go as we reach a point were we were more efficient from an effort standpoint in Go.
- codeka 13y agoWhen I look at the Google Trends for "golang", China is the top region by a huge margin (the next highest region after China is Sweden at 30) [ http://i.imgur.com/XHW40kp.png http://i.imgur.com/XHW40kp.png ]. And the rise of interest in "golang" in general seems to correspond to the massive spike in China [ http://i.imgur.com/Y3oO2jf.png http://i.imgur.com/Y3oO2jf.png ]. I'm not really sure what that means...
- columbo 13y agoCould just be false signals for people googling "Go" the game and not the language. Golang is the first search on a generic search for "Go" (https://www.google.com.hk/webhp?hl=zh-CN&sa=N&tab=lw#hl=zh-CN&q=go&safe=strict https://www.google.com.hk/webhp?hl=zh-CN&sa=N&tab=lw#hl=zh-C...).
- prewett 13y agoPeople in China that are searching for the game would probably be searching for "weiqi" or "围棋". "Go" comes from the Japanese word for the game, "igo". Also, in my experience, very few (mainland) Chinese play weiqi. Everyone plays Chinese chess, but very few play Go. So people searching for "go" are quite likely searching for the language. (Although I'd expect that the people who know about the language know enough to search for "golang", so who knows)
- rmcpherson 13y agoGo is quite popular in China, especially on Windows. I'm not sure of the reasons for that, but Rob Pike and Andrew Gerrand do mention it in this interview on the ChangeLog: http://thechangelog.com/100/ http://thechangelog.com/100/
- mimighost 13y agoA lot of webgame companies use Go, because of its performance in concurrency.
- mseepgood 13y agoChina is the world's most populous country, with a population of over 1.35 billion. That's 19% of the world population.
- kevrone 13y agoWe are writing/rewriting a lot of services at Timehop in Go. It's not quite as productive as programming in ruby, but it's surprisingly close (For simple services, anyhow) and its multiplexing characteristics seem pretty slick when you're used to using delayed_jobs in ruby. However, if you do a lot of collection processing, you start to really itch for something like generics (Which can lead down some pretty interesting rabbit holes: http://blog.burntsushi.net/type-parametric-functions-golang http://blog.burntsushi.net/type-parametric-functions-golang). I think this is a pretty big feature to be missing, actually. I hope it comes soon in future updates. It's pretty frustrating to have to reimplement data structures that can accomodate custom structs. But overall, it's very impressive, and a step in the right direction. I think we're approaching a golden age of programming languages, where syntax, expressiveness, and performance are all given equal seats at the table.
- dhaivatpandya 13y agoI'm currently working on a Go project that is meant to sit above the Hadoop FS. Go has been absolutely brilliant to work with. Some of the design decisions make very little sense at first (e.g. no fields in interfaces, no real inheritance, etc.) but as I've used the language more and more, the reasoning behind them becomes clear.
- martinvol 13y agoThere is a fallacy in this quote: "The state of the Go ecosystem after only four years is astounding. Compare Go in 2013 to Python in 1995 or Java in 1999. Or C++ in 1987!" This comparison is more than unfair, in the 90's only a few people had an internet connection. Or Do you want to create Open Source projects by mail? Git or Subversion didn't even exist back then. Now imagine in 1987...
- laureny 13y ago> The state of the Go ecosystem after only four years is astounding. Compare Go in 2013 to Python in 1995 or Java in 1999. Or C++ in 1987!" This comparison is more than unfair, It's more than unfair since they don't show any numbers. At all. Not for Go, not for Java, not for anything. The graph is cute but it's not even a number of installations, projects on githubs or lines of source code: it's Google searches. Searches measure nothing more than buzz. I bet Google Wave showed similar curves facing up for months. If the Go team had hard and impressive numbers, I bet they would show them. The fact that they don't makes me think that Go is not seeing a lot of traction, besides a few Python and Ruby programmers.
- craigyk 13y agoI want to like Go. There's definitely some parts that are great, but for a relatively new language there were missed opportunities to adopt awesome features in other PLs. There are also some internal inconsistencies that I find grating. These inconsistencies are particularly irksome given how opinionated Go is (and how much I agree with most of those opinions).
- robotmay 13y agoI find a lot of the types quite annoying, like the byte arrays etc. I'm sure I'm missing out on the benefit but it'd be nice to have more human readable variable types. I also found passing JSON around inside it quite awkward, though I'm no doubt just being a bit thick.
- craigyk 13y agoI went and looked up some of my notes back when I was trying out Go. I hope to learn from others wether these are real issues or simply my misunderstandings. 1. So we don't get generics, but the language built-ins seem to get to be type-parameterized (channels, slices, maps). Unfortunately the syntax for doing so for each of these is inconsistent (probably as a result of being special-cased rather than dog-fooded using language-level generics): []float, map[float]float, chan float. 2. Built-in types seem to receive other special treatments as well, which includes special initialization keywords (make vs. new) and built-in functions (len, cap, etc.) but I don't see why this needed to be the case, even for performance reasons. There's no reason why the these built-in types couldn't pretend to implement built-in interfaces to make more transparent with user-types while having the compiler optimize them with special-case functions for efficiency. 3. Unused variables are a hard error which is a completely understandable stance. Unfortunately, I think people may use workarounds to get around this. Also, I can't believe unused variables are a hard error, but uninitialized variables are not! Instead we are supposed to trust that everything is OK since they get initialized to some kind of "zero" value that isn't even under the developer's control. 4. Other small quibbles: I think pattern matching on function arguments could have been implemented as sugar that uses interfaces and method calls under the covers. Also named return values are ugly, and the function declaration syntax could have been made more concise.
- socksy 13y agoSo I've given Go a try with a couple of projects, and I like it so far. However, I really don't like its "warnings are errors" feature — in particular in respect to unused imports. If I comment out a line that uses an import, then it no longer compiles until I go to the top of the file and comment it out. Has anyone come up with a good solution to this? Preferably using Vim tooling.
- dchest 13y agoYep. In vim (make sure to have plugins that come with go in misc/vim/ directory installed): :Drop fmt to remove package "fmt" from imports, and :Import fmt to put it back.
- farslan 13y agoJust use goimports which is removing/adding imports automatically based on your source code: https://github.com/bradfitz/goimports https://github.com/bradfitz/goimports
- pjmlp 13y ago> If you're in Europe in February 2014, come along to the Go Devroom at FOSDEM 2014. Ok, so now I really have to attend next year's FOSDEM.
- chris-at 13y agoDoes a chart without a y-dimension say anything at all?
- enneff 13y agoIt's search volume. The values are 0 at the origin to 100 at the highest point. But there are no units, I presume Google knows but doesn't give real numbers.
- Grue3 13y agoDoes it have exceptions yet?
- masklinn 13y agoIt's always had exception, despite what the community tries to make you believe.
- mynames 13y agoDoes anyone knows why there is no support for Go in Android?
- voidlogic 13y agoThis is still being looked into proposed, but there is 3rd party tools to allow this: https://github.com/eliasnaur/goandroid https://github.com/eliasnaur/goandroid
- jff 13y agoGoogle's a big company with lots of fiefdoms, and Go is one of the smallest; I'm not sure it even counts as a fiefdom. Android is heavily invested in Java/C++ and those types don't like to admit that you can do anything worthwhile in Go. After compiling Android a few times, though, you'll appreciate what the Go team was talking about when they said C++ compilation time was a driver for them.
- pjmlp 13y agoWell, support for Go on Android is already open for quite a while, so it seems to be low priority https://code.google.com/p/android/issues/detail?id=39482 https://code.google.com/p/android/issues/detail?id=39482
- motter 13y agoIf you're in London, you might like to come to the Go user group which I run with John Graham-Cumming: http://www.meetup.com/Go-London-User-Group/events/147685182/ http://www.meetup.com/Go-London-User-Group/events/147685182/ Don't worry about the waitlist, people always drop out nearer the time.
- islon 13y agoIf hacker news is any indicator of success than go will become the most used programming language soon. Yeah I was been ironic but go is quite a nice language =)
- trungonnews 13y agoHow many more years until Go gets named parameters?