Poll: What are your liked and disliked programming languages?

996 points by wting ↗ HN
This is a combination of these two polls:

    https://news.ycombinator.com/item?id=3746692
    https://news.ycombinator.com/item?id=3748961
That resulted in this chart:

    https://i.imgur.com/toGKy21.jpg
Since that poll is ~18 months old, I thought an update is in order.

This poll also adds a few new choices: F#, Go, R, and Rust.

Vote as many choices as you'd like.

Note: By voting for a language you are not up voting this poll. Please up vote this poll to keep it alive.

478 comments

[ 3.1 ms ] story [ 386 ms ] thread
I hope it's okay to vote Like and Dislike for javascript
I had to do that for SQL
Just did the same thing, we're all in this together, though 7-8 yeas ago it would've been a straight dislike. It's power is growing, be wary.
Same here, it's quite unavoidable if you started out with javascript coding and matured with it.
I would have done that for XSLT if it had been on the list.
Me too. I use it daily, and am both amazed and confounded by it. Powerful and frustrating.
Forgive my ignorance, but I inherited a wad of xslt fairly recently, and it seems frustrating and verbose to me.

What do you like about it? Can you point me to some examples of good code?

One thing about XSLT is that when it is bad it is really really bad.

It can be fairly elegant, especially if you know the difference between apply-templates and call-template and are happy with all of the feature of XPath. But I suspect that is fairly rare....

XSLT is a purely functional language so inherits much of the general set of likes/dislikes that go with them.

    <xsl:if test="x">template</xsl:test>
is basically this in Lisp:

    (if eval(x) (apply-template template) nil)
And <xsl:for-each> is equivalent to map in Lisp. It's a functional projection, not an imperative loop, even if the syntax looks like that of an imperative language.

Functional purity gives you the usual advantages: execution that can be testable and fast and parallelizable and predictable in space and time usage and secure in presenting little attack surface for injections and overflows and such. XSLT is exactly what it claims to be, a declarative way of transforming tree structures.

The problem with XSLT in enterprise land is that real world business requirements don't fit well into that. Real world applications involve things like iteratively computed subtotals or comparing separate records together or picking up user preferences for formatting or other sorts of conditional logic. All of which is a poor fit for XSLT and leads to really complicated XPath hacks.

And your average enterprisey programmer comes from imperative languages and thinks and codes in imperative terms, often not even realizing XSLT is a functional language. So it's no surprise that real-world XSLT ends up as muddy balls of crap.

That was very informative, thanks.
I did the same for C++. I hate many aspects of the language, and it feels really ugly compared to newer languages like C#, or even D, but it's still my language of choice for some projects (mostly because the tools are mature and almost everywhere).
uhh PHP dislikes are going up (what a surprise)
I don't really get why people hate it so much, sure it has it's flaws, but it also has it's strengths.
Some people also hate Obamacare, civil liberties and human rights. Who knows why?
Its strengths are few and equivocal; its flaws are unspeakable and legion.
Its flaws clearly aren't unspeakable because if they were so many people wouldn't keep droning on about them.
Excuse my imprecision; I should've said 'undeniable', although no doubt that would've invited more caviling than what I did say.
I only get the PHP hate from the startup communities. I guess it is just not hip to be using PHP.

There is also way to much love for Apple products.

In the end the tools you use don't matter.

I never heard an investor say: 'Did you write this in PHP on a PC? I'm sorry we are not interested.'

PHP's only real strength is it's ubiquity.
Like hmmm... Java and Javascript?
Next to PHP, Java and Javascript are beacons of pristine language design.
What is it about CoffeeScript that people don't like?
I think some people still like wasting their time by writing "real" code from the start.
Debug story perhaps? I haven't tried it but that's what puts me off.
I guess some just dislike the idea of sugaring Javascript. Others my think that it hides something that can bite your ass, though imho the oppossite is the case. For me personaly after spending some time with CoffeeScript writing plain JS was a displeasure for sure.
CoffeeScript is only syntactic sugar. It brings very little new to the table, but perhaps worse of all, it doesn't really fix all of JavaScript's WTF-issues while adding a few of its own. While it's an improvement over JavaScript, its advantages are sometimes outweighed by the extra hassle to compile and deploy it.

I don't really dislike it but I really do not see myself using it if I had a task where I needed JavaScript.

Suprisingly, I have never even thought about compiling on Coffeescript since my rails app does that for me. Personally, I love using Coffeescript because it's just so much easier to write compared to javascript without thinking about braces and semi-colons. On the whole, I guess what framework you use affects how you use a language. In rails projects, it's very efficient to use coffeescript over javascript.
The problem is that sometimes what you write in CS results in surprising and/or incorrect JS.

This can be caused by an unnoticed block of whitespace, corner case of CS language itself, or me simply screwing something up.

About 5-10% of the time I hit a WTF in CS, which is, for now, an acceptable trade off vs. using pure boilerplate ridden JS.

If there was a concise TypeScript a la Scala for Java, I'd be all over it.

The syntax is broken. Things like operator precedence and associativity are the exact opposite of math conventions:

    f x + f y    // is f(x + f(y))
    f g x        // is f(g(x))
I don't understand what's wrong with the second example. What do you think it should do?
In ML-family languages like OCaml and Haskell, function application is left-associative: f g x = (f g)(x).
Not quite -- the rule is pretty simple: Implicit function calls associate to the right, to the end of the line (or the end of the trailing block). This allows you to write code like this:

    console.log inspect value

    model.save(attrs).then ->
      ui.update attrs

    rect.scale height * factor

... and have all of the results come out correctly, while leaving the code readable. If the rules were "more math-like" as you say, then none of that would work. Perhaps it would harmonize with special libraries that used functions (automatic-partial-application a-la Haskell) in a different way than JavaScript does ... but that's not the world we live in. It's gotta harmonize with JS functions as they exist.
My brain isn't plastic enough to make this switch. :( For me, those code examples are uncomfortable to look at. backwards read to trying like It's
Right-o. The trick is to "read" it like pseudocode, or like English-ish.

    Log the inspected value.

    Save the model, then
      Update the UI with the attributes.

    Scale the rectangle by (the height times the factor).
The big syntactic difference still being the "model.save" vs "save the model" ordering of dot-notation. But them's the breaks.
(comment deleted)
I'm not sure where the idea originated that readability scales inversely with the number of parentheses, but I wish it would hurry up and die.
I'm not sure where the idea originated that readability scales with the number of parentheses, but I wish it would hurry up and die.
I'm not sure where the idea originated that readability scales, but &c., &c.
too similar to python
Not enough if you ask me. As other commenter said, too many JS-WTFs remain.
Not at all. I love Python and I don't like CoffeeScript. I think CS superficially looks like Python, but conceptually is more like Ruby/Perl.
It's near unreadable. It's optimizing the wrong things, prettiness (I don't think it's very pretty at all) and keystroke counts, vs readability, fewer errors and maintainability.

