from Hacker News

Why Go gets criticized so much

by jorgecastillo on 4/8/16, 1:41 PM with 236 comments

  • by sievebrain on 4/8/16, 2:19 PM

    I don't hate Go. I do strongly dislike posts with clickbaity titles that have an admission the title is wrong in the very first sentence.

    The rest of the article is little better. It can be summed up in one line: People who dislike Go are upset because they incorporated their favourite programming language into their identity, and the success of Go challenges their own choices.

    Although I don't hate Go, I also don't like Go much, but it's not because it challenges my identity. I am not a Haskell or Scala programmer. I've used a whole bunch of languages in recent years, none of which are especially clever. I dislike Go because I agree with the criticisms of it and I'm afraid I might end up having to maintain code written in it one day. That wouldn't be much fun.

    Fortunately, so far I've been able to avoid maintaining PHP or COBOL so hopefully my luck will hold and I'll be able to dodge Go too.

  • by Lewisham on 4/8/16, 3:23 PM

    Disclaimer: I work at El Goog.

    I recently moved teams so that I could use Go exclusively. It's often been said that Go solves the problems Google developers have, and it's 110% true. It's much easier to get things working, and it's much easier to write things like Protocol Buffers. But the key for me is that Go isn't fun in the sense of "wow, I'm so smart that I managed to one line this thing", it's fun in the "wow I read this code and I can understand what's happening and hack on it to do something else."

    I've worked on teams with monolithic Java code, and it's nigh-on impossible to understand what's happening and where you are in the logic flow. I don't have that problem in Go. I even delve into the standard libraries to see how the original Go devs did something, and I both understand it and think it looks like code I would have written too. I never get that feeling from any other language, where I feel like the standard libs are written by hyper-intelligent aliens.

    When I exclaimed this internally, I got the sarky comment "It's almost as if the things Go leaves out makes it easier". And that's the core of it. Would I like generics? Sure; I do miss map(). But that's it.

    Go is opinionated. People that don't like Go don't share the opinion. That's OK. It's taken me a long time to realize there is no One True Language that can do everything (it was soon after steveklabnik said something along the lines of "I don't know why you'd want to write a web app in Rust"). Once you get there, you won't hate Go anymore, nor indeed any other language.

    Apart from C++. Screw that ;)

  • by gizmo on 4/8/16, 2:34 PM

    I think there is a better explanation for why people dislike Go. All programming languages currently used for the web have gigantic downsides. They're slow. They have terrible package management. They have poor standard libraries. They have no static typing. They have no visual debuggers. They have no good IDE support. They don't integrate well with frontend code. Some programming languages are more flawed than others, and no programming language fails on every front, but they're all pretty objectively terrible.

    Then Google announces Go. A cross-platform systems programming languages for high quality web services. That sounds great! I can't wait to see what Google came up with.

    So when people saw Go disappointment set in. It has some great properties, but the language is not expressive. So Go web frameworks (like Revel) generate Go code at compile time to get the dynamic parts working. Just like we did in the 70s to work around C's shortcomings. Want a container for a specific type? Code generation! It's so clumsy. The lack of exceptions makes writing correct code really tedious. A web service is not a device driver where every edge case has to be carefully considered. Bailing out with an exception is fine. Go disagrees.

    I think the disappointment in what Go could have been explains the vocal dislike. There are only a few companies in the world that can create a new programming language and ensure it becomes popular. Don't get me wrong. Go isn't a bad language. It's just not the language that will push the web forward, and Google was in a unique position to create a programming language that would.

  • by pjc50 on 4/8/16, 2:27 PM

    People who dislike X are upset because they incorporated their favourite Y into their identity, and the success of X challenges their own choices.

    True for football teams, political parties, games consoles, superhero franchises, religions, food choices, colour schemes, preferred spelling variants, ...

  • by Kutta on 4/8/16, 3:09 PM

    Poor post. One of the worst thing you can do in a debate is to psychoanalyze your opponents, ascribe their stances to some sort of personality trait, and ignore the object level. More mundanely, it's just ad hominem, "haters gonna hate".

    What little object-level substance is to this post is laughable. Basically: since Go doesn't have modern language features but it's evidently popular and works, all the people who like modern features are upset since it turns out the modern features aren't needed, after all. Half irrelevant, half assertion out of blue air.

  • by tomp on 4/8/16, 2:38 PM

    It's so easy to dismiss legitimate criticism of any issue as "hate" and "people are emotional" and "their identity is threatened".

    At the end of the day, there is legitimate criticism of Go, just as there are legitimate advantages of using Go. As an additional fact, Go's core developers (and some users) have repetedly been dismissive of this criticism.

  • by xg15 on 4/8/16, 3:42 PM

    I haven't used go so far and much of its criticism might be overblown - but to be honest, that article made me immediately dislike the author.

    The basic argument of the article is that "People who dislike Go are upset because they incorporated their favourite programming language into their identity, and the success of Go challenges their own choices".

    That can be summed up as "People who dislike Go do so because they have been hurt psychologically".

    Apart from being disrespectful to the community of other languages, this basically makes it impossible to give a counter-argument: Whatever kind of argument you bring, in the end you would simply add support to the author's theory because, in fact, you have been trying to criticise the language, so you must be hurt. I don't see how that contributes to a fruitful discussion.

  • by woodcut on 4/8/16, 3:23 PM

    I've been working in Go now for over a year and its honestly made my day-to-day life as a software engineer enjoyable. What gets me down about working in this industry is toiling away on products only to never see them released or being frustrated by absurd compile times, poorly tested components and abstract cathedral architectures. I worked on large C++ projects for around 7 years and i don't care for another flame war about curly brackets or which reimagining of a string is more ascetic. I also worked in Ocaml and some Erlang and yeah while great in principle they lacked the out-the-box tooling and standardisation of practice that I absolutely love about Go.

    If someone creates a ML variant with a day-to-day experience as clarified as Go then I will gladly jump on board.

  • by EugeneOZ on 4/8/16, 2:59 PM

    Article didn't convince me to think following arguments are wrong:

    * Go is a language stuck in the 70’s.

    * Go ignores 40 years of programming language research.

    I tried to use Go and was shocked how they can use it without package manager, without generics, with so brittle concept of channels, with executable comments in code and with so authoritative model of taking decisions about language evolution.

    So I still think criticism of Go is valid and authors are still deaf to it.

  • by jd3 on 4/8/16, 2:22 PM

    ``Go is not meant to innovate programming theory. It’s meant to innovate programming practice." – Samuel Tesla

    http://go-lang.cat-v.org/

    And as usual, http://9front.org/who/uriel/

  • by anonyfox on 4/8/16, 3:03 PM

    Go itself is a cool tool. Crosscompiling stuff, a great standard library, nice toolkits like gorilla and marshalling from/to structs/json/xml comes in handy for small everyday tasks and the primitive imperative style combined with easy-to-use goroutines and quite good performance ... together its a very great tool.

    But I just can't stand the "the go way!" people who defend every fault the language itself has with this mantra. I use go sparingly for small scripts and little services, but would never ever use it for big projects. Yes, for programming rookies in a team its very easy to get started to make valuable contributions, but I for myself just want a more adult language with rich expressiveness and actual static typing (interface{} vs. generics sigh). I understand Go as a "compiled PHP" with all the pros/cons one would associate, and accept that it aims to be a "C as it should be".

    I do not hate Go in any way, I use it when appropriate.

    (PS: I recently realized for myself that Rust will be the ultimate game changer, just give it a few months/years to grow mindshare organically. It's everything but a beginner language, though.)

  • by kazinator on 4/8/16, 2:36 PM

    > Go is the only recent language that takes the aforementioned 40 years of programming language research and tosses it out the window [ ... ] no pattern matching, there’s no borrowing, there’s no pure functional programming, there’s no immutable variables, there’s no option types, there’s no exceptions, there’s no classes, there’s no generics.

    Some of this stuff is quite a bit older than 40 years. That only brings us back to 1976. Exceptions are around mid 1960's or so (PL/I, Lisp). Functional programming, Lisp again, 1958. (Java-like) OOP Classes? At least as far back as Simula-67. Simula-67 is where C++ gets "virtual" from.

  • by rdtsc on 4/8/16, 2:47 PM

    It is a bit more nuanced. Go's dislike is a function of how vigorous the hype for it was vs. how much it actually delivers + a few other things. In general I see it as this function:

      def dislike(hype, results, community, usage): ...
    
    Note the usage, if technology is not used, it won't be disliked. So dislike is a good sign sometimes. Community attitude matters, how are creators and developers treating others, how are well are docs presented, but also how mature and behaved are the advocates of the technology. That is something creators can't necessarily control.

    Other hyped technology is/was node.js. I've heard people say crazy things about, it is the best technology, everyone should drop everything and join the winning team etc etc, async programming is the future and if you are still using threads you are stuck in the past and so on. So it was hyped quite a bit. And then it would have been ok, if it actually delivered, if packages weren't broken and half-assed, if servers under load actually didn't crash and so on. If people who used it where a bit more mature, if there wasn't drama at every step and so on. So it ended up disliked quite a bit.

    PostgreSQL is hyped, people are saying this is the end and all database and so on. But it is not disliked, and the reason is it actually delivers results. It handles JSON blobs, it does other things right, it doesn't catch on fire, doesn't throw your data to /dev/null. So it not disliked.

    As for Go, I haven't used Go, so I don't have much of a comment, but noticed an interesting nuance with how some technologies just happen to be disliked while others, even if hyped are ok.

  • by jganetsk on 4/8/16, 4:00 PM

    I'm one of these ML-derived ideologues this article disparages. I hate Go precisely because of the reasons outlined in this article. In my perspective, OCaml and occupies mainly the same niche that Go does (same balance between high-level and low-level, same skepticism of the object oriented orthodoxy, etc). OCaml is a much better language than Go for so many reasons that I will not go into here.

    I'm also a Googler. Rather than inventing Go, if Google instead would have made OCaml its "Go", the world would be a better place than it is today. If the same tooling were built around OCaml, with some problems of its implementation fixed (multicore/parallelism, etc), there would be no complaints.

  • by dudul on 4/8/16, 2:31 PM

    Couldn't this argument be made about all languages? People into dynamically typed languages would have statically typed languages for the same "don't touch my identity!" reason.

    I personally don't "hate" go. To be honest, I have barely read 20 lines of go ever. But I do not like the idea of a language specifically designed to limit my possibilities. I want to keep seeing "programming" as an art and a creative activity. Not as a factory-like process where there is only one way to do thing, all developers are inter-changeable, etc.

    I get why it's interesting for big corpos like Google. I just don't have to like it :)

  • by alexandrerond on 4/8/16, 3:41 PM

    Seems most people don't understand that Golang is filling a niche that was not covered by anyone: fast, type safe, portable, memory-managed, simple.

    Every language sucks at something. Switching from Ruby/Python to Golang feels like losing magic powers, yes, but some problems are better tackled without that magic and type safety comes as a plus.

    Ruby/Python/C/Java/Scala/Erlang/Elixir/JS/Haskell/Lisp/Clojure/Rust all have different niches. We should really get over it.

  • by Touche on 4/8/16, 3:29 PM

    > Go is the only recent language that takes the aforementioned 40 years of programming language research and tosses it out the window.

    > The mere existence of Go says “your views on what makes a good programming language are wrong”.

    As someone that dislikes Go, that's not it. It's because Go doesn't "own" the fact that it thrown language research out the window.

    If Go advocates waved their imperative programming flag proudly I would just ignore the language completely.

  • by spriggan3 on 4/8/16, 3:36 PM

    I don't hate Go. I think the language is half what it could have been if designed more carefully. I don't doubt Go designers skills, I just think they just stopped half way for various reasons. Which makes Go a bit frustrating.

    However, I hate the Go community, which doesn't hesitate to humiliate people trying to use language in unconventional ways (Martini...) and mock people that come with a valid criticism of the language (rigid type system, lack of dynamic linking, package management...).

    So good language despite its flaws, horrible community. Now is it useful? It'd be like asking if Python is useful despite its flaws, yet Python has a great community unlike Go.

  • by fixermark on 4/8/16, 3:27 PM

    "Go actively tries not to. There is no pattern matching, there’s no borrowing, there’s no pure functional programming, there’s no immutable variables, there’s no option types, there’s no exceptions, there’s no classes, there’s no generics…. there’s a lot Go doesn’t have."

    But one of the things it does have is users. It's almost like language popularity is strangely orthogonal to that laundry-list of ideas that the language theory community have invested a great deal of time in. I'd hypothesize that for someone who is excited about those ideas seeing use (and therefore somewhat justifying the time invested in pursuing and polishing them), a language like Go skyrocketing in popularity relative to its age (http://www.infoworld.com/article/2981872/application-develop...) --- a language that looks at decades of PhD thesis work and says "tl;dr we have work to do over here" --- must be downright infuriating.

  • by pythonist on 4/8/16, 2:17 PM

    Good points, and also correct answer. Identity is hard to question. But when you try Go without prejudice, it's just fun (and productive) afterwards.
  • by LeoNatan25 on 4/8/16, 3:01 PM

    Hate is a very strong word. I don't see a point in "hating". Strong dislike, however, I can see, and I think my reasons for not liking Go are "Go ignores 40 years of programming language research", "Go is a language for blue collar (mediocre) developers" and "that other people were falling for it." I guess I have a similar dislike for every technology which is primarily meant to make the life of the developer, rather than push the end product's quality. I guess I have a dislike for this culture, that has been brewing in recent years, in general. But is that my "identity"? I don't know. All I do when I see these types of technologies, is roll my eyes, and move on; it means I have to be more picky in my job picky when looking for jobs. People are taking this way too seriously.
  • by jfaucett on 4/8/16, 3:15 PM

    The gap between the premises and conclusion of this argument seems broad to me...

    Here's the summary: (leaving out some smaller arguments i.e. scala/rust vs Go language philosophy)

    1. Go challenges peoples identity.

    2. Challenging peoples identity makes them respond emotionaly not logicaly.

    3. Other people are being deceived into liking Go.

    4. People become more vocal as they attempt to sway the deceived from their erroneous path.

    5. (conclusion): Therefore, everyone criticizes Go so much.

    Notice all the premises could be true, but they would not strongly imply the "so much" part i.e. "a lot". It would just mean some people would respond more vocally/emotionaly, certainly not everyone.

    Anyway, I think there's still some missing premise(s) which would explain why there is "a lot of" criticism for Go, if that is the case - I have no idea as I'm not involved with Go at all.

    Anyone care to fill those in for me?

  • by jrobn on 4/8/16, 3:21 PM

    One of Go's selling points is always it's a pragmatic language. But after using it for awhile and implementing a few web apps and APIs in it. I've crossed it off my list for web app or API development. It's great at making standalone CLI tools, however.

    I've since moved to using Elixir (erlang) for web app stuff (even some scripts) and I am much happier. I'm not in love with Elixirs syntax, but it's nice and includes meta programming. Elixir is a much more pragmatic language in my opinion. Once you use things like pattern matching (what could be more pragmatic) you can't go back. Raw performance is nothing to write home about but in my use cases elixir does a great job of hitting the sweet spot.

  • by tylermac1 on 4/8/16, 2:16 PM

    Note: This is from Oct '14
  • by xlm1717 on 4/8/16, 2:21 PM

    >Obviously, not everyone hates Go.

    Well, at least the author saves me the time reading the rest of the article.

  • by JulianMorrison on 4/8/16, 2:29 PM

    Why would anyone think Go and Rust are bitter rivals? They're great tools for different things, with a broad margin of overlap.
  • by CyanLite2 on 4/8/16, 3:48 PM

    Go is one of the fastest runtimes out there, on nearly every platform, produces one clean static binary, fixes the concurrency/async problem that makes other lanaguages so terrible to code in, and has one huge company backing it. But then they miss the boat on simple stuff like generics.

    Everyone hates Go because it solves the problems that most other languages suffer from. And if they (Google) make a few improvements it would probably the The Killer Language of Choice out there. But instead they suffer from the elite smugness and won't adapt.

  • by k__ on 4/8/16, 3:37 PM

    I never used Go, but the main issues seemed to me that Google promised a C/C++ alternative and failed. Instead they made a Ruby/Node.js alternative.

    I mean, telling C/C++ devs GC is the hit and parametric polymorphism suck? What did they expect...

    Don't know if I'm right, but that's the gist I got from all the comments and news about Go.

  • by innocentoldguy on 4/8/16, 2:51 PM

    While I agree with the premise of the article, I don't think this is why I don't use Go. I don't hate Go, but I also don't think it brings anything new or elegant to the party. Languages like Rust and Elixir are exciting to me. Go just feels like a rerun of everything I've done before.
  • by f0code on 4/8/16, 2:53 PM

    I've been using Go for several months and love it.

    "People shouldn't like things I dislike." --waaaah

  • by beyondns on 4/9/16, 1:37 PM

    I like Go. I've little project https://github.com/beyondns/gotips The essence of Go in some little piece of code:

    select { case <-time.After(queryTimeLimit): cancel() <-done // wait fmt.Printf("time out") case err :=<- done: if err != nil { panic(err) }

    }

    // https://github.com/beyondns/gotips/blob/master/tips32.md#17-...

  • by agounaris on 4/8/16, 3:04 PM

    I like functional languages but I strongly dislike their communities. Mainly because they treat everything like a nail... Golang on the other hand focuses on solving real problems not inventing things like metaisomorphic multipolymorphism etc...as always technology is fair! Go check out the "real life" projects in go and the adaptation they enjoy.
  • by xigency on 4/8/16, 5:33 PM

    I would say Go is a very unintuitive language. And not in an especially useful way.

    Honestly, it comes across as a language designed by someone only incidentally aware of programming. This isn't an argument, this is the first impression.

    At the risk of sounding stupid, and not really having a say in the argument for or against Go, I will say I tried to learn how to program Go on my own by trying to "guess" how to write a program. (A time waster, I had seen code but mainly glossed over it.) The program I tried to write was "Hello, World" and the way I tried to guess was using the Go website's sandbox.

    The result: https://play.golang.org/p/oc-cxnjJiI (Best case: https://play.golang.org/p/NJpwhLUPA_)

    I'm sure the same thing would happen trying to learn C++ from a compiler's cryptic error messages, but C++ is not Go.

    One thing I dislike about Go is the culture or lack-there-of surrounding it. Especially in the canonical Hello World example, which chooses to use Japanese/Chinese language in an unnecessary way. A little presumptuous. Especially since it's used in a one-off sort of way with no explanation.

    I also think it's interesting that it's the survivor of the Go and Dart launches, when I never saw the purpose of Go when it was launched, compared to a special set of libraries for C.

  • by jokoon on 4/8/16, 2:46 PM

    There are many good things in go, but some very weird stuff too.

    Good things are multiple return values, lack of semicolon, optional braces for if and for, insanely fast compile time.

    Bad things are forced curly brace style, complicated function declaration syntax, variable declaration which is too different from C in my opinion (type after the variable name).

    I'd honestly prefer a language which is even closer to C or C++ in its syntax, with native maps, sets, queues, tuples, etc (pythonic stuff) without necessarily having templates or inheritance. I put a lot of value in syntactic sugar over overblown abstract stuff. Using plain struct with data oriented programming will be more than enough in most of the cases.

    We are still waiting for C++ modules, which obviously might be lagging because C++ has an ISO standard and a lot of existing code which involves backward compatibility, but I think we need a new language that could be faster to compile, just like go is.

  • by Gonzih on 4/8/16, 2:51 PM

    I did not like go until I tried it out on small pet project. Now I know how to enjoy it.
  • by mwsherman on 4/8/16, 3:16 PM

    Attributing a person’s preferences to identity is just ad hominem. That doesn’t even imply it’s wrong or mean-spirited; it just means that it’s “preferable” to talk about a person’s motives. Very Kahneman.
  • by sargas on 4/8/16, 7:40 PM

    If you replace "Go" with "JavaScript" the whole blog would also apply. Except there are way more JS lovers than Go lovers out there. And these two groups almost seem to never overlap.
  • by amelius on 4/8/16, 2:16 PM

    Offtopic: Can we please use "GoLang" for the language, so we can use "Go" unambiguously for the game?

    Especially in titles, where there is little context.

  • by nobullet on 4/9/16, 6:04 PM

    I have a strong feeling that there is a marketing campaign going to promote Go. It is promoted so hard that it became annoying. :(
  • by innocentoldguy on 4/8/16, 3:08 PM

    The main problem with Go, and this is a deal breaker for me, is that it forces opening curly braces onto the same line, instead of putting them on a line by themselves. This is clearly wrong, and flies in the face of curly good taste.
  • by dismal2 on 4/8/16, 3:48 PM

    why everyone loves clickbait
  • by pacala on 4/8/16, 2:22 PM

    ML is also simple, pragmatic and from the '70s.
  • by zxcvcxz on 4/8/16, 2:34 PM

    I like Go but I hate my self for it.
  • by gepoch on 4/8/16, 2:29 PM

    Very sorry to make an aesthetic complaint, and Raleway is a fine font for certain applications, but blogs that use low contrast fine raleway for the body text just kinda make me want to read something else.
  • by GreaterFool on 4/8/16, 2:54 PM

    I would burn Go with fire and salt the earth because it's the bloody compiler will refuse to compile my valid code if I have unused imports or variables. It makes programming in Go a terrible experience and that's why I won't touch it.