Programmers get very attached to their favorite languages, and I don't want to hurt anyone's feelings, so to explain this point I'm going to use a hypothetical language called Blub. Blub falls right in the middle of the abstractness continuum. It is not the most powerful language, but it is more powerful than Cobol or machine language.
And in fact, our hypothetical Blub programmer wouldn't use either of them. Of course he wouldn't program in machine language. That's what compilers are for. And as for Cobol, he doesn't know how anyone can get anything done with it. It doesn't even have x (Blub feature of your choice).
As long as our hypothetical Blub programmer is looking down the power continuum, he knows he's looking down. Languages less powerful than Blub are obviously less powerful, because they're missing some feature he's used to. But when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn't realize he's looking up. What he sees are merely weird languages. He probably considers them about equivalent in power to Blub, but with all this other hairy stuff thrown in as well. Blub is good enough for him, because he thinks in Blub.
When we switch to the point of view of a programmer using any of the languages higher up the power continuum, however, we find that he in turn looks down upon Blub. How can you get anything done in Blub? It doesn't even have y.
By induction, the only programmers in a position to see all the differences in power between the various languages are those who understand the most powerful one. (This is probably what Eric Raymond meant about Lisp making you a better programmer.) You can't trust the opinions of the others, because of the Blub paradox: they're satisfied with whatever language they happen to use, because it dictates the way they think about programs.
I think this basically nails the attitude of every single go convert that I have spoken to. I am starting to get tired of hearing lines like "that lisp stuff is too complicated, I am a go programmer" or "why would you do x in y way, it's so much better in go".
I don't think I have ever seen such unrelenting fanboyism in a programming language. It very well may be a fantastic language but its not an end all be all, we would do well to remember that.
> I don't think I have ever seen such unrelenting fanboyism in a programming language.
It's died down, but discussions involving C# used to be rough, take pretty much any PL feature added since 1.0 (generics, lambdas, local type inference, etc...) and any time they were suggested before their official blessing and addition by Microsoft would be met with charges of useless fancy-pants PL wankery of no use to Real Programmers in the Real World who were Very Productive and this was Abstract Useless Stuff for CS Undegrads Who Didn't Work In The Real World.
I think it's mostly inevitable, to me it's no different than asking group of farmers which make of pickup or tractor is best, or a deliveryman which brand of shoes are best... I'm pretty sure you could come up with at least one analogue for most any vocation.
In programming, we have: language, practice (formatting, documentation, framework, etc.), methodology (testing, planning), development environment (integrated or otherwise), etc. and each of these is a lightning rod for disagreement. I think it just seems to be more prevalent for software engineers due to the fact that a majority of our discourse occurs online.
I'm a Go convert. And I have learned and understood the concepts of a lot of other programming languages before, including Haskell, Scala, Rust, C++, Scheme, Common Lisp, Smalltalk, Ruby, Python, Perl, PHP, Lua, JavaScript, Groovy, CoffeeScript, Dart, Java, C#, Objective C, C, Pascal, Basic. I understand higher-order functions, currying and sectioning, parametric polymorphism, monads (including the option/maybe monad), product and sum types, pattern matching, multiple dispatch, meta-programming etc. Yes, Go lacks most of these, it's a "dull", imperative programming language without parametric polymorphism or an ML-style type system (which is not "modern", btw, it's from the early 70s just like C) and with nil pointers. Nonetheless, Go is the most enjoyable programming language I've ever used. It strikes the right balance between features and their cost. I'm tired of being told that I'm just too stupid to see the light.
I'm not sure what your point is, whether you think go is simple and powerful like lisp, or the new java, but simply quoting "The Blub Paradox" makes you sound pretentious (on a site where the largest percentage of readers are probably already familiar with said essay nonetheless).
I don't think this is really applicable to the article anyway, since it's an article commenting on two very different languages and programming styles, not about being satisfied with a Blub.
I would agree, and add that simply referencing the article, or quoting relevant portions, along with introducing some original narrative would've been much more productive (conducive to conversation).
>I'm not sure what your point is, whether you think go is simple and powerful like lisp, or the new java
Really? I find it hard to believe you can't tell what is intended. It certainly is applicable to the article, as the article can be summarized as "I've moved up a language on the blub line, and now my old perfect language is clearly inferior, but my new blub is perfection incarnate".
> One of the things I like about Go is that it offers much better ways to write things that you’d usually write with callbacks.
I fail to see how saying that one likes replacing callbacks with channels translates to saying Go is "perfection incarnate".
Go isn't perfect, but they hit a really good subset of features that a lot of people find very productive. I, and many others that use go, find that pragmatism worth the tradeoff.
Go makes what my co-workers and I do easier than other languages we've tried. Period. That's why we're using it. That's the reason other's I've communicated with have given as well. It's not a magical unicorn, it's not going to impress PL theorists; it's going to get work done.
The lack of generics, or parametric polymorphism, or immutable data structures, or LINQ syntax, pattern matching, etc., isn't keeping us from shipping code.
>I fail to see how saying that one likes replacing callbacks with channels translates to saying Go is "perfection incarnate".
It isn't. It is saying "I don't realize that this is actually worse than what lots of languages provided before go even existed, so I think it is awesome". Which is the point of the blub response. Go isn't interesting, it is blub.
Programmers get very attached to their favorite languages, and I don't want to hurt anyone's feelings, so to explain this point I'm going to use a hypothetical language called Blub. Blub falls right in the middle of the abstractness continuum. It is not the most powerful language, but it is more powerful than Cobol or machine language.
And in fact, our hypothetical Blub programmer wouldn't use either of them. Of course he wouldn't program in machine language. That's what compilers are for. And as for Cobol, he doesn't know how anyone can get anything done with it. It doesn't even have x (Blub feature of your choice).
As long as our hypothetical Blub programmer is looking down the power continuum, he knows he's looking down. Languages less powerful than Blub are obviously less powerful, because they're missing some feature he's used to. But when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn't realize he's looking up. What he sees are merely weird languages. He probably considers them about equivalent in power to Blub, but with all this other hairy stuff thrown in as well. Blub is good enough for him, because he thinks in Blub.
When we switch to the point of view of a programmer using any of the languages higher up the power continuum, however, we find that he in turn looks down upon Blub. How can you get anything done in Blub? It doesn't even have y.
By induction, the only programmers in a position to see all the differences in power between the various languages are those who understand the most powerful one. (This is probably what Eric Raymond meant about Lisp making you a better programmer.) You can't trust the opinions of the others, because of the Blub paradox: they're satisfied with whatever language they happen to use, because it dictates the way they think about programs.