It also bugs the fuck out of me that CoffeeScript projects frequently end up being given a *.js extension in the name and how often people who want nothing in the world to do with CoffeeScript, people like me, end up having to deal with it for some reason. Like I don't like ada, and I never have to look at it. ada never ends up in my editor or on a github page I'm looking at, but frequently someone puts CoffeeScript somewhere where someone was expecting JavaScript, like a StackOverflow answer, or a package for Meteor, or something. If CoffeeScript stayed out of my life, and I out of it, I would probably hate it a lot less.

It's not that it's transpiled. I mean that isn't a great thing, but for example I like the idea of Dart and even TypeScript. But CoffeeScript? No thanks.

    > [...] how often people who want nothing in the world to do with CoffeeScript, 
    > people like me, end up having to deal with it for some reason. Like I 
    > don't like ada, and I never have to look at it. ada never ends up in 
    > my editor or on a github page I'm looking at, but frequently someone 
    > puts CoffeeScript somewhere where someone was expecting JavaScript, 
    > like a StackOverflow answer, or a package for Meteor, or something. 
    > If CoffeeScript stayed out of my life, and I out of it, I would probably 
    > hate it a lot less.
As the creator of CoffeeScript — I think your answer here is right on the money. It's a pretty perfect answer to joeblau's question.
First thanks, Coffeescript saved me days of work.

But I can understand , because it's popular , some people feel like they are forced to understand or learn it.

Yet you can be proud that Coffeescript influenced the latest ES spec, that's all that matters , you pushed Javascript forward, by saying "Dont wait for other to make the stuff you need, do your own stuff and eventually people will wake up and adress your intial issue".

Hear hear!

I'll never forget reading a blog post [0] by Brendan Eich in which he addressed upcoming ES features that were influenced by or emulated Coffeescript syntax.

It was a pretty solid Krusty the Clown reference on his part.

[0] https://brendaneich.com/2010/11/paren-free/

(comment deleted)
>It also bugs the fuck out of me that CoffeeScript projects frequently end up being given a *.js extension

If a project compiles down to Javascript and is intended to be used as such, a .js name suits it regardless of the source language.

For the project, possibly. Not for an individual source file. That's bananas.
Well since you can compile python, clojure, etc etc to JavaScript I guess the .js extension is meaningless. In my opinion it isn't at all OK, because a .js extension means that the code is in JavaScript, so that I can look at it, and maybe contribute. I'm not interested in CoffeeScript widgetmajigs that turn CoffeeScript into JavaScript. Use .coffee or maybe CoffeeScript just can't stand on its own. Maybe it's just riding JS's coattails and the moment it separates it becomes abandoned.
After using CoffeeScript for a few months I find JavaScript harder to read. Of course something foreign to you is going to be harder to read.
As a side note, I dislike the use of the term "transpiled."

A compiler is a program which translates between two programming languages. CoffeeScript -> JavaScript is just compilation. There is no need for a new word.

Significant whitespace
It was a good idea but failed in execution. It might take fewer characters to type an instruction but at the cost of what? Being difficult to read? Ambiguity? Not really worth the time.
Any unfamiliar language is hard to read and will have seeming ambiguities.

In my experience working with CoffeeScript, I've always found well-written code easy to read with no ambiguities.

It's a quirky dialect of JavaScript, which has very little to offer. There is less typing, but that certainly wasn't JavaScript's biggest issue.

With languages like TypeScript, or Dart, you also reduce the amount of typing work, but that's just a side-effect of the good tooling these languages have to offer. You can auto-complete everything.

It makes a lot more sense to boost productivity via structure and tooling, because that's what really helps with scaling.

Most of the time, it's easy to ignore programming languages that you aren't familiar with. In day to day programming life, you're not going to be running into many examples of Eiffel, or Dylan, or D or E, in the wild. So you're not going to feel very strongly about them, either pro or con.

For better or for worse (I think for the better), CoffeeScript is fully interoperable with JavaScript. The runtime characteristics and the lowest-common-denominator ES3 support are such that you can use it just about anywhere you might want to use JS. That, and a modicum of success, means that JS programmers sometimes stumble across it in unexpected places, only after popping the hood. e.g. "I thought I was just using a simple library -- Eauggh! What is that stuff down there!" This makes it very hard to ignore...

As a JavaScript programmer, you're forced to ask yourself the question, "Why haven't I given CoffeeScript a real try yet?" Not all, but a large part of the dislike comes from folks rationalizing their response to that question to themselves.

tl;dr, CoffeeScript is almost perfectly situated to inspire fear and loathing in JavaScript programmers with closed minds.

I frequently experiment with new programming languages (go, Rust, others) and I like Dart and have tried it. That's significant evidence that I'm not close minded. However CoffeeScript was at least for me the first of its kind, so maybe my negative perception has stuck with it unfairly. I do find it hard to read, but I'll tell you what I'll give it a try. :P
I found it a little awkward to read at first, but that went away in a short time. I suggest giving it a proper whirl. Most people who I've introduced to CS seem to really like it.
Ah okay, that's a pretty interesting review. I was at an AirBnB Tech Talk and Isaac Schluetter (Head maintainer of Node.js) and he discussed his feelings on it. I've used it a few times and it's been fine, but I never felt compelled to learn it.

[1] - http://www.youtube.com/watch?v=zM-gUM9C5SA&feature=player_de...

There's nothing of substance in his response. When asked what's worse or more ambiguous about CoffeeScript, his answers are:

1) That people who don't know CoffeeScript have to use CoffeeScript when they encounter CoffeeScript.

2) He thinks require might have been implemented differently, though he thinks that maybe that might have been changed, but "I don't really use it so I don't really know."

Very interesting that people are saying things like "significant whitespace" and "too similar to python" - I personally love Python and I like that coffeescript bears some resemblance to it. I voted "Coffeescript - Like" because it removes many of the mundane aspects of JS programming.

Definitely doesn't solve many of JS's problems, but it certainly makes things easier when writing client side apps. We use it a lot for Backbone development.

My opinion is that it ended up causing more problems than it fixed. In theory is nice and beautiful, but once you start using for large projects you notice that it kills readability and introduces some other small problems.
Fixes a non-problem.

Ok, so Javascript has a bunch of gotchas but it's an interesting language which I both like and dislike but I don't dislike it enough to add yet another layer to my dev platform.

Also, as someone stated elsewhere on this page the true solution is to make a browser virtual machine and use any high level interpreted language you want.

Personally I'm ready to start filtering anyone that prefers JS over CoffeeScript. Its just about superior in every way. Maintainability goes up as the lines of code drop precipitously and significant whitespace, come on guys. I use bracey languages all the time, and moving to one that doesn't isn't that big a deal.

The real problem is there are a lot of "developers" that came up just doing simple Javascript functions. They know their functions, and they dont want their world to change. They would rather accidently reference closure or global and type significantly more code than learn a slightly different way to code Javascript.

Complaints such as "extra hassle due to compilation" are laughable honestly. If adding a build step is an extra hassle, this might be the wrong profession. Tinkering should be in your nature!

CoffeeScript super charges Javascript. Any truly competent JS programmer that gives it a try for a few days would realize it.

"If adding a build step is an extra hassle, this might be the wrong profession."

