Your Ignorance Does Not Make a Programming Language Suck

(It might look like I’m picking on a couple strangers here, because they were the main inspiration for this post. I hold no grudge against them, heck, I don’t even know them. Don’t think that a few words or a few opinions encapsulates a person’s whole personality or intelligence.)

I’m trying to push for more Python adoption at the company I work at. This led me to casually google for “Python sucks” in order to anticipate any criticisms from coworkers. I found the usual suspects (mostly myths about Python’s indentation). But a couple blog posts did stand out.

The first guy wrote a post stating that Python sucks compared to Perl, because Perl has perldoc. The obvious was stated, but if you read the comments (I wouldn’t) what follows are some more lame arguments and their rebuttals. The second post was simply titled Python sucks! by Mike Warot. Warot wanted a function that is impossible in Python because strings are an immutable type. I posted a comment showing a simple solution. (His next post was entitled Python rocks!, which gave me a I-did-something-good boy scout grin.)

Of course, however serious or not these posts are meant to be taken, it’s a disturbing sentiment that I see over and over. Python’s indentation sucks. Perl is unreadable. Java is for blub programmers. Batch file writing is the assembly programming of scripting. PHP is a horrific kludge that ignored all programming language design principles but we’re stuck with it because of the masses that use it and should never be taught. (Okay, so PHP does suck.)

This is not a “the best language is the one the programmer can best use” post. And while some languages may not suck, they might suck more than they should. Here are the ways a language can suck:

  • The language’s syntax sucks. It’s hard to read, hard to maintain, or too easy to make simple syntax errors that won’t be caught at compile-time.
  • The language’s documentation sucks. There is no wiki. The tutorials on the web are scattered or poorly written. There’s a lot of beginner tutorials, but not much for advanced programmers. There aren’t enough books with animals or young, hip, attractive people I may want to sleep with on the cover about this language.
  • The language’s libraries suck. It’s version of CPAN isn’t as good as Perl’s CPAN.
  • The language’s tools suck. There are no good AND free IDEs. There aren’t any good frameworks. There are too many frameworks. Screw it, I’ll just use vi or notepad.
  • The language’s learning curve sucks. It takes a long time to learn and the documentation sucks already, so it will never see popular adoption and will continue to suck.
  • The language’s community sucks. It doesn’t have enough people. It has too many noobs. It has too many elitists. Yes, I already did RTFM…

These are all valid ways of judging a programming language, more or less. Now let’s look at the invalid but more frequent ways to judge a programming language:

  • The language’s feature set doesn’t include X, therefore it sucks. X is usually closures or static typing.
  • The language’s feature set includes X, therefore it sucks. X is usually garbage collection or static typing.
  • The language’s fitness for particular task X sucks, therefore it sucks.
  • The language does not do X like this other language does X, therefore it sucks.
  • The language’s “Hello world!” program is more than one line long, therefore it sucks.
  • I have been programming in this language for X days and I think it sucks, therefore it sucks.

This debate is tricky. It is not simply a matter of taste, or some Seussian buttered-toast opinion. There are many programming languages that do suck, or maybe they at least suck compared to modern languages. On the other hand, it is too easy to use the wrong metric to judge the language by. A programming language’s quality is not a one-dimensional quantity. And on the mutant third hand, the only way to really be able to judge a programming language is to learn its syntax, learn its idioms, learn its libraries, and use it in a couple small projects. Unfortunately its far shorter and easier to sum up the worth of a programming language in two words instead. That sucks.

The solution is plain old critical thinking. We not only have to have opinions, but know why we have them, and know why our reasons are valid. Reading software blogs may put you in the top 20% of programmers, but it doesn’t replace substantial experience. (Nor does, as I point out to myself, writing software blogs.)

“There are only two kinds of languages: the ones people complain about and the ones nobody uses.”
-Bjarne Stroustrup

“A witty saying proves nothing.”

P.S. Have you ever noticed how saying a word over and over again makes it stop sounding like a word?

(Update in response to comments here and on Reddit) Woo! #1 on today’s! I haz 15-minutes interwebs fame! I will say a kind word about PHP (though it is a short word). PHP is simple to set up for web apps and easy to learn. Nearly all web hosts support it and there are many easy to install applications (like, for example, WordPress). But it has a lot of quirks and inconsistencies (too long to go into here) that it doesn’t need to have. These weren’t design trade-offs, they were just the result of poor planning. Hence the need for programming language theory.

