Poll: What are your liked and disliked programming languages?
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 ] threadWhat do you like about it? Can you point me to some examples of good code?
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....
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.
https://news.ycombinator.com/item?id=5536734
:)
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.'
I don't really dislike it but I really do not see myself using it if I had a task where I needed JavaScript.
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.
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.
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".
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/
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.
A compiler is a program which translates between two programming languages. CoffeeScript -> JavaScript is just compilation. There is no need for a new word.
In my experience working with CoffeeScript, I've always found well-written code easy to read with no ambiguities.
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.
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.
[1] - http://www.youtube.com/watch?v=zM-gUM9C5SA&feature=player_de...
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."
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.
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.
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.
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.
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.
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).
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.
Everybody talks and nobody listens. It's just pointless popularity contest.
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!
Which only a complete moron would do.
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.
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.
2/ Because most people (myself included) don't know actionscript but think Actionscript == Flash and downvote based on that.
Not now: AS has an 84% dislike rate to JS' 39%.
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.
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.
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.
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.
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.
This may seem like petty semantics however it is no worse than preaching to others from a position of ignorance.
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.
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.
It's persisted - absurdly - in spite of those crippling issues.
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.
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.
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.
Based on this poll Java is not cool and most likely doesn't offer real advantages...
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.
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.
Except PHP, PHP can fuck off.
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.
>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.
Thanks! :)
However I kind of don't trust Microsoft to keep supporting this side project... Remember FoxPro?
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.
VBA
VB.NET
VB6
VBScript
Also historically VBasic has not garnered many responses thus the catch all.
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, 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".
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.
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.
Still, one of the better polls.
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.
I truly don't see the value of this, every language brings something to the table.
I guess I'm not alone...
"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!!
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 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.
"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.
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.
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.
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 wouldn't want to engage in a big project in a language as unstable as that.
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.
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
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.
"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....
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.
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 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...
- 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.
The problem is XAML. More like FML, amirite?
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.
* It can be really clumsy to get programmatic hold of anonymous controls like buttons inside of list items
* Styling is clumsy
For further information you can read: http://c2.com/cgi/wiki?PatternAbuse
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.
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.
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.
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?