That's a very railsy answer. The strength of the web is that you don't need to run a build at all. I think that's the fundamental dislike of Coffeescript. I've worked on so many html frontends where a build process wasn't necessary to accomplish our job, and if someone tried to introduce one for the sake of coffescript it would simply be an annoyance.

It's also that you lose any ability to step-debug at the moment. You still need to know Javascript to debug Coffeescript by and large.

That mental context-switch overhead is the whole driving philosophy behind NodeJS in the first place - don't switch languages so often. CS/JS is enough of a change that the overhead is not insignificant.

This is no longer true. You can debug CoffeeScript in web browsers now with source maps. Yes you may need to dig into JS for a more severe bug but most of the stuff is debug-able in source maps.
Eh, I don't find switching back and forth to be that problematic in terms of context switching. That's because CS is very similar to JS in everything but syntax. Which is also why a solid JS background is almost essential when writing CS.
I'm currently using CoffeeScript for a big project on the web and the build step that I have automatically watches my coffee files and recompiles on a new change. Group that with using LiveReload and you have an auto recompile and reloading application with no additional manual build step.
The problem for me is not technical per se, but that it adds another element of complexity to an already complex programming environment and has implications for human resourcing.

Becoming expert in a new language goes beyond learning syntax; one must also learn code conventions/style, compiler/transpiler quirks, runtime quirks, and library/framework ecosystem. In CoffeeScript the last two may be moot, but the first two remain. Additionally, to be an expert in a transpiled language, one must be an expert in the target language. It is much harder to find someone that has this knowledge and experience in both CoffeeScript and JavaScript.

This begs the question of each web dev team: if you are already experts in JavaScript, is the value-add from the transpiled language worth the cost of increased solution complexity/cognitive load, and smaller talent pool? My take is that CoffeeScript doesn't meet that bar for most teams.

For individual projects, or isolated one-off tools, these non-technical issues are moot. Also, server-side may be less of an issue since complexity is reduced by not having to write for multiple runtimes (only Node.js and usually without DOM).

And the award of least significant poll of the week goes to...

Seriously, you won't get anything meaningful out of this, people will vote for the language they like and then bash the usual suspects (PHP, actionscript, C++,...). Also they will browse the first 20 entries or so and then get bored and skip to the end.

I'm sure the people who "dislike cobol" (7 people at the moment) have intimate knowledge of the language in production in order to cast such a vote.

It's just a popularity contest and a bad one at that.

Also: "Other - Dislike: 5 points". Enough said.

There's going to be the common blabber and hating on the usual suspects but polls like this tend to be good ways to bring up a general topic and let everyone discuss. Maybe it would've been better in a AskHN but at least here we get a list to reference (and for people to get angry at what's missing, people love getting angry). Also, it gives a view of what this specific community in this specific thread feels and adds to the context when reading other threads.
I don't think it usually creates interesting discussion. Just a billion of comments with no replies along the line of "XXX is great!" "YYY sucks!".

Everybody talks and nobody listens. It's just pointless popularity contest.

You have no idea what you're talking about. XXX is terrible. The new release of YYY has solved a lot of the problems that most people complain about.
None of the ideas in YYY are new. It's a mundane and vulgar rehash of things we already had in the ZZZ in 80s but done badly. OK, so the world's largest sites run YYY -- that's pure luck, not science. Or the fault corporate HR drones that don't know better asking for YYY skills. Or a massive conspiracy. Or maybe programmers just are dumber now than 10 years ago.

How can YYY even be taken seriously when not supporting homobubonic retroviral proto-smurfs? In fact, I've just written a nice tutorial on smurfs in ZZZ and how smurfs are just like smurfs -- once you are past that, writing a complex application like a "20 questions" game should not be a problem.

Don't get me started on dynamic versus static smurfing!

You forgot to say "I don't get why anyone is surprised by..", to get the full HN bingo card.
Did you even read the last thread? What you said did not happen then and it isn't happening now. You're the only person posting pointless comments in the whole thread.
Polls like this are the equivalent of asking a builder if he likes wood, metal, concrete, plywood, slate, etc. Or if he likes a saw more than a hammer.

Which only a complete moron would do.

That's only a valid comparison if you're really big into polyglot programming AND believe that all languages are great in their own special way.
It's quite silly asking such a subjective question, but aren't most polls just that, subjective?
Human experience is subjective. It makes no sense to make an objective poll.
Sampling bias and memory issues aside, you can make an objective poll. "Have you ever eaten oatmeal?"
All programming languages claim to be better than that "Other" language!
Not all.

Lisp doesn't claim to be better (it is often argued that it's worse). But what Lisp does right, it's meta programming, therefore letting the plain programmer improve the language himself.

So while as you suggest, all programming language will have warts and stumbling blocks, possibly deal breaker problems, that you can't do anything about, in Lisp, you can always and usually very easily overcome them yourself, with a little meta programming.

Lisp is not the best programming language, but what you make of lisp is the best programming language for you and your domain.

What if the "deal breaker problem" is all of the parentheses? ;)
Given all the weird syntax people put up with in other languages I don't really get the complaint.
No one who seriously gives Lisp a chance ends up disliking it because of the parens. It's about as reasonable as disliking C/C++ because of semi-colons. It's a superficial thing to criticize because you obviously haven't actually given the language a shot.
Polls like these are meant to be subjective and to encourage discussion. Dismissing them because they're not scientific kind of misses the point.
Also I see no reason why this is any more subjective than it claims—it's not asking for which language is some ill-defined notion of "best" but instead which ones people "like".

I think it's perfectly reasonable to dislike a language you've never used. You can't claim it's a "bad" language (for reasons perhaps even above not having a definition for "bad") but I can't claim that you don't dislike it.

That fact that people are disliking languages they've never used is one of the reasons I'd agree the poll is meaningless. Sure, it's reasonable to dislike a language for whatever reason, but that doesn't mean that the results of such a free form poll can be interpreted in any meaningful way.
Who cares, it's interesting. It's cool to just to gauge the general sentiment of the languages on HN.
There are several ways to find meaning in the results. I claim it is a(some what sloppy, non scientific) measurement of PL bias in the HN community.
You can dislike a language for a number of reasons that have little to do with using it while still being meaningful. e.g. community behaviour, community style, and relative number of security flaws in products that use that language.
Just curious, why are people bashing Actionscript? The language itself is based on Javascript and Javascript isn't getting so much hate. I know everyone hates Flash now... maybe I just still have a soft spot in my heart for programming Flash-based games back in the day.
1/ Because it's at the top of the list and people are more likely to cast a vote

2/ Because most people (myself included) don't know actionscript but think Actionscript == Flash and downvote based on that.

