Why I Hate Python (Or Any Dynamic Language, Really)

A project I'm currently doing for work involves a custom server-side component. Ordinarily I would reach straight for D and Vibe.d. (In fact, D and Vibe.d are already making development go very smoothly on a light-weight "not-a-blog" system I'm developing...at least in the rare cases I can actually spend any time on it...) Unfortunately, this project came with an unwavering pointy-hair decree that I must use either PHP or Python. (BTW, If you think you know who it was, you're probably wrong.)

Naturally I didn't hesitate to choose "Anything but PHP".

But, it's worth noting the big reason behind the "PHP or Python" limit was the usual false-dichotomy bullcrap about "getting shit done" that's frequently used by dynamic fans. About the only argument that made any sense at all was that a lot of people know PHP and Python and could pick up the codebase later (It's always nice to know you're coding your way towards expendability.)

Whatever, fine. Python it is.

So, long story short, I found this page which pointed me to some relevant libs, and I figured I'd try Flask first.

I went to download Flask (BTW, if I see one more language or lib claiming on its homepage to be "fun!", I'm gonna kill someone). But Flask showed nothing but a Linux release. WTF? I thought Python was supposed to be at least vaguely cross-platform? Searched around and found some obscure corner of the net that happened to actually explain how to install it on Windows. Ok, so I installed the prerequisite PIP, I do the "pip install flask"...and the system couldn't find PIP. More digging...Oh great, back when I had to put the Python directory into my PATH manually, despite having used an actual Python installer, I was apparently supposed to also know to add the 'Scripts' subdirectory. Clear as mud.

Fine, done. Try again...And I get some big useless "Traceback" vomit. (I swear, when trying to use Python "software", I get more "Traceback" bullshit than actual "Ok boss! Done!".) Buried in that garbage is some line of sourcecode involving a string literal mentioning something about needing a "PyFlakes". Ehh, what the hell, let's just try "pip install pyflakes". Nah, no dice, just more barf.

Meh, whatever, fuck Flask for now, let's try Bottle. Apparently it's supposed to be low-bullshit anyway, so sounds good. Wow, this one actually installs. And the "hello world" source on their website works! Hot damn, we're in business.

So I modify the hello world. And I look up how to change the content type, because I know I'm going to need to spit out binary data on this project. And...uhhh...the content type didn't fucking change. It's still spitting out 'text/html'. Errghh...So I blow nearly half an hour digging through the docs for something I may have missed, go back over my code...nothing. Try to find someplace to ask, find a buried link to a mailing list (I hate mailing lists), and start writing for help. Then, by pure chance, I happen to notice it:

from bottle import route, run, request, response @route('/foo') def index(): request.content_type = 'application/octet-stream' return 'Blah' run(host='localhost', port=8181)

Do you see the problem? I mean, aside from the flawed idea of indent-scoping and the goofy underscore_naming_convention. Yea...Obviously "content_type" is a property of the response, not the request. Of course, Python couldn't have told me 'request' didn't have a member 'content_type' and ended the matter right then and there. No, it had to string me along, doing anything except let me know something was wrong.

If this is a dynamic coder's idea of "getting shit done", then they can blow me.

Oh, sure, you never make stupid mistakes like that, right? There's a term for programmers who don't make dumb mistakes: Goddamned LIARS.

After fixing it to "response" we can still have some more fun with this:

response.content_typePOOP_SHITS_FUCK = 'application/octet-stream'

Still runs! Wrongly! Even though I'm damn certain the Bottle developers didn't put any "POOP_SHITS_FUCK" into their API.

Why the fuck should any of that even compile? That's what I hate about these dynamic turds, they happily let you do completely nonsensical shit, just for the fuck it. "Oh, but this means you can stick random extra garbage into any object you want!" Gee, great. Just what I've never wanted.

Here's another wonderful feature I never wanted:

from datetime import date ... response.content_type = date.today()

Holy hell, my content type is a fucking day and Python happily spits out the resulting gibberish. Gee, it's not a bug, it's a feature! (Hmm, happily doing the non-sensical? No wonder it's named after Monty Python[1].) "But what if you wanted to..." Lemme just stop you there. The day I want to do something like that is the day I want my head bashed in.

"But it's just doing what you clearly told it to!" Great, I see we're already forgetting something about "programmers who don't make mistakes". Now, I don't like software that second-guesses me any more than anyone else, but when I fuck up (as we all do) and tell my computer to do something that doesn't even make sense, I expect it to tell me so, not use it as an excuse to run around fucking shit up. If I hand you a gun and say "Shoot the fribstitch", I expect you to say "What the fuck is a fribstitch?", not start blasting away hoping to hit it.

So let's recap: Dynamic typing helps you "get shit done" by giving you the freedom to do useless nonsensical things, write to properties that don't even fucking exist, and generally do things that are either outright bugs or are convoluted enough to invite bugs. Then, instead of letting the compiler eliminate entire classes of these bugs, you're encouraged to take the time to write extra unittests to catch some of them instead of, you know, just "getting shit done".

If I'm gonna "get shit done", then I expect my language to help me avoid bugs, not help me make them.

[1] I am indeed a fan of Python the Monty. Just not Python the Dynamic.

74 comments for "Why I Hate Python (Or Any Dynamic Language, Really)"

  1. (Guest) isomorph
    2012-10-21 00:25

    LMFHO i couldn't have said it better. learning JS right now--i know, just shoot me--because i got a web app to build and there is nothing else running client side. i can't believe that we've been stuck with this garbage for more than 15 years now. i remember when netscape was pushing it. a took 1 look and my stomach heaved. that was it for me. had i not had c/c++, and later java, it would have been the monastery somewhere far away from the madness. server-side there seems to be now an inordinate amount of juvenile enthusiasm for something called node.js. thank god there is scala, akka, and typesafe. didn't know about D until yesterday. problem is, there are all these libraries available now to speed up development server-side with dynamic languages. don't know what D has, but if one has to reinvent the wheel... well you get my point.

  2. 2012-10-21 13:44

    Yea, funny thing about JS and Python: As horrible as JS is, even *it* at least has optional static type annotations in later versions of the ECMAScript spec. Python doesn't even have that.

    The big server-side lib for D is Vibe.d < http://vibed.org >. I use it and I highly recommend it. It's sorta like node.js except it doesn't suck.

    D also has this set of libs: < https://github.com/adamdruppe/misc-stuff-including-D-programming-language-web-stuff > It's not very well documented, but it has a lot of web-related stuff, including a D server-side HTML DOM, which is very cool. I use it instead of the HTML templating engine that's built into Vibe.d.

  3. (Guest) isomorph
    2012-11-01 20:37

    thanks. greatly appreciated.

  4. (Guest) isomorph
    2012-11-10 02:31

    hey! i was wrong regarding being stuck with JS. just stumbled today onto Google's new language whose goal is to get rid of JS, at least on the front -end. the language name is: DART. at first glance, looks like a better tool than JS.

  5. (Guest) sudo !!
    2013-02-20 11:53

    The only dynamic language I tolerate is Java. Others? Go to hell.

  6. (Guest) guest
    2013-02-23 12:12

    Is Java a dynamic language? I don't think so...

    At least that's what I would have said if you asked me off-hand.

    But reading wikipedia it looks like Java *could* fit into the definition of a statically typed dynamic language.

    Learned something new.

  7. (Guest) Milan
    2013-07-09 21:10

    I was debugging my WordPress plugin for the past 26 hours and naturally, after no progress whatsoever, I have decided to type "fuck dynamic languages" into Google, and that is how I get here.

    Thank you for the article.

  8. (Guest) guest
    2014-01-06 08:46

    Python has its own cons, but mistakes you've made just make me laugh. You are shitty programmer and thats it.

  9. 2014-01-11 20:06

    @guest: For the third time, since the first two mentions were *cough* mistakenly overlooked:

    "There's a term for programmers who don't make dumb mistakes: Goddamned LIARS."

    What separates the good programmers from the rest, as with *any* form of engineering, is the ability and willingness to recognize that inevitable fallibility and plan for it, minimizing its impact.

    All people fuck up. But the true talent are those smart enough to have already set up failsafes.

  10. (Guest) guest
    2014-01-22 13:40

    I always joke and say that you can judge a programmer by what they blame:
    The novice blames the OS;
    The intermediate blames the middleware (<--- you);
    The craftsman blames himself.

    On this whole page I found only 1 truth, and that was your sub-title:
    "Inflammatory rants"...

    All of the best mate.

  11. 2014-01-28 03:12

    That's an old saying and people constantly interpret it wrong.

    The craftsman blames himself *because* it's his responsibility to pick the right tool (and *then* use it correctly).

    Being a good craftsman is NOT about grabbing any random junk and expecting to do an adequate job with something ill-suited for the task. I don't understand where so many people keep getting such a bizarrely twisted and nonsensical interpretation.

    If you drive a nail with a hammer and fail: Your fault for using the hammer wrong.

    If you drive a nail with a screwdriver and fail: Your fault, but only because you made a moronic choice by selecting the screwdriver in the first place.

    It doesn't matter one bit whether it's the screwdriver's fault or the craftsman's fault for picking the screwdriver. That distinction, as well as the entire blame-game it comes with, is semantic bullshittery. Doesn't matter what's to blame; what's important is that using a screwdriver to drive a nail is moronic.

    ...Just like using a dynamic language to write non-trivial software. And no amount of trite proverbs, let alone misinterpreted ones, can change that.

  12. (Guest) The_Frenchman
    2014-05-14 10:35

    Thank you so much for the good laugh.

    After spending an entire afternoon trying to figure out why Mr. Python kept evaluating to True the critical "If x < y:" line in my code, regardless of x's and y's values of course, I finally nailed it: x was a good old float but y was a.. string. My bad, ok, i'll admit to forgetting the appropriate type casting. I suppose strings are implictly valued to 0 or something so comparing numbers with them can "get the fuck done"...

    Boiling with wrath (unlegitimate I'm sure, easy, easy Python Ayatollahs), I decided for some reason to try and soothe it down by googling "Python is ****" which brought me to your fribstitch article... Hilarious and thoughtful.

  13. (Guest) guest
    2014-05-14 16:23

    Google fuck Python. Was not disappointed.

  14. (Guest) guest
    2014-05-14 16:27

    Oh and I almost forget : http://benchmarksgame.alioth.debian.org/u32/benchmark.php?test=all&lang=php&lang2=python3&data=u32

    Yes... they both are shitty languages but Python is even much more slower than PHP >_<

  15. (Guest) FUCKPYTHON
    2014-06-09 03:22

    Python was made by crazy monkeys ...

  16. (Guest) alex.k
    2014-06-17 13:35

    I feel your pain!
    You've just described my Python experience.

  17. (Guest) guest
    2014-06-24 16:16

    But look at the bright side
    While it allows you to write bull shit code, it will force you
    to indent it correctly.

  18. 2014-07-15 10:21

    > While it allows you to write bull shit code, it will force you
    to indent it correctly.

    Hah! I like that! :)

  19. (Guest) Kalrish
    2014-08-27 16:25

    I found the article as others have mentioned, and it likewise made me smile :). Perhaps I am too dumb or haven't really given Python an opportunity, but I too feel the same. Programming languages, in the first place, serve to offer concepts over the raw stream of bytes; what's the purpose of a language without strict types, that allows for such nonsensical, non-obvious behaviour? With SCons I already had some problems, and the same happened for some simple tools that I decided to implement with Python that ended up not being so simple. It seems as if what you get with the 'dynamic' part is what you later pay guessing how some trivial things are happening. For now, I'll keep with C++ :).

    (Again, this is just my current feeling. I realize that I might not have had a real experience with Python, and that it could change.)

  20. (Guest) guest
    2014-09-14 10:23

    Python was intended as an educational language and so on every opportunity it gets it tries to make you limp along to a new enlightmentment.
    Getting shit down isn't even remotely in the scope and nor is getting you just the info you need to fix your error.

    This is surely awesome if all you do is sit at some university getting knowledge stuffed up your ass.

    In other contexts, it can be a bit bewildering why you're told there was an unexpected end of the line, and that that occured while it was scanning a literal that was apparently a string instead of simply saying missing "/' in line 1510.

  21. (Guest) guest
    2014-12-04 01:34

    Yes, this, thank you.

    Fuck Python.

    I don't care for your inflammatory 'anything but PHP' nonsense though.

  22. (Guest) Steve
    2015-03-01 18:08

    When I heard someone said "Dynamic language could have beated statical language", I immediately searched "Fuck dynamic language", the "language" doesn't ends with a 's', is because I hated it from my bones. Nevertheless it ends up leading me to here, and expressed half of my feeling towards the "dynamic language", but he doesn't mentioned that so many "popular tools" are based in "dynamic language": Angular, Web.py, Ruby in rails, node.js and sort, where the common point among them is, they are totally non-sense bullcrap that you have to invest in a lot of time to debug just for one god-damned line of mistake, however the "programmer of nowadays" use them, and often leads to bloat-wares that you would screw you life by reading their documents oftenly, and I finally give up learning the "dynamic language", people who use "dynamic language" is the same who use BASIC and need to be corrected immediately, or otherwisr they will kill the normal and turn non-sense into new "normal".

    *Forgive my swear, but BASIC is the bullshit-est even far ahead of dynamic languages, people who uses BASIC as their primary programming language don't even know what the fuck is structure but know what the fuck is goto and spagetti code.

  23. (Guest) guest
    2015-04-16 18:58

    After a day of frustrating python coding, this is exactly what I needed to read for a break. Good to know I'm not alone.

  24. (Guest) guest
    2015-05-08 07:40

    Just goes to show, there are gotchas in every language.

    Frankly, this example is bordering on ridiculous. Reading between the lines, it seems like frustration bourne of dealing with unfamiliar territory.

    Maybe you'd be happier in .NET.

  25. (Guest) guest
    2015-05-08 08:11

    jak się nie umie to się nie potrafi

  26. (Guest) grzegorz brzęczyszczykiewicz
    2015-05-08 08:12

    pierdolenie - jak się nie umie to się nie potrafi

  27. (Guest) guest
    2015-05-08 16:21

    You are doing it wrong

  28. (Guest) guest
    2015-05-08 21:34

    Clearly this is the worst reasoning I've ever seen against Python. He/She's annoyed because the language doesn't magically opine intent and suggest an alternative (even when request DOES have a content type property)?? That it doesn't run cross platform?? I'm curious as to what language the author does feel to be ideal across the full spectrum of preordained cynicism covered here.

    What's ironic is that ultimately Python allowed him/her to prototype the intended functionality and test such within minutes (and with a bit more time, provides one of the most powerful unit testing frameworks to idiot proof his/her code from such future mistakes). Love to see how fast that goes in a large scale C++ app which can take hours to build before discovering such a mistake - and failing - requiring at least another few hours to try again, and that's before even attempting a single functional test. I won't even mention java as the callouses from all the typing would speak for themselves.

    There are clearly some sacrifices and other shortcomings with Python but I'd anything in THIS article is enough to convince someone to stay away from Python, clearly you are inexperienced enough to be easily swayed by passionate, superficial and illogical hyperbole

  29. 2015-05-09 10:27

    > He/She's annoyed because the language doesn't magically opine intent and suggest an alternative

    "opine intent" != "tell you when something actually went wrong". As explained in the post, I'm only advocating the latter.

    > even when request DOES have a content type property

    Shouldn't be public-writable anyway. But even if it wasn't there, it still would have done the same "Well, this property being accessed doesn't exist in the API, but let's just pretend nothing went wrong and keep chugging along anyway".

    > ... C++ ... Java ...

    Equating non-dynamic language with "C++ or Java" is hyperbole as well. That would be just as nonsensical as if I had said "dynamic languages are all terrible *because PHP*".

    See, it works both ways. You can't argue against an entire class of languages by cherry-picking the two absolute worst examples (C++ and Java).

    BTW, this page shows what it looks like in D:

    That's some pretty damn quick prototyping, too ;) And note that adding "res.contentType = Clock.currTime" or "res.contentTypePROP_DOES_NOT_EXIST = "whatever"" results in immediate compiler feedback of the mistake. I guess it does opine intent!

  30. (Guest) tommed
    2015-05-10 02:30

    Nice rant! I'm no fan of python either, no interfaces, not even duck-typing, but the mistakes you made would have been covered by unit tests. Had you made the mistake inside the content type string, all compilers would have missed it. Therefore having an accompanying unit test would ensure that 1. You've set the correct property and 2. The value you've set it to is also correct.

  31. 2015-05-10 09:58

    @tommed: Unittests are indeed essential for modern software development, even in static languages.

    In this case though, it wouldn't have helped: Detecting that the property wasn't getting set correctly wasn't the problem. I immediately detected that as soon as I ran it and saw it spitting out "text/html" instead of "application/octet-stream". The problem is the compiler responding to things that shouldn't be valid code in the first place by ignoring them rather than flagging them.

    I thought Python did do duck typing though?

  32. (Guest) gigi
    2015-05-11 11:55

    Thank you man, I'm forced to use this 'funny' thing that modern hippies love so much, and I hate it, I hate it with all the cells of my body. I'll come back and re-read this every time the through 'fuck this shit' start building up in my mind, to reset it and keep working on this fucking shit. Best regards.

  33. (Guest) guest
    2015-05-11 12:56

    Garbage in.
    Garbage out.

  34. 2015-05-11 17:00

    Weak/Dynamic: Garbage in, Garbage out.

    Static: Garbage in, Meaningful diagnostic message out.

  35. (Guest) guest
    2015-05-16 10:51

    I agree. I don't see the advantage of using Python unless you are doing very simple stuff. I rather use C# or Java for the same reasons you provided. Sometimes you don't have time to write unit tests and prefer to write code towards the product.

  36. (Guest) guest
    2015-06-09 09:47

    I so hate dynamic languages. Every time I work with one, I end up with implementing a complete type system in my tests. I am at lost how people "get shit done" with this crap.

    And the programmers must be completely retarded or something, why do you need the freedom to write error prone code? Is it because they don't really understand what they write?

  37. (Guest) guest
    2015-06-12 16:06

    The correct way to set mimetype: http://stackoverflow.com/a/11774026/2534876G

  38. (Guest) guest
    2015-06-25 13:26

    What you mentioned are weaknesses of Python (and Ruby) but not weaknesses of dynamic typing. I can also rant about how crap static typing is by referencing Java, C#'s or C++'s type systems but I'll immediately get a response have some Haskell or Ocaml guy telling me not to judge static typing by the worst examples.

    Let me just give you an example of why Java/C#/C++'s type systems are bad: I have simple task divide to numbers and get a decimal fraction as a result, in a dynamic language that is no problem since variables carry type information at runtime they will be coerced into the appropriate type thus you just divide the numbers. In Java however If I just divide the numbers e.g. 'a/b' I will get the result I desire IF and ONLY IF a and b are both floats/doubles, however if they happen to be ints the result will be an integer even if what I am doing is assigning the result to a float/double I will not get some useful diagnostic type error message, nor will I even get a runtime crash, instead the result will be implicitly truncated and a bug may not even be visible until MUCH later. In order to make this work I have to do put casts everywhere (double)(a)/(double)(b) yea other than not being readable, you're performing a cast isn't that going against the purpose of static typing anyway.

    Either way what you wrote are weaknesses of the Python programming language, in other dynamic languages such as Lisp don't have the aforementioned problems.

  39. (Guest) guest
    2015-07-17 01:25

    I don't really have a dog in this fight. I'm an independent contractor and I end up working with whatever is required regardless of my opinions. I have to say though every time I have to work with a non-trivial set of Python code it's always a steaming pile of shit. I don't know that the problem is the language so much as it is the culture of Python programmers. It's like because they're not forced to apply rigor then they are somehow excused from it. I'd say 60-70% of the Python code I've had to fix over the years was written by non-developers. Various kinds of engineers, academics, system administrators, etc. Basically otherwise intelligent people who just don't know what the fuck they're doing when it comes to developing software but don't yet realize it. I think Python is ok for building test drivers and sysadmin scripts and things like that but for big boy work I reach for C++, Scala, Java if I must and C# for any .NET or Mono work.

  40. (Guest) guest
    2015-08-21 04:56

    Python is Elegant language. Stop bashing Python you don't know true power of Python

  41. (Guest) Jody Bruchon
    2015-09-11 07:32

    Languages like Python and PHP may be easier to learn and quicker to prototype in, but all the convenience comes with the high cost of being able to more conveniently shoot yourself in the foot without even noticing it until your foot rots off. For all the "get shit done" that these convenient languages bring and the initial time savings they represent, the time wasted trying to debug once programs get bigger will easily destroy any time savings and then some. Convenience is a double-edged sword. It's like using the 'rm' command: you don't have to tolerate "are you sure?" for every last thing you try to delete unless you explicitly say so, but when you accidentally type 'rm -r /home/user /foo' and you get 'rm: /foo: No such file or directory' and the computer then catches on fire, at least it was convenient!

  42. (Guest) ben
    2015-10-25 20:11

    Wow, your only examples of Python(and other dynamic languages) sucking are that of your own incompetence. You're not being thrown errors because HTTP responses can have any number of headers, including custom ones. It's really funny how programmers of static languages think that static typing is there to help programmers when they make a mistake when it's really there for purposes of compilation. But no, to you it's like "Microsoft Clippy" for idiot programmers. I don't even like Python.

  43. 2015-10-26 09:20

    @ben: The biggest difference between capable professional programmers and inexperienced hacks is the latter keep fooling themselves into believing they can, and should, avoid mistakes simply by trying to. Eventually, some of them finally learn better and accept that basic engineering principles actually apply in software development. And some of them actually manage to *learn* basic engineering principles - which are NOT covered in anyone's "How to build a website 101" or "Java/Python/PHP is 21 days" courses. (Or even in most post-secondary Computer Science curricula, pathetically enough.)

    As for HTTP's capability for custom headers, there are far better ways to handle those in an API. Ways that permit custom headers while *still* catching the inevitable mistakes anyone will make *before* they turn into a productivity-destroying debugging session. If you're imaginative enough, I'm sure you can think up some of these methods yourself. Don't forget too, custom headers in HTTP are supposed to be prefixed with "X-"; they shouldn't just be any arbitrary old string.

    "static typing is...really there for purposes of compilation"

    That statement is drenched in pure ignorance. No, static type systems have always been for the specific purpose of program verification, to catch bugs earlier rather than later. Even the most basic research will verify that: https://en.wikipedia.org/wiki/Static_typing#Static_type-checking

    Compiler's don't need static type systems, the existence of dynamic languages proves that. It's for verification, not compilation. Think of them as a comprehensive set of extra unittests that are always there, automatically. You DO unittest, don't you? Or do real programmers not need unittests because they never make mistakes?

  44. (Guest) footmeetmouth
    2015-11-05 23:57

    No!!! python users do NOT need to unit test because the language is made super easy to do whatever you want with no unwanted side effects as thats the purpose of python. Thats why you dont have to declare your variables because we have gotten away from the legacy of C and now we are able to deploy objects and code however and wherever we want and it works and doesnt need to be tested ever. thats the beauty of hiring a young grad student, no wasting time testing and no wasting time writeing stupid C programs.

  45. (Guest) guest
    2015-11-06 08:22

    Python sucks and always has and always will, PHP is completely different because it's not anal about whitespace and simply uses semicolons and brackets like any other civilized programming language.

    Why don't you even like PHP? Too popular or not edgy enough for you?

  46. (Guest) Bob
    2015-11-06 16:56

    One hugely overlooked disadvantage of python, or really any interpreted language, is that is sucks at interacting with the operating system libraries. You want RPC you'll have to write it in C first then call it from python, or else you can always use some module written by some kid. Until operating systems start including APIs in python, you're much better sticking with any of the native c languages. In fact I'd say python and languages similar are leading to a whole new generation of programmers that have no clue how to interact with and leverage the system. Their world revolves around standard libraries and 3rd party contributions.

  47. 2015-11-09 13:22

    @footmeetmouth: That's the dumbest load of nonsense I've heard in a long time. It's disturbing that thought processes like that even exist.

    @guest: "Why don't you even like PHP?" Everything about it. This guy explains it better than I could, and it does corroborate with my experiences with PHP: http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/ It's hands-down the single worst language in common use.

    @Bob: Yea, bindings and cross-language boundaries can be a pain. :/

  48. (Guest) guest
    2015-11-14 17:05

    PHP is horrible but it's actually a genius language when compared to other dynamically typed languages like Python and Ruby. At least in PHP you can declare the types of function arguments and soon (PHP7) also function return types. This "type hinting" feature of PHP is a bit flawed though, but the way it's going, I'm sure in 10 years PHP will be like Java.

    I agree with you though dynamic typing sucks big time. The funny thing is, a good developer is expected to write the types for everything in comments, which results in code more verbose than in a staticly typed language. Good developers are also expected to write unit tests, I find this hilarious af in dynamically typed languages - by choosing to use a dynamically typed language you basically choose to write unreliable code that enforces no contracts, those tests are barely gonna make a difference.

    I'm a web developer who works mostly with PHP, god how depressive this is... Even the dumbest statically typed languages (VB6) seem like heaven to me now...

  49. 2015-11-16 11:27

    @guest: "I'm a web developer who works mostly with PHP, god how depressive this is... Even the dumbest statically typed languages (VB6) seem like heaven to me now..."

    Funny you say that, I actually used to work on a commercial webapp written in VB6 (yes, VB6, not ASP/VBScript as was more common at the time). Not something I would ever want to do again, straightjacketed as VB6 was, but the language's predictability was indeed nice compared to other environments. Outside the office, I was even able to write a simple preprocessor to overcome at least a couple of my bigger annoyances with it.

  50. (Guest) kaalus
    2015-12-06 19:30

    You made my day mate, every time I see Python, JS, or any other dynamic language code I puke. Googled "Python is shit" and came here!

    Yesterday I wanted to edit some videos so I downloaded an open source program called Natron. Had high hopes for it. Then I noticed that every dialog takes about 10 seconds to open... Of course, it's written in Python :-) Uninstall, uninstall!

    Python should be targeted by Greenpeace. Think about the gigawatts of electricity that gets wasted when millions of servers are stuck interpreting this crap for days on end, when it could be done in a fraction of the time.

  51. (Guest) guest
    2015-12-20 08:01

    The python on windows experience you had with PIP is quite typical. Python does claim 'cross platform', but really is pretty crappy at it. Basically it is 'whatever Linux or Posix does, lets wrap it nearly directly and litter our docs with "for details look at your platform documentation"'.
    Python works okay on Linux, and in very limited circumstances on windows. (e.g. try opening more than 512 files at the same time on windows,..., but thats obviously because Windows sucks...and we don't like Win32 API, its not Posix, blah...)

  52. (Guest) guest
    2016-01-26 07:11

    :) Nice one. BTW - I was brought here by "I hate python" ;)

  53. (Guest) guest
    2016-03-04 07:31

    What a pile of horsecrap

  54. (Guest) Odexios
    2016-03-07 12:13

    Looking for "I hate python" got me here, of course.

    Just to speak up a little for Python, however, many of these issues have been mitigated by PEP 0484, with type hints. As long as you don't abuse the system, it's almost like having static typing, while still having the freedom to break free of static typing limitations, if needed.

    I still think Python is better suited for relatively small projects, just to add my two cents.

  55. (Guest) guest
    2016-03-16 03:36

    Got here by typing "python is crap" in Google.
    Python is language designed by kids for kids but what else to use if you want to write simple script?

  56. (Guest) Michael
    2016-03-24 08:24

    I Googled on "Why is Python changing my data types" and got here. My IT background includes Fortran, Modula, C and most recently Python. Much of the Python code I am working on was written by someone else no longer with the company. This morning I was asked to do a few minor changes - should have taken me about an hour but ended up taking me all morning because of Python's automatic typing. What started as a date had morphed into a string when I wanted to increment it! Sorted that out and the found some floats had morphed into strings when I needed to do some arithmetic on them. Can't see myself becoming a Pythonista!

    I noticed a reference to Flask in the first post. Two of us spent some time evaluating it last year. Avoid it is a pile of 'carp'!

  57. (Guest) Fangirl_Schmangirl
    2016-06-01 10:29

    You had me at POOP_SHITS_FUCK

  58. (Guest) guest
    2016-08-09 10:30

    I'm working with python now and this is exactly how I feel. It is terrible. I'd rather write assembly.

  59. (Guest) guest
    2016-08-30 22:47

    I accidentally stumbled on this page.

    What a bunch of clueless fools.

  60. (Guest) guest
    2016-09-06 02:05

    Python is shit !!

  61. (Guest) Zhaojh221
    2016-09-21 17:53

    Python is fit to write the scripts run on system/platform for do something back office, but a little weak for websites or enterprise applications.

  62. (Guest) guest
    2016-11-14 00:08

    I wanted to add my rage at Python to this page, well said and well done. Fuck Python.

  63. (Guest) guest
    2016-11-14 00:09

    Well said and well done. Fuck Python.

  64. (Guest) guest
    2016-11-18 22:29

    Wrote this some time ago:
    Python really is just a huge pile of crap. There really shouldn't be even need to justify that opinion. Python isn't even about shooting oneself in the foot. It's more like aiming straight for the head. You want something done quickly, use Python, maybe. You want something to be done right, use more strongly typed and organized language that can also be maintained by someone other than you. Even installing that turd is a pain if you're using multiple platforms. What other language can have it's packet/library manager crap it's pants, and actually hide it, in even simple tasks if you have a "wrong" environment variable somewhere? The documentation is a joke and when you ask even something basic on python forums, you'll get an answer that is nowhere near the problem because you can't give enough data about the problem because even the compiler/interpreter doesn't apparently know what the problem is, heaven forbid that it would tell you anything useful to point you to finding solutions. I've had more fun with COBOL and that's quite something. I actually find Brainfuck more logical than Python.

  65. (Guest) guest
    2016-12-05 18:28

    Made me laught to tears!
    Came here googling:

    if python bullshit then:

    thet was after having bad hours trying to make simple things work in

    The same program works (somehow) with pithon 2 but will not with python 3
    what a nice update!!

    Thanks a lot for that laughing!!!

    Python is crap.

  66. (Guest) guest
    2016-12-27 13:39

    If you are about to come in and save Python's honor, please note, one sees a windshield covered in bugs and thinks nothing of their nobility.

  67. (Guest) guest
    2016-12-31 16:55

    The worst thing is that they use it in education. If you want an easy language to start with why not Euphoria or Newlisp. They are not trying to conqueer the world, they understand their limitations they are not a religion.Something starts as a script language, then they start to use it on the web, then they want to use it everywhere even if it is not fit for it.Python for IoT, Pi with its limitations,embedded, to use it as a replacement for c, they cannot even use simultanous threading, I do not care what they use for the web since the try all the tricks they can to make it slow for the users like injecting adds, flash, javascript applets moving around,etc. Fuck them. But on my laptop, no thanks that explains why Ubuntu is buggy too much python code. Why is my Python code running so slow? Because it is python. What does python mean in my language? Something that is really bad.Python on pi what a joke.

  68. (Guest) guest
    2017-01-21 16:57

    Python is worse than shit, it has this amazing ability to make inexperienced programmers think they are developing professional software. I have really drawn the line with Python. I just say no and have been able to avoid it while making my living coding for 22 years.

    It should *never* be used for mission critical code of any kind that lives could depend on because errors can so easily creep into the codebase and side-effects can be costly to track down and fix.

    For throwaway web code, be my guest. The real problem is that some hiring managers now think of it as an industrial-quality tool for creating solid code and it most certainly is not!!

  69. (Guest) guest
    2017-01-27 14:33

    Fuck PIP fuck virtualenv I'm going back to C#

  70. (Guest) Roger McKassin
    2017-02-09 19:26

    I think that there's a clear delineation between two different types of Python users... and that can even be seen in these comments.

    The first are the "get shit done" types who are writing code from scratch. Rapid prototyping - gluing together disparate functions from the massive library in mere lines of code. So exciting! I didn't think software engineering was this easy! This is so cool! Let's get a keg and play foosball for the rest of the evening! Python is just so ZEN.

    Then there are the actual software engineers who end up coming across the steaming piles of code that are left over after the party. The folks who are handed some giant code base which was fueled by cheetos and venture capital and told: "productize this.. oh, and it has to change to accept Y instead of Z..."

    I remember when I was writing Perl and there was a similar argument about using "strict". People just couldn't understand why it wasn't OK to just write an entire program on a single line of code with all kinds of implicit variable references. The answer was, because someone else might have to read it. Or you might have to read it in six months.

    I think Python is an overgrown scripting language. The culture around it makes it sound like you need to be part of a group of believers to "get it" but the fact is, there's nothing to "get" (the way the language is documented really speaks to the "insider" nature of the Python culture).

    At the end of the day, Python (and many other scripting languages) just aren't strict enough for large, enterprise-wide applications. The very fact that it seems so easy-breezy lemon-squeezey to not have to write things out explicitly is the other side of the sword that has the 100th developer, 12 years later, scratching his head and saying, "now did he mean this to be a String ... or..."

  71. (Guest) guest
    2017-02-20 07:14

    response.content_typePOOP_SHITS_FUCK = 'application/octet-stream'

    You just made a new var named 'content_typePOOP_SHITS_FUCK' in your 'response' dict (unused by django of course). Didn't see any bug.

    Python is surely shit, but not with that type of arguments.

  72. 2017-02-22 11:58

    "You just made a new var named 'content_typePOOP_SHITS_FUCK' in your 'response' dict (unused by django of course). Didn't see any bug."

    Never said the problem was Python's implementation, the problem is it's design. The above should never have been possible in the first place: Forcing all symbols across all entire codebases to be a dict (with implicit insertions no less) is a glaring misfeature because it creates various problems (usability, reliability, resource usage, performance, and encouragement of messy code architecture) for the sake of of an ability that's only marginally useful at best.

  73. (Guest) YourNeighborhoodDogmaRejector
    2017-07-07 21:58

    Python is a toy. It always will be. Plain and simple.

  74. (Guest) Mehdi
    2017-07-15 13:00

    It is claimed that Python can be used for scientific computing, because it is easier to write scientific programs using it, it adds some degree of easiness
    working with arrays and matrices in comparison with MATLAB, is horribly confusing.

Leave a comment