66 Responses to “Your Ignorance Does Not Make a Programming Language Suck”

  1. goodstuff Says:

    Nail on the head there! I don’t use it, it must suck. All one needs to know, really!


    I think ignorance is only part of the problem.

  2. Himself Says:
  3. Bill Mill Says:

    The 6-line function you suggested to the “Python Sucks” guy can be replaced with:

    a,c = s[:1], s[1:]

  4. Tomasz Wegrzanowski Says:

    Well, if something doesn’t include closures then it sucks unless it’s a really weird special purpose language. It’s kinda like not including arithmetics, or not including strings (hello Erlang), or not including some sort of functions/procedures. They’re useful in so many contexts their lack indicates objective suckiness.

  5. Michael Day Says:

    OK. I’ll tell you why Python sucks. Memory management.

    Now you tell me how it’s memory manager is wonderful.

  6. troels Says:

    Closures are hard to reconcile with a stateless runtime. Such as a web application.

    I like closures, but perhaps there are contexts in which class based objects are a better fit.

  7. Programmers suck Says:

    Python may suck, but always remember that Java Programmers are the erotic furries of geekdom.

  8. Bill Mill Says:

    @troels: why do you say that? Go check out seaside and Arc and see the amazing things they do with closures in web applications.

  9. Ovidiu Curcan Says:

    “vi or notepad”? Come on, you know better than putting them in the same category.

  10. Jpfed Says:

    The inclusion of a “feature” can indeed make a language worse.

    MUMPS includes labels and gotos. Okay, so do many languages. But it also supports a “goto label+OFFSET” command, that jumps to the line that is OFFSET lines down from the label. That’s really only okay for assembly languages.

    Once someone has a statement that jumps to one of your tags (plus a hardcoded offset), then you are pretty much paralyzed. Editing that tag is now much more difficult without breaking something. It also makes it unworkable to have the interpreter perform certain optimizations.

  11. wat Says:

    “vi or notepad”?


  12. Frank Says:

    Life Imitates Blog: What I think is funny is that several of the comments for this post, rather than talking about the patterns you’ve observed, are practically quoting exactly the type of comment that you are writing about.

  13. naasking Says:

    Closures are hard to reconcile with a stateless runtime. Such as a web application.

    I like closures, but perhaps there are contexts in which class based objects are a better fit.

    I’m sorry, but this comment is profoundly ignorant. Classes and closures are isomorphic, ie. they are fundamentally the same thing.

  14. Graham Says:

    Troels, Billl, I think you’re both confusing closures with continuations. Closures are related to lexical scoping of expressions; continuations are a control construct. Closures and objects are somewhat related in nature, and each has been called a “poor man’s version” of the other.

  15. matthias Says:

    I’m absolutly with Tomasz Wegrzanowski and Bill Mill. There are some absolutly basic features a language should provide like adding numbers. And closures definitely are such a basic feature you want in any general purpose language, or it sucks.

  16. Owen Byrne Says:

    Are you suggesting that the people on the covers of those “Head First” books aren’t the authors? That’s incredibly disillusioning.

  17. Tim H. Says:

    Agreed on the post. There are no Absolute Truths in programming languages.

    One of my favorites are the paradigm arguments. “Ruby sucks because it’s functional parts aren’t as complete as X”. “Python sucks because it’s OO was an afterthought bolted on”.

    As proof, an example is given, like a Ruby program where everything is a block attempting to mock up a lisp like program. And the reader is supposed to feign surprise when the example is ugly.

    Try programming in that language without heavy use of that feature. You know, the way it was meant to be programmed in. You’ll probably like it.

  18. l0b0 Says:

    To paraphrase Mutt’s “motto”: “All languages suck. Mine just sucks less.”

    Seriously though, I guess all languages suck if you use them for the wrong problem, because you can’t add, remove or make optional features such as strong typing without making a mess out of some problem domain. In this case, you’ll typically want weak typing for rapid prototyping (but it can lead to subtle bugs), strong typing for banking applications (which leads to more complex code files), and optional typing for portability (which can lead to inconsistencies or the same problems as with the other approaches). There’s just no “best” way.

  19. Matthew C. Tedder Says:

    14+ years in software have taught me one thing clearly–the best language is the one that gets the application done fastest and is maintainable. Learning curve comes into play. For me, Python has too much of a learning curve. This is due to the appearant absense of any decent tutorials and its very non-standard use of terms and symbols. I cannot judge any more, as I haven’t had the time or patience to get there.

    PHP, on the other hand, I just walked into with no learning curve. Then, I began writing applications of substantial size with very little debugging time required. Debugging other people’s code also seems easier than any other language I’ve used. Unlike .Net, the power is built into a very well thought out language design, as opposed to a monsterously sized library filled with different concepts. Each PHP function can be understood just by reading its help page.

    In business software, performance normally takes a backseat to timeliness and robustness. Performance and scale should be designed in by means of scaling out (multiple servers).

  20. TheHinokiMan Says:

    FWIW, I dismissed Python for far too long. I’d looked at it a few years back, and decided that indentation-based code blocks seemed too cheesy to warrant a closer look. How wrong I was. I was very much into Perl in the ’90s, and many of my needs span Win/Lin/Mac. Python really gets the job done with a minimal amount of fuss. I’m no fanboy, BTW; I just care about what works and what doesn’t. I make my living as a .Net developer (duck!) and I use Macs in my personal life. Python is the universal glue that’s replaced Perl for me.

  21. Thomas David Baker Says:
  22. Tonio Loewald Says:

    If Python had curly braces instead of indentation I would like it more. Every major annoyance I’ve had debugging Python seems to involve indentation, and if some obvious feature of a language has that impact, it’s a problem.

    The whole “language x doesn’t have y and therefore sucks” attitude is pretty annoying in general.

    PHP may have the worst polluted global namespace of any widely used language ever, but it causes me fewer practical problems than Python’s indentation. And PHP programmers won’t bite off your head for pointing it out.

  23. Jesse the Space Cowboy Says:

    Rebuttles should be rebuttals
    Making this change will vastly increase
    the perceived intelligence of this
    otherwise well-thought-out article!

  24. tim Says:

    I’m surprised you say “The language’s tools suck” is valid, but “The language’s feature set doesn’t include X, therefore it sucks. X is usually closures or static typing” is not. That sounds exactly backwards to me.

    The entire purpose of a programming language is to allow the programmer to build abstractions. Closures are one of the most basic ways to do that, and one which other languages have had for decades.

    If you have powerful abstraction-building features (like, say, closures), then it doesn’t matter what tools it has right now: you can easily build the tools you need.

    I’d rather write all my tools myself, than be unable to write a single tool without greenspunning myself.

  25. Joe H Says:

    The “X sucks” attitude mostly comes down to fear. I have chosen to work mainly in language X. Suddenly I read about how cool language Y is. I read blogs saying X programmers are noobs, and the real smart guys do Y. I do some tutorials. I like some things about it. I try to build an application. It’s hard. I’m afraid maybe I’m not as good as the guys using Y. As I try to find solutions, I run into a different set of blogs, ones talking about how Y sucks. I’m relieved. It’s not just me.

    At this point, you can react two different ways: acknowledge that you’re not a supergenius who can master any language in a week, or jump on the “Y sucks!” bandwagon and go back to X.

  26. wahhh Says:

    Who cares what other people think? Quit your cryin’

  27. Chad Diksmik Says:

    Your blog sucks and your point of view is pointless.

  28. risomt Says:

    @Matthew – did you read the article? A lot of what you wrote was opinion, but:

    “This is due to the appearant absense of any decent tutorials and its very non-standard use of terms and symbols.”

    The first 2-3 links of both results are by far and away the most commonly used, and given, tutorials.

    “Each PHP function can be understood just by reading its help page.”

    Python Syntax:



    I also have serious qualms about your comment “very well thought out language design” regarding PHP. There are some *serious* faults with that, but i’m not trying to start anything vicious here.

  29. Chris Says:

    It makes me laugh that right in the middle of the comments for this well-intentioned, well-written post which nails it exactly, a bunch “x sucks because” comments swell up. To those comment posters: I’m laughing _at_ you, not with you.

    Well written sir.

  30. troels Says:

    @Bill Mill
    And watch what happens if you bookmark a page and come back to it later. Continuations are no different from other types of server side state, but since they 1) are incredibly powerful and 2) have a high level of abstraction, they are much harder to replace with client side state. I think both Arc and Seaside are fundamentally flawed in this respect. Continuations may have its use in a few cases (Such as the checkout process of a webshop), but as a general control mechanism, it’s dangerous.

    I know. That was my point.

    You’re right. I made a leap, because the way that you persist closures, is through continuations.

    I’m sorry for bringing it, since this has nothing at all to do with the post.

  31. jeff Says:

    >> P.S. Have you ever noticed how saying a word over and over again makes it stop sounding like a word?

    that’s a “jamais vu” :)

  32. Greg Says:

    I was already getting tired of the word, “sucks”, but after reading this article and all of the comments, I reached the nausea threshold. I would much rather someone discuss the advantages or disadvantages, strengths or weaknesses of a technology in order to help me decide if it is right for me to use, rather than shouting it “sucks” or “rocks”.

    In a discipline like computer science, which you would expect to be built on logical, rational thinking, I find it sad to see such a lack of rational discourse.

    I find Python to be very productive in my one man operation where in need to do data manipulation and produce some internal-use web applications. My programs are never very large so I don’t really need the discipline that static typing might provide. If I was on a team of a 100 developers, I might think differently and use Java or C#, depending on platform requirements.

    I am also going to teach programming to some high school students, and I’m planning on using Python because there are a lot of success stories of using Python at that level, and using PyGame, they can write some games which should generate interest. However, if I was going to build a cutting edge computer game, I wouldn’t choose pure Python. At best, I might use it for high-level scripting, implementing computationally intensive parts in C or C++.

    None of these languages “suck” in an absolute sense. I would like to learn Haskell in order to learn what appear to be important developments in the state of the art, but so far I have not been able to justify the time. If I end up with a student who is interested and has the ability, we might try to learn it together. However, just because Haskell does some things better than Python doesn’t mean that Python “sucks”. I think it would take me a long time to get proficient enough with Haskell to be able to do my work as well as I can with Python.

  33. , Says:

    Your favorite band sucks.

  34. Cyrus Says:

    A lot of people posting comments mention that they don’t like the lack of braces or necessary indentation that Python requires. I think this reflects the poor style people pick up when first learning how to program. Properly styled code should (more or less) be indented in the same fashion python is. As an introductory CS student in college, style is highly stressed in my classes and i found no trouble picking up python after learning some java.

  35. Ryan Smith Says:

    I’m so sick of people saying PHP sucks. If it sucks so bad why do so many people use it? Why are there so many great sites written with it? Why is there an enormous open source community built up around it?

    All the arguments I hear against it are “it doesn’t follow design principals” – SO WHAT? It works and it works well and it’s worked well for years and years and will continue to work well for many more. PHP is a great language if you actually want to get stuff done rather that spend your time in design pattern theory that produces NOTHING.

  36. Anonymous Says:

    At work every computer language sucks except the one I am getting paid to write in.

    At home every language has some cool feature I want to try out so I can convince someone to pay me to write in it, thus making it cool at work.

  37. Doug Says:

    For those who find Python’s indentation as syntax troublesome and bug inducing, I dare say you’re a sloppy coder.

    I transitioned to Python from Java (10 year vet) and I’ve never had an indentation bug that wasn’t obvious and quickly fixable.

    For those who think static typing helps in larger projects with lots of bodies, you’re relying too heavily on the compiler and not enough on testing.

  38. Frank Says:

    OK here’s a question: Is it possible at all to discuss language wars without starting one?

  39. Ken Says:

    Greg: This is programming, not computer science. Logic and rational thinking have nothing to do with it!

  40. Jonathan Ellis Says:

    > Every major annoyance I’ve had debugging Python seems to involve indentation

    I wish my bugs were that trivial.

  41. Chris S. Says:

    Who could ever think that Python sucks? Have you taken a look at its creator? He’s only the highlight of this week’s “Sexy Programmer Thursday!”

    Check it out, and enjoy!:

  42. hrf Says:

    I’ve actually used Python (and Perl, Lua, C, C++, OCaml, SML and Haskell) to write significant chunks of code that I still have to maintain. The thing I dislike about Python is that many of the decisions in the language seem totally arbitrary. For example, in Perl ($a,$b) = (1,2,3,4); is acceptable, $a becomes 1, $b becomes 2. In Python the equivalent code throws a runtime error. On the surface, that seems fine, they chose a different semantic than Perl, I’m fine with that. But the real problem is that ML style pattern matching cleanly handles both cases and lets the programmer decide what behavior they want. So once you’ve been exposed to pattern matching, you start to wonder why these other languages don’t have it.

    Perl, Python and C++ suck. Lua and C suck a little less, but they still suck. OCaml is decent but the syntax is ugly. SML rocks. Haskell is awesome when it’s more expressive and fast, but sometimes it’s painful to get great performance.

  43. Rintoul Says:

    Love the post! But please, please – refrain from saying that you “googled” for something. Internet searching through Yahoo! is pretty much just as good. Giving one entity 99% of the praise for being just 3% better is a little one sided. Google will be bettered – most likely not by Yahoo!, but by someone. Saying “google for” merely closes minds.

  44. al Says:

    Hey everyone! Thanks for the comments to my post. I added a small note at the bottom about PHP. And thanks to Bill Mill for the Python code, I completely forgot that list slices won’t bring up “out of range” index errors.

    (oh yeah, making this comment reminds me that I need to take out that simple anti-spambot measure I added in. It never really worked anyway.

  45. Mark Smith Says:

    Having programmed in Python for over four years, and having used it professionally, am I not qualified to say that it sucks if that is my honest opinion?

    Python is a mess. The language and it’s libraries lack consistency; naming conventions and the like aren’t even followed in the standard library! Things which needn’t be special forms are. Syntax exists for some built-in types and not for other [newer] ones (set). Then there’s the obligatory mention of lambda.

    Whether or not it was designed this way from the start, Pythons object model can only be described as a hack! My views on this matter has nothing to do with the explicit self parameter. Again it’s consistency. Some things which should be attributes of objects aren’t (len) and some things which shouldn’t be are. Related to this is the ever increasing amount of redundancy in the interfaces of built-in objects!

    I’ve been looking forward to Python 3 since it was first announced. After realizing that things only going to get worse I concluded that Python sucks, and promptly stopped using it.

    If you think this is unreasonable so be it, but not liking Python doesn’t automatically make you ignorant. Implying that it does just might.

    Ultimately it’s not a huge deal, just gotta let people make up their own minds. Good article though!

  46. Greg Says:

    Ken: Ha! I should have known. ;)

  47. Robin Says:

    Interesting brief comment about PHP. PHP is a little sketchy with how it deals with boolean expressions, zeros, and strings.

    For example, “true” apparently echos “1″ while false, supposedly “0″ echos nothing.

    And PHP is probably the reason why I don’t do object oriented programming, as PHP 4 is to work on many different host systems, whether they be PHP 4 or PHP 5.

  48. Anonymous Says:

    __who__ __says__ __python__ __sucks__ __?__

  49. K Says:

    @43: I agree. And since Google doesn’t want us to use “googling” or other forms as verbs anyway, we have at least two good reasons for using a neutral word.

    In most cases, “I searched for”, should be as meaningful as “I googled for”.

  50. Chuck E Jesus Says:

    Your argument is retarded, for there is no programming language that doesn’t have experts who detest it. Are they ignorant too?

    Your premise can be summed up as: it’s not the fault of the app, it’s the fault of the user. This is the type of arrogance that pervades nearly all software development today and it’s the reason that ALL software sucks fucking ass. Every single app fails to live up to expectations and fades to utter contempt under the burden of familiarity.

    So don’t give me this fucking twaddle that you’re such a great programmer and can easily overcome any language limitation and you’re happy about it… smiling away like some forest gump cartoon. All you’re doing with this column is ranking down other coders, you fucking dick, and fuck you for that. It’s only coding, you’re not curing AIDS or cancer, so STFU.

  51. Derek Says:

    OK, I have to laugh a bit, this site ( appears to use php quite a bit.

  52. Anonymous Says:

    I come from a C background. I use PHP at work. Some of its weirdness it inherited from C, so I guess it doesn’t bother me. I will agree that it is not an elegant language; it’s not the easiest to read ($W->T::F). Frankly, I miss not being told I have not defined a variable I am using. That feature would have saved many headaches. That said, PHP is more than adequate for my job and I easy to use.
    I do love Python, but that damn indenting quirk irritates me to no end. I will take a wild guess and say many of the people that complain about Python use tabs instead of spaces.
    My point is no language is without its flaws. If you think YOUR language does not then you are a fanboy and your opinion automatically loses merit.

  53. Kevin H. Le Says:

    Visual Basic sucks. If Visual Basic does not exist, the world would be a better place since there won’t be any manager who think highly and push for Visual Basic to be the solutions to all problems.

  54. TomFalc Says:

    The main point to remember when deciding whether or not a language sucks is the problem you are trying to solve. No one language can be the best in all situations, so you need an array of languages, and then use the correct one for the problem you are faced with. This may be one that you personally dislike,but tough.

  55. Mike Warot Says:

    Al, thanks for a thought provoking piece, and for my 15 minutes of fame. I’ve blogged a reply, and I hope it doesn’t ramble too much.

    Good luck with the Python advocacy at work.


  56. Anonymous Says:

    @52 Error levels.

  57. Jake Says:

    If someone is going to go around saying that x language sucks, then they are obviously not a good programmer. Different languages have different strengths and uses. For instance, I’ve heard someone say that PHP sucks because it isn’t good for creating desktop applications! Of course, most people that PHP’s strength is in the web. Heck, they may even be using WordPress, Druapl, or something that uses PHP to post it.

    I don’t think that any language should be ever put down in general. It can be put down for specific purposes all day. But everything has a use where it will do well to some extent, even if it is not as good as another language. Even BASIC is good as a learning tool.

  58. Mike Warot Says:

    Actually Jake, saying something sucks just indicates frustration… everything sucks at one point or another. ;-)


  59. Rod Says:

    I’m British. What exactly does ‘sucks’ mean? Anything to do with Hoovers?

  60. drVirtanen Says:

    Since the commenting has already gone really off the topic, I would like to ask one simple question: Is there a programming language that does not suck ( as in: have a huge amount of disadvantages ) in use for some specific purpose?

    @Frank: It is just as possible to talk of Windows in a positive way in a Linux forum, as it is possible to talk of “suckiness” of any language in any forum without causing a fanboy storm. This is a general internet phenomenon.

    ps. I am terribly sorry about using words “suck” and “suckiness”.

  61. Adam Gent Says:

    The language is not as important the community and platform that comes with the language. Sometimes there are technical features of the language that do help promote a better platform + community. This is more or less how a language can suck but you can still have a really great technical language with a very little community and hardly any platform. Consequently a good technical language does not equal good platform and good community. What I mean by good is lots of (correct) options to solve the problem. The parenthetical “correct” inserted above is the mantra of Python. However pythons platform is not as good as Javas. As an example try refactoring Python code… not so easy compared to Java + Eclipse.

  62. Len Parker Says:

    Cyrus: I hear that, I’ve read a few python programs and scripts but not written any yet. They all read very straight forward to me. I was taught programming between 11 and 8 years ago, indentation and formatting was strongly pressed in all languages we observed. (VB, Turing, Java, HTML, etc.)

    The primary purpose for it, was that if you are going to program professionally you often work in a team, and write only portions or modules of the greater code base. Proper basic formatting functions make your code easier to read and debug.

    This would read as a strength in Python to me, forcing would-be programmers to learn good practice, and to make their source more usable in future by those that follow.


    Rod: Sucks, it’s bollocks, it licks donkey nuts, it is without any form of professional or personal merit. It is a deplorable waste of space.

    Not to be confused with the a lewd reference such as, my girlfriend sucks… ;)

  63. David Zmick Says:

    I disagree completely with you, well, thats not true, i just do not understand this debate. It is not the language that determines what a programmer can accomplish. It is what the programmer knows, and the concepts the programmer knows. Sure, some things are harder in some languages, and some things are easier, but a language is ONLY a tool for expressing your ideas. If you dont like one language for your projects, simply use another!

  64. Swewmemdem Says:

    favorited this one, bro

  65. marjan Says:

    python still sucks

  66. Wayne B Says:

    Hey Al, did you get more Python in use at your company? How did that work out?

Leave a Reply

free blog themes