There needs to be some way to differentiate people that hate a language for some external reason (anti-MS, anti-Apple, anti-Flash) or those who hate it from having used it. I suspect Java has more dislikes from actual users, where Actionscript and Perl get their dislikes from people who have never gone full time in either language.
I marked dislike on Actionscript because of AS3. Actionscript is basically Javascript, but with Actionscript 3 they added type annotations for static typing features. IMO, it did not fit in well with the language, and the integration between the two worlds (static vs dynamic typing) was poorly handled.
Based on the numbers that I see, JavaScript is disliked more than ActionScript. When you take into account people's general dislike for anything flash related and how few people know anything about the language I think it did ok. What would be interesting would be to see a poll of the different versions of ECMAScript proposals and see what the public thinks of the real language differences between each. Classes are coming and structs are proposed and many of the things that ActionScript has had for a while are also leaking into JavaScript like rest arguments, and proxy objects. Overall I think ES6 is clearer and more flexible and I'm cool with omitting types unless you are doing things like types arrays and so on. ActionScript will go away over time and over time JavaScript environments will catch up even if they are still way behind in many respects today.
Classes without any kind of type checking are worthless imho. I would have prefered implicit interfaces instead of classes.
> Based on the numbers that I see, JavaScript is disliked more than ActionScript

Not now: AS has an 84% dislike rate to JS' 39%.

The same reason everyone was down on Javascript 10 years ago: The development tools, APIs, and runtime were unpleasant. Unfortunately for flash developers it doesn't look actionscript will be following in Javascript's footsteps.
Actionscript has basically no error checking. It'll check for syntax errors and that about it - every other error manifests as a strange bug or "why the F* is nothing happening!?!" Then you spend an hour tracking it down and discover the cause was some trivial thing that any normal language would have simply raised a compiler error for in the first place.

And on top of that, its libs are very callback-heavy even in places where a synchronous option should have been available, so even very basic sequential code sometimes gets turned into a messy chain of callbacks.

That's why I made a beeline for the "ActionScript - Dislike" button.

Are you serious? When's the last time you used ActionScript, 2004? Modern AS3 compiled using the FlexSDK is a proper development environment with compile-time errors for types and all. Combined with a debug player, you get both compile-time and runtime errors.

It certainly has a hell of a lot more error checking going on than something like JavaScript by the virtue of being a statically typed language first with dynamic stuff second.

That's not to say that obscure bugs don't exist in the runtime as with every other runtime ever, but don't misrepresent something you don't seem to be well versed in.

Also, in most cases, is it the actual programming language we hate or is it the code we've seen written by people who had no concept of the language that we hate?
Or maybe people have only programmed in one particular implementation of a programming language, e.g. Rubinius, Codehaus Groovy, or IBM Cobol.
What other Groovy implementations are there?
>Also they will browse the first 20 entries or so and then get bored and skip to the end.

Why would I need to browse down the list? Nobody here has used every language in existence. You hit ctrl-F and cast your vote on your favorite and least favorite.

There will be obvious winners and losers, but I'm interested in the long tail results.

The poll quantifies a community's thoughts as only the vocal minority comment while the majority lurks. It provides a snapshot for comparison with other communities or even to Hacker News 18 months ago.

Language threads will provide more insightful commentary, but a general poll is useful for macro trend discussion.

I think it's very interesting to see some changes in the Hacker News community. For example, CoffeeScript's like/dislike ratio seems to be much lower now that 18 months ago. I bet some articles had an important impact in its popularity. Same would happen with MongoDB for example. It'd be nice to run this kind of poll every month, and try to correlate with specific articles that changed the mindset of the community.
For me at least I liked the concept of CoffeeScript, but had a couple issues with the implementation. I was originally very interested in it, but after experimenting with it for a little while decided not to use it as I felt it didn't really gain anything over using a particular style/subset of javascript itself.
Well, the like/dislike are totally subjective things. I can't tell if I like or dislike most of the languages of the list because I don't use them or, in some cases, I don't use them enough to have a strong opinion.
>Seriously, you won't get anything meaningful out of this, people will vote for the language they like and then bash the usual suspects (PHP, actionscript, C++,...)

Why do you insist that is not meaningful? Of course they will vote for the language they like, that is the purpose of the poll. Obviously people can vote from ignorance, but that goes both ways. Just as some people "dislike" cobol despite a lack of experience with it, so too do people "like" PHP despite a lack of experience with it.

The point is that the opinion of someone who has used a language and platform is of inherently more value when judging said platform than the opinion of someone who is coming from a position of total ignorance. In this sense your statement is a logical fallacy.
Your statement is a non-sequitur. In no sense does that make my statement a logical fallacy.
My statement is absolutely relevant to yours. Also, see my comment above. The technical definition of "like" requires someone to have "found" (/used in this context) the thing that they are "liking". Therefore it is incorrect to say you actually dislike something from a position of 0 exposure to it.

This may seem like petty semantics however it is no worse than preaching to others from a position of ignorance.

Actually not in a case like this.

This is not a pool for finding what is the "Best Language" (best language for what ?), but a pool to find what languages programmers like or dislike.

That is a matter of personal taste and opinion and there is not a wrong or a right answer.

Obviously if you have never seen or used or looked at the language you shouldn't vote on what other people say, but you don't really need to know the ins and out to make a personal decision.

(comment deleted)
I never held that there was a right or wrong answer, however the purpose of a poll is to infer value to the people reading it (otherwise the OP might as well write it on a piece of paper and put it in a drawer).

The definition of "like" the verb is "To find agreeable, enjoyable, satisfactory". The key word in that definition is find. How can someone "like" (in the true meaning of the word) something, or for that matter "dislike" something, if they have never "found" (/used) that something in the first place.

Therefore it is incorrect to say that you personally like or dislike something if you have not had direct exposure to that something. At most it would be correct to say that others in your peer/social group like or dislike something.

I think you mean "like" PHP despite experience with it.
My thought exactly. Actually I was think - "geez, these people are such hipsters". Everyone loves the "cool" languages - Scala, Haskell, etc. But of course the lame languages suck (Java). Though I was pleasantly surprised to see the love for C#. It's a very nice language and you'd think being from MS it wouldn't be "cool".
And who can't love VB for getting shit done (at least back in the day). Though I can see if we are just focusing on the language.
If VB6/VBA weren't coupled to the god awful IDEs and completely unversionable/patchable binary formats of their applications, it would be a pretty decent programming language.

It's persisted - absurdly - in spite of those crippling issues.

The VB6 IDE was Ok for 1998, but 1998 was a long time ago.

I still use VB6/VBA to get shit done, but only because I have a bunch of code & tools I've already written in or for it. I can see how it would be pretty useless to most people.

Registry-free COM has solved all of the versioning issues for me.

Language-wise, I find it's limitations to be its strength - kind of like ouilipo for programming.

My biggest problem with VB was inconsistency. There were multiple flavors floating around with subtle incompatibilities, so you couldn't always reuse code without modifications. Also, it did some weird things with types. Like error messages along the lines of "Type mismatch: expected string, but got string."
What's the concern? Is there any reason why disliking a language for reasons of fashion is bad?

I personally think that I'd maybe prefer not to work with someone who likes (and argues) for languages due to fashion... but I'm also a by-day-and-night Haskell developer, so I imagine that invalidates my opinion in some ways.

Fashion-based-programming leads to endless re-invented wheels and more effort going into running round in circles than looking a bit into history and learning from it. Ruby and Python seem to live in parallel, separate worlds. Oh look, here comes Node.js where everything's written again, this time in JS.

I'm not arguing for monoculture but it's a bit sad to see isolated communities not working together.

Haskell is an example of a language which a good reason to exist: solid unique PL qualities and is also highly applicable to specific problems.

But perhaps the cool languages of today are cool precisely because they offer real advantages. Maybe they're advantageous only in our unique historical moment. That has yet to be seen. If their popularity fades over time, that won't mean they were simply hipster fads. It could just as easily mean they met significant needs at one point in time, but the needs changed, or we developed better tools that met those same needs.
As long as we can agree that Java is cool whatever this poll says ;-)

Based on this poll Java is not cool and most likely doesn't offer real advantages...

Yeah, that one perplexed me. I don't think anyone can deny Java's usefulness. I guess a lot of the hate is from people who find Java useful but still annoying. For my part, I don't think it's bad at all. When I use Java, I miss conveniences like `people.map { |p| [p.name, p.address] }`. But in exchange for typing more characters, Java gives me a huge ecosystem, good docs, effortless cross-platform coding, and pretty much the only hassle-free GUI API.
Why not use Clojure or another JMV language and get the same ecosystem at similar or less characters?

    (map (juxt :name :address) people)
Maturity and longevity, mostly. For really serious projects, I prefer to mitigate my risk by picking something that's been mainstream for a long time and isn't likely to die off. I'm not saying Clojure, Scala, JRuby, etc. are going to die off. Just that it's too early to tell.

Also, it's not exactly the same ecosystem. Yes, you can use all the Java libraries. But the ecosystem also includes the dev environment/build system, the written material, and the peopleware associated with the language. You don't automatically import all of these from Java just because you're using the JVM.

Scala enables you to keep most of the Java ecosystem (API, docs, cross-platform, and swing is even nicer in scala), and you can do `people.map { p => (p.name, p.address) }`, granted that the IDEs have to get a plugin installed before they are as helpful, but both Eclipse and IntelliJ has awesome scala plugins.
I don't see so much hate in the current results for languages that offer few or no real advantages. It seems to me that most of the hate is directed at languages that are often mandated by external forces, whether those be bosses, target platforms or simply lack of alternatives within a niche.
I like Ruby and have been programming heavily in it for the last year.

However I still think Java and C are really good languages. I appreciate the niceties of both strongly-typed compiled languages, along with the 'coolness' factor of the dynamic languages.

That's a dismissive attitude. I think the love shown to C# is example enough that there may be more to the results than hipster-ism. C# is great, and the vast majority of Java programmers are aware of that. I mean, holy shit - no lambadas? Lack of reified types? The Java ecosystem is amazing (build tools, libraries, the JVM, IDE's), but the language itself is depressingly stagnant and unpleasant to work with in comparison to similarly-placed languages.
Agreed. Unfortunately its posts like these that have become the norm here.
The like:dislike ratio is a metric with some information, as well as the absolute numbers of votes (for mindshare).
For me it's a perfect answer to the question "Why there are so many programming languages ? ".
I can only speak for myself, but I marked languages I liked that I've used enough to say like/dislike. The only one I disliked was ruby, which is something I've done enough in to know one way or the other. Overall I ended up with a bunch of likes and only one dislike.
oh I would just be as happy to label anything case sensitive as something I don't like. Easy as that.
Since like|dislike is orthogonal to bad|good (how do you really define any one of the four anyway?) this poll can capture a decent sampling of current opinions about languages, from a fairly relevant subset of <the world>, and present at least a little more info than just dry feature comparisons. My two cents.
I voted "COBOL - dislike" because I actually work with it (although it was missspellt "Cobol").
You are absolutely correct. That being said, I "disliked" COBOL as I used to be a mainframe programmer. It's a foul, foul language, but ironically, owes much of its success to that (long story).
I don't discriminate. All languages are equal in my eyes, each with their own quirks and adventures.

Except PHP, PHP can fuck off.

Last week i had to create an Android App generator that takes a json manifest and generate Java Models,ContentProviders,activities,resources,unit tests for each Sqlite table in my app = 4/5 hours of work in PHP. days of work saved each time i need to bootstrap an app.

This week I needed a command line script that optimizes image files for different form factors = 30 minutes of work in PHP

I needed the first script to be available to my peers so they can generate basic android crud apps through a web app = 1 hours of work/deployement on an apache server and no need to ask the sys admin for another server.

My point is you can hate PHP all you want it is a great tool that has its place in enterprise envirronement.

If that is your point, than you really failed to support it. Obviously you can do stuff in PHP. You could have done all that stuff in any scripting language. The closest thing to a benefit you listed was "we already had PHP installed on a server". If that is your best sales pitch, you should stop trying to sell it and let others take on that role.
My point was speed of development deployement,but you're not smart enough to get it whatever language you use.
Why not JS?
Because i dont need async programming to generate files or optimize images.And nodeJS RDBMS libraries are a joke.
No, your point was:

>My point is you can hate PHP all you want it is a great tool that has its place in enterprise envirronement.

Go back and read your post. Now if you want to deflect the criticism that you did not support your point by pretending you had a different point, you are again failing in the same way. Every scripting language has equal or better "speed of development deployement" compared to PHP. Saying "PHP might be a giant pile of crap, but at least you can write stuff in it" only works if you can't write stuff in other languages. But obviously you can. If you want to claim PHP has a role, then state that role clearly, and support the claim with evidence. You need to show that PHP is in some way better than the alternatives.

Every time someone bases their opinion of PHP on a DSL from an open source project or from inherent language 'design flaws' that affect a few edge cases, you improve the PHP gene pool by exactly one.

Thanks! :)

Should have included F#.
Disliked Scheme by accident :( SICP really changed the way I think and write code. It also taught me the basics of compilers and interpreters.
What? No love for F#? Why do folks always leave F# out of these things?
I liked F#. Even build a web request handler using it :)

However I kind of don't trust Microsoft to keep supporting this side project... Remember FoxPro?

Right now one of my side projects involves F# on Mono.

I write in Visual Studio, which I own, I deploy to Mono, which is free, and I have access to all the MS libraries over in linux, which are also free.

What's there to support? Do I really need version 7.0 of F# with the neuro-cranial implants? Or do I need just to write solutions for people?

F# is a great transition language from OOP/Imperative-land. You can write code the old way, the new way, purely functional, or in a hybrid fashion. I don't think we require much MS support for it to continue to fulfill that role.

Now if you're deploying to windows, that could be another kettle of fish. But I don't do that anymore.

Thankfully the compiler is open source and there's a thriving community outside of Microsoft (see http://fsharp.org), so this shouldn't be a big worry. And Microsoft hasn't shown a lack of commitment thus far (in fact, with the Visual Studio 2013 release F# gets new features but C# doesn't, as I recall).
As an F# MVP, I can tell you MS is committed to the primary functional language on the .NET stack, but more importantly MS has open-sourced F# https://github.com/fsharp/fsharp. The membership of the FSharp Software Foundation http://fsharp.org/ is very active and growing under the informal leadership of Don Syme. F# works today across Linux, iOS, and Android with a community of OSS programmers improving x-platform interop almost on a daily basis.
Don't use F# but up voted it nonetheless, for TypeProviders alone (waiting for it in Scala...for @2 years now)
This poll should be more specific with Visual Basic. There are a few different languages that share the name VB.

VBA

VB.NET

VB6

VBScript

I can also break out Lisp into Arc, SBCL, Emacs, Chicken, Racket but I have to draw the line somewhere.

Also historically VBasic has not garnered many responses thus the catch all.

Some VB variants like VBA, VBScript, and VB6, are indeed similar enough to be grouped into a single item, I'll grant you that. VB.NET, however, is not. It's basically C# in VB's clothing. It kept the VB name and some of its syntax to bring VB6 developers into the world of .NET.

So, IMHO, grouping VB.NET with VB6 would be like grouping C, C++, and C# together just because they have a C in their names.

VBA and VBScript (iirc) have only On Error Resume Next, while VB6 has On Error Goto. This is a tremendous difference in how you structure your program's error handling.
VBA in MS Access has On Error Goto.
Oh, I might be getting VBA confused with VBScript then. I know VBScript only allows you to crash or just continue on an error, whereas full VB6 lets you On Error Goto Errorhandler and you can provide an Errorhandler label for your error code.
There is a Scheme option for Racket/Chicken
And honestly, VB6 and VB.Net both get a bad rap. VB6 excelled at what it was designed to do, it was an easy-to-use language that was the fastest way to get a GUI up onto the screen and throw together a simple program. I learned on VB4 and it was great. It was the whole COM thing and the serious enterprise perversions of it that ruined the language.

VBA and VBScript, on the other hand, are abominations - the lack of an exception system is excruciating.

VB.Net is basically a few #Defines away from C# and has most of the nice functional features of C# they added in .NET 4.0. It's easy to read and powerful. Plus, the "Handles" keyword makes coding event-driven OOP objects quite pleasant.

My only problems with VB are the non-short-circuiting Boolean operators (so you have to write AndAlso and OrElse for short-circuit instead of And and Or), the bizarre +1 array sizing (but you should be using lists instead of arrays anyways so it doesn't matter) and the anachronistic Dim keyword. Even the option-strict thing makes sense because there are some cases where static typing is excruciating if you're just hacking something out - "oh crap, I have to use this terrible .net 1.1 library that predates generics, either I have to write a zillion typecasts or I can just go with dynamic typing".

Yes, there are some backwards compatibility artifacts in the language. I like how verbose it is, little room for ambiguity when sharing code with lesser-experienced programmers. C# is efficient, but a bit cryptic for people not well-versed on c-style languages. Also, curly braces.
I think curly braces are perfectly clear, to me the big problem with C-derived languages is the use of cryptic Boolean operators. The SQL-style "And", "Or" and "Not" Boolean operators are far more legible than "||", "&&" and the easy-to-miss "!".
Given that the VB.NET side of Roslyn is written in VB.NET, I can probably say I've hacked on the largest modern VB codebase in existence.

As someone who has had never looked at any form of VB before this: meh. It's basically C# with a... unique syntax.

There are a few things that VB does better though: type inference for lambda expressions and exception filters.

Like or Dislike... for which use case? For instance, I don't plan on ever writing web applications in Lua, but I consider it a very good choice for game scripting. Does it mean I like it? Or dislike it?
Would be better to have some sort of commented vote, in other words: vote and explain why.

For me - I dislike interpreted languages no matter how cute their syntax looks like. They usually offer quickest idea-to-deployment times for the price of shittiest overall performance.

Wish I made this as a prediction, at the start - most liked are JavaScript, Ruby, Python and C.
Python, C, and js while PHP and Java are getting lashed. Pretty much what you'd expect.

Still, one of the better polls.

These days a small language called Pure has my attention (purelang.bitbucket.org) - it has many of the features of Haskell I like, but is a dynamically typed language that makes use of an interesting functional paradigm (term rewriting calculus!), and is much easier to use than Haskell. It also has a great shell and C/C++ interface (and Emacs and Texmacs integration).

And I always like seeing these kinds of polls because people's 'favourites' depend alot on what they do with the language - Java and C++ are great for writing large apps, systems, etc..., while dynamic languages have much different use cases.

Julia! Poor thing is left off ...
"There are the two kinds of languages only, the kind that people complain about and the kind that nobody uses." -- someone on the internet that I am too lazy to google. A.K.A Bjarne Stroustrup

I truly don't see the value of this, every language brings something to the table.

I just upvoted "php - Like" and "php - Dislike", because I both love and hate working with php.

I guess I'm not alone...

"Raise your hand if you hate PHP" many hands go up

"Keep your hand up if you've actually built a project using PHP" most hands go down

But my coool poooints!! I need to show the guys I hate PHP so they won't think I'm a newb!!

Not in my experience though. The people who do like PHP are the ones who started with it and didn't use it too much yet. In my exp. a lot of ruby/python/node.js devs are former PHP developers who built several websites using PHP and switched because they got pissed about PHP (or stuff that is related to PHP).

More interestingly imho is the percentage of people who hate PHP but still use it most of their time, since they can't find projects with other languages. I bet that's a lot of people...

I like Symfony2, I hate PHP. PHP has changed a lot in the last couple of years. The quality of libraries and ease of installation skyrocketed. We learned to avoid certain PHP features or built workarounds on top of them. Therefore I still hate the PHP for that. "extract" function anyone?
I like PHP. I've coded in it (and other languages) for more than 10 years. I love the ease of use and the flexibility it offers.

I must however add that, like a sibling comment, I think modern frameworks like Symfony 2 is the way forward for the language in a modern web stack.

I agree with you. Working with Symfony2 has dramatically changed how I work with PHP for the better. I know one of the major complaints people have with PHP is that developers often write poor code but it really doesn't have to be that way.
many, most - weasel words
smart words. making sweeping claims about nearly anything is real dumb.
I used PHP when it was PHP/FI, that's "personal home page form interpreter" for you young 'uns. No-one calls me a n00b.
There might be some truth to your comment, however, the way that you wrote it makes it look like this:

"Most people who disagree with me do so because they're immature, not because they have an informed opinion, so I'll just make fun of them."

And that doesn't reflect well on you.

Oh, I'm doing worse. I'm actually maintaining a project using 1999-era PHP.
My deapest, deapest sympathies. Up until a few years back I was doing the same. It was the most unproductive years of my life.
I'm also in this boat.

Luckily it's just a small backend part of an application that got brought along. That said, I've spent an inordinate amount of time with it given its size.

PHP haters are hysterical, I mean that in the clinical sense. It is powerful, flexible, blazing fast (relative, I know), and arguably the easiest (or at least most accessible) language to learn. Its flexibility is what generates most of the hate. It gives you the freedom to create some really bad/stupid code, which noobs inevitably do. But hating it because it will let you hurt yourself is like hating a table saw because it can cut your arm off.
The obvious counter point is that most people who hate PHP quite like C. But C more closely fits your description of "freedom to create some really bad/stupid code" than PHP does. People hate it because it makes it more difficult to do things well, not because it makes it easy to do things poorly.
I'm not really sure it's fair to say that people hate PHP because of its flexibility. Many other languages are very "flexible", and much more so than PHP for some things (you're less likely to do dumb threading or malloc mistakes in PHP, for example).

I think it's because PHP has a much larger surface area of questionable decisions to attack. When your core language is very, very small (e.g. Scheme), you have less to criticize, but when PHP has everything and the kitchen sink, plus a lack of an overarching philosophy or standard, plus a broken core developers community, it simply generates many more hatable things.

A table saw doesn't try to disguise its blade as the stop button...

My favorite bug to date? Uninitialized variables being interpreted as strings. That's the one I get to debug for clients on a regular basis. "Why can't I make this DB connection?" "Because you forgot to initialize the variable containing the database name."

I actually hate it because it's not flexible enough. I did a few years of PHP dev and maintenance after learning and using Perl first. There's enough superficial similarities that it really makes the warts stand out. Every time I wanted to simply use a map, grep, anonymous function, or multiple items returned from a function, I was reminded of how much better it could have been if a bit more forethought was put into it.
I don't hate it, I just find it hilarious to have stuff like == and === ; the old 'mysql_real_escape' (I think now fixed) and other stuff like that.

I wouldn't want to engage in a big project in a language as unstable as that.

>Anyone who disagrees with me is just ignorant!

Do you have any evidence to support that notion? I find it quite the opposite. People who spent a decade being forced to use PHP know the language well, and dislike it. People who have never bothered to learn and just keep making the same mistakes over and over again defend PHP fervently, despite being almost entirely ignorant of the problems with the language.

>I'll invent a position from whole cloth then present it as a quote the parent comment to turn him into a straw man, then I'll have a debate with that straw man. Then I'll kick a puppy!

Why would you do that?

If you read my comment you'll note that I said "many hands go up" "most hands go down." I'm not saying everyone who dislikes PHP hasn't used it, merely that there's a large number of people here who dogpile on it for no reason other than "it's popular to do so" or "I'm half way thru _why's Poignant Guide so I'm pretty sure that qualifies me to comment on every programming language and why it isn't as good as ruby."

Please note that: a) I use PHP but I'm not a slob, I critique bad PHP freely[0] and b) people are coming out of the woodwork saying 'yeah I don't use PHP but I downvoted it'[1] so I think it's fair to say my original assertion (many people are "disliking" PHP from an uninformed position, merely because it's popular) stands.

[0] https://news.ycombinator.com/item?id=6510051 < note how this thread goes from (in my opinion) a salient, relevant discussion of the codebase and how to improve it to "durr php suxx" circle jerk in approximately 2 comments.

[1] https://news.ycombinator.com/item?id=6528073 "I voted dislike to PHP despite not having used it."

EDIT: trigger warning- more sarcasm | Here are some more thoughtful, informed, salient comments about PHP that really add to the discussion and aren't just "lol php suxx amirite??":

https://news.ycombinator.com/item?id=6527334

https://news.ycombinator.com/item?id=6528288

https://news.ycombinator.com/item?id=6527280

1) his comment was a reasonable paraphrase.

2) if you'd said "many" instead of "most" your later points would hold better. What basis, aside from hopefulness, do you have for assuming that most people who have a bias against php haven't used it? After HTML, CSS, and JavaScript it is the most ubiquitous language for the web: ergo, most web people have probably had exposure to it.

My bias: I hate php. I've deployed a few dozen sites that use it over the years.

You didn't address my comment at all. You are making the baseless claim that most criticism of PHP is out of ignorance. I am countering your baseless claim with a baseless claim of my own: that most defense of PHP is out of ignorance, and most criticism is out of knowledge. Linking to you whining about people disliking PHP does not support your claim.
(comment deleted)
dewd, did you read anything? "most criticism of PHP is out of ignorance" nope, I suggested that many of the people who "hate php" on this site (i.e. where this poll is taking place) haven't used it. If you want to claim it's not popular to bash PHP on this site, talk to me when your head is back in the sunshine.

"Linking to you whining about people disliking PHP does not support your claim." What are you even talking about? I don't link to any of my own whining. I linked to 1) me, CRITIQUING some poorly written PHP to show that I'm not just some clueless PHP fanboy 2) someone in this very thread explicitly confirming my suspicion- they are downvoting PHP w/o ever having used it even one time, but because, quote, "I read an article" and 3) several examples of vapid, worthless comments bashing PHP for no reason other than to say "PHP sux high five!!" These are evidence of the trend towards mindless PHP hate on HN that you seem... not to recognize.

If you want to criticize PHP, by all means, criticize it! Talk about a feature you don't like or a bad experience you had, but "fuck php amirite??" circle jerk is pointless & stems from the cool-bros-hate-php culture, not from an informed position. If you're informed about why php sucks, share your information! If you have nothing to share, why clutter up the thread everyone will "phpsuxlol" bullshit?

"I am countering your baseless claim with a baseless claim of my own" ok....

>"most criticism of PHP is out of ignorance" nope, I suggested that many of the people who "hate php"

Yes, you said most. Go read your post again, or your response where you quoted yourself.

>but "fuck php amirite??" circle jerk is pointless & stems from the cool-bros-hate-php culture, not from an informed position

It is also nonexistent, so not much of a concern to anyone but you.

>If you have nothing to share, why clutter up the thread everyone will "phpsuxlol" bullshit?

Where did I do that again? You seem to be forgetting that you started this discussion, by preemptively calling out nonexistent "PHP haters" as ignorant.

Actually, my dislike of PHP is entirely based on using it. If I hadn't had to "build projects" in it, I wouldn't care one way or the other.
Pff this is total bs. Most people who dislike PHP actually started doing webdev using php.
7 years of PHP projects: old, messy, legacy and new and fresh. I loathe PHP and never want to use it ever again.

Most I've talked to in person (yes, plural of anecdote is not data, etc) hate PHP because they've had a wonderful first-hand experience with it. This is in Sydney (Australia), where Ruby and Node is a relatively recent phenomenon compared to SF and the like.

Your post could do without the shitty attempt at sarcasm, but you've likely figured that out already.

I voted dislike to PHP despite not having used it. I read an article listing a fairly significant number of fairly fundamentally broken thing and gotchas many of which fail silently and keep running corrupting data and I decided that I didn't want to go near it.

I don't want to use it and even go to the extent of avoiding open source software that does. It isn't about cool points but purely about whether I want to use the language.

I like types and type checking and halting with exceptions on errors. Do I think that makes me cool; no, but it does make me dislike PHP and use Postgres rather than MySQL (even before my Oracle aversion became relevant).

Edit: This was the article: http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-de...

ABAP is missing.
I like C# more than Java because:

- The .NET Framework is a straightforward way to solve a problem vs pattern oriented solutions. This is not about the programming language itself but how the people in that community think about a problem

- C# evolved more than Java and it was more pragmatic. There are no operators in Java.

- I really like the diversity and maturity of third party Java libs. That's why I use IKVM when I need to use a lib from Java in .NET and why I use Jython. Examples here: http://blog.databigbang.com/tag/ikvm/ and here: http://blog.databigbang.com/tag/jython

I don't like Javascript, I would like to replace it with a standard VM to run other programming languages like Python.

I like C++ for performance oriented applications and when good libraries are available. For example I like CryptoPP.

I like Objective-C and their additions like Grand Central Dispatch. I like XCode.

I love Python: it's straightforward to build stuff.

I don't like PHP but many times I prefer to build some web scripts using PHP.

I like Pascal for teaching algorithms. More than C, because is less ambiguous.

I don't like C anymore except for firmware.

Collections in Java are awful. Guava helps a bit, but it's still poor man's substitute. No LINQ, no lambdas (and the upcoming Java streams API is ugly as well), no delegates, no events. Verbosity. C# is a very nice language, only WPF sucks big time.
I forgot LINQ! I think nobody is using WPF for new project? I like that UI application feels native in C#/Windows.
Just started using WPF for a home project here. :-)
Used WPF a couple of times, not that bad at all? What exactly do you think can be improved? Are there alternatives to it?
For me, WPF isn't the problem. I love MVVM, data binding, etc.

The problem is XAML. More like FML, amirite?

myeah it's a bit messy sometimes. But I yet have to encounter an UI design system that isn't? (ok, didn't try that many, and for example Labview is pretty nice since it gives you a working GUI with tons of features in no time, but for backend it's a disaster)
Basic binding works wonderfully, and the MVVM pattern is a good idea, but it just doesn't seem to work that well in practice. Some basic things seem overly difficult to do. I feel like there's a WPF way of doing things, but there is no reference for what that is.

For example: I had a DataGrid, and I was trying to figure out how to respond to the KeyUp event on a specific row, but only when it was the Delete key. I ended up having to create a custom dependency property in order to do that. 80 lines of code and a new class with 7 members later, I was able to reference that in my view and connect it to a method in my viewmodel. It works, but my lord it took me hours of googling and trying different things out for what seems like should be very simple functionality.

XAML is the awful part of WPF. The reasoning behind it is understandable, but this whole "declarative ui" thing brings with itself a whole bunch of abstractions, like resource dictionaries, styles etc, that you wouldn't need if you do your ui in code. And sometimes code-only wpf is the only way to get good performance from it.
Still much, much better than HTML. Or, how I love WPF containers... Have to deal with the ugly div-row-span hack that is BootStrap at the moment.
Here are two things:

* It can be really clumsy to get programmatic hold of anonymous controls like buttons inside of list items

* Styling is clumsy

See http://stackoverflow.com/a/4120034/168719 - that's the highest rated answer for the question "What is the simplest way to bind a group of 3 radiobuttons to a property of type int for values 1, 2, or 3?" Do I really need to say more :) Or http://blog.wouldbetheologian.com/2009/07/why-wpf-databindin... or http://paulstovell.com/blog/six-years-of-wpf - he also raises an important point: WPF never made any significant progress. I'm under impression that I've once seen a better article that sums it all up (consistently with my own experience), but I can't find it now, so these will have to do
It's quite good. Very well suited for the job of creating enterprise apps, also good for other desktop apps. Let's you build a typical grids-and-fields GUI much quicker and with much less pain than "modern" HTML-JS-MVC hackiness.
What's a "pattern-oriented solution"? As opposed to what?
Many libs in Java require to think about patterns instead of giving you a straightforward way to accomplish your goals.
Do you have more concrete examples of "pattern oriented solutions" that exist in Java and not in C#? Are you trying to say that C# is so expressive that it doesn't need, for instance, factories?
I was clear enough in my opinion. I don't think it's an issue related to the programming language but how the community works. As ern said there are people in the .NET following this approach with stuff like the entity framework.

For further information you can read: http://c2.com/cgi/wiki?PatternAbuse

Meh, I will guess that is the usual suspects: like XML libraries, anything JEE, ORM, ... Those are the things for which Java provide an API (sometimes a default implementation) and you chose your implementation between competing ones.

The result is a mess of factories of generator of creator. Also, over the years best practice have evolved, meaning you get a variety of such mechanism in the JDK itself. With a single vendor, DotNet avoid a lot of that shit.

Then there is a huge variety of OSS libraries that integrate with each other. So you get another layer of pattern on top of the JDK. OSS libraries are extremely popular in java, much more than in the DotNet world, so that contribute to the sentiment.

Another usual suspect is a fashionable "Spring hate" or "Hibernate hate", ... Dependency injection, ORM and other patterns became mainstream on java and are very often used.

Even less hated "pattern" like mocking and unit testing started there too. A lot of projects still use older style less modern implementation of those.

EDIT: Also a lot of libraries are mature and implement the entirety of the specification they provide support for. Since java is mainly used for enterprise application, the most google-able libraries to solve problem X is generally the enterprisy one. For example if you search how to serialise to and from XML, you end up with Jaxb as the preferred solutions. You will not hear as much about XStream which is a more limited but much more straightforward approach.

The .NET Framework is a straightforward way to solve a problem vs pattern oriented solutions. This is not about the programming language itself but how the people in that community think about a problem

There are plenty of people who overengineer their .NET solutions. They wouldn't dream of starting a project without including the Unity Application Block, for example. It may be a symptom of Enterprise Syndrome rather than a specific language community.

C#'s namespaces also make more sense to me than Java's packages.
Java packages is one of a few things that I like in Java more than in C#.
im curious what people dislike about groovy. I haven't tried it much but it seemed like a decent language and good alternative to java. I wasn't thrilled with the availability of frameworks for it, but that was about the only complaint I really had.
I don't dislike groovy - I remember studying the compiler 8 years ago (I was helping work on the boo compiler at the time).

But every programming language I've ever seen has flaws - that are both objective and subjective. If I were a Ruby developer wanting to create something on the JVM, I might think that groovy is inferior to JRuby, for example. If I were a straight up Java developer, I might think that groovy is slow or inconsistent or too unsafe (how some people perceive ruby's monkey patching). I'm not saying any of those perceptions are correct, but it is very easy to imagine all kinds of reasons and perspectives for disliking every single language up there. Heck, for about a third of them, it's harder for me to imagine reasons that people DO like them. But I know that's just my opinion, man, and who I am to stop people from using drugs, jumping off cliffs, or using Perl.

I'm also surprised at the dislike for Groovy. When I looked at it, it seemed to be roughly on par with Python or Ruby, with some nice features unique to Groovy.

Of course, there's the limitation that it only runs on the JVM. Maybe it suffers from the following thought process: many people who want a rapid development language and would be interested in Python or Ruby aren't interested in running on the JVM, and people who are already in the Java ecosystem are too biased in favor of static typing to give Groovy its fair shake?

perhaps. I was interested in it because the jvm is appealing to me (performance and the sheer volume of available, tested libraries), but I dont want to write java boilerplate and groovy seems to have some cool dynamic language features.