Discussion On
Dear Python, Why Are You So Ugly?

by in Programming Languages


  1. anonymouse
    Thursday, April 2604, 2012

    hah never looked at it this way

  2. asmedrano
    Thursday, April 2643, 2012

    I dont know if I agree with you these are pretty nice looking…



  3. asd
    Thursday, April 2625, 2012

    I sense a Q… followed by another Q

  4. anon
    Thursday, April 2623, 2012

    You’re an idiot.

    • Cliff Wells
      Thursday, April 2606, 2012

      What a convincing rebuttal.

  5. Peter
    Thursday, April 2641, 2012

    I’ve used both here is my view on it

    Reason, ruby on rails is more commonly used in web environments. Ruby has a nice fast math notation part in it, and its more a follow up to people who used Perl and want a real programing language instead.

    However python is much older and has a different origin. Its not a main web language (although web services can use python). Since however its not mainly used by web people dont suspect great web pages. Rather with python think of command line things, think of easy interaction with openCV, or think of easy integration with scientific modules.
    For starters dough there is a great forum to start with python where newbies and advanced programmers are very active.


    not as great looking but great content for any newbie

    • Robert
      Thursday, April 2607, 2012

      I’m sure I’m not the first to notice, but it’s ironic that this Python forum is built with PHP.

      • Lior
        Friday, April 2710, 2012

        Also this site :)

  6. Caley Woods
    Thursday, April 2656, 2012

    I’ve always enjoyed about every product that Dumbwaiter Design has released. They’re a Django shop and all of their sites are top notch.


    I’m not affiliated with them, I follow @stevelosh on twitter but he’s not working there anymore. Even their Django dash entry was well done.


    • Jess Johnson
      Thursday, April 2643, 2012

      Those guys do make some good looking stuff. Thanks for the link.

  7. Robert
    Thursday, April 2635, 2012

    As someone who has evaluated Ruby on Rails and is now learning Python and considering it and Django for use on a new project, I completely agree with this article. I really like how clean and simple the Python language is. But the sites about Python look extremely dated and the user community is nowhere near as vibrant as the Ruby on Rails community. I don’t get that there’s that same sense of excitement in being a Python web developer as there is in developing with RoR. Python deserves better!

  8. ntlarson
    Thursday, April 2656, 2012

    I respectfully disagree. As a python developer I take exception to the idea that poorly designed front ends are in any way connected to the back end language. Web design and development are comprised of two distinct areas the back end and front end. The back end, regardless of language, takes input, process that input and/or retrieves data, and pushes it back to the front end via a template of one form or another. The front end is then responsible for the layout and style thereby creating the user experience via HTML, JavaScript, and CSS. The point is that while I would agree many sites based on python are not that attractive its a reflection of the developers background and intent, not the server side language they used.

    • Jess Johnson
      Thursday, April 2614, 2012

      Absolutely. There is no technical reason why Python sites look bad. So how come a lot of them do?

      • ntlarson
        Thursday, April 2657, 2012

        The reasons behind the question “why?” are as wide and varied as the number of people developing the sites. It could be simple lack of resources, it could be lack of experience, or simply the fact that getting the end result out was more important than the design… or in other terms, focus on content and usability (to mean everything technically works and people can get to the data without waiting for a designer to skin the site) overruled flash and sexiness. Maybe its a matter of taste, maybe they like the old school square column/sidebar layout, it could be the background of the user base (python is more science/sys admin based users vs Ruby’s more artsy user base) is showing through…. who knows, we could speculate for hours. The point is, the question is a subjective one, not an objective one. Without a technical tie in to the language, there is no objective answer to the question.

        • Jess Johnson
          Thursday, April 2610, 2012

          Hi ntlarson,

          There are a few premises in the article:
          1 – That Python interfaces aren’t as well designed as Ruby interfaces
          2 – This has an affect on the number of people who are willing to pay to build stuff in Python and on the number of people who learn Python.

          I’m not sure if you are disagreeing with #1 by saying that design is subjective, or if you are saying that it isn’t really worth talking about why Python sites are less attractive, despite the fact that figuring that out could provide some solutions to #2.

          First, design is very subjective if we are only talking about “making stuff pretty”, but stuff like UX/UI design can be done objectively by doing user studies and measuring stuff like bounce rates or conversion rates. One design is objectively better than another if a visitor can more easily find the information they need. I don’t have access to any of the stats for the sites I mentioned in the article, so the only kind of comparisons I can make are more gut feeling ones. For me, stuff built using Ruby tends to be easier and more pleasant to use than stuff built using Python. That is a subjective statement, but I still think it’s worthwhile to talk about (especially when coming from a Python developer).

          I also think it is worthwhile to speculate why this is the case, because coming up with some ideas could lead to solutions for improving the UI of stuff written in Python. That would be a good thing for the Python community.

          • ntlarson
            Thursday, April 2659, 2012

            I agree with much of what you say. In fact I only disagree with the aspect that the lack of good design is fundamentally related to the Python programming language itself.

            As to your first point, perhaps I am not understanding exactly what interfaces you are referring to, but from my experience, the interfaces on the back end language have little to do with the overall style of the front end as that is handled by other technologies. If you are referring to frameworks and the interfaces thereof (i.e. templating engines, routing protocols etc) then those should be discussed directly not bypassed to discuss python… e.g. compare Rails to Django or Pylons/Pyramid or Flask, not Python to Ruby.

            I do agree with your second point. Just as I take away a first impression about a company when I see its site, I can certainly understand how the number of sites with less than ideal style can affect the overall impression of python based sites. I am not saying its not worth discussing why the number of python sites are seemingly more poorly designed, only that the discussion is better framed around teaching/encouraging good design principles. This along with resources to learn the associated technologies for implementing front end design will reduce the risk of people seeing articles like this and thinking its a fundamental aspect of Python and so walk away from learning it or thinking that if they learned something else they will automatically have better designed sites.

          • Jess Johnson
            Friday, April 2723, 2012

            >> In fact I only disagree with the aspect that the lack of good design is fundamentally related to the Python programming language itself.

            I don’t mean to imply that there is something about the Python language that causes bad frontend design. This is not the case. However, there must be something about the Python community that is contributing to this problem. Maybe we don’t value good design, or maybe we don’t know how to connect with good designers and UX/UI people.

            >> As to your first point, perhaps I am not understanding exactly what interfaces you are referring to…

            I apologize for not being clear. When I say “interface” here I am talking about the user interface. So the “design” or “front end”, not the programming interface.

            >> I am not saying its not worth discussing why the number of python sites are seemingly more poorly designed, only that the discussion is better framed around teaching/encouraging good design principles.

            Thanks for calling this out – the framing of the article should have been better. Pointing out examples of (subjectively) good and bad design will perhaps help get people to acknowledge the problem, but it doesn’t make any progress toward actually fixing it. If I was a designer I might feel more comfortable about recommending specific design principles, but referring people to some expert sources (the books by Jarrod Drysdale, Sacha Greif, and David Kadavy) is at least a step in the right direction.

  9. ylper
    Thursday, April 2632, 2012

    I would not want the blogging software I use to be written by a designer …

  10. Cliff Wells
    Thursday, April 2615, 2012

    I have to agree about the general state of Python websites. But can we get a co-article named “Dear Ruby, why do you use all of the RAM in my servers, just to run a simple blog?”

    I’d love to see the Python community get some design chops, but not if it means focusing more on marketing than quality code.

    • Jess Johnson
      Thursday, April 2651, 2012

      I wouldn’t want the Python community to focus on marketing at the expense of quality code either. The Python community does an awesome job when it comes to providing code, tools, tutorials, guidance for new devs, etc.

      P.S. I’ll wait on you to write the “Dear Ruby…” article.

  11. Francois
    Thursday, April 2606, 2012

    Haha, look at the Smalltalk community design skills. It’s pretty impressive :p

    • Jess Johnson
      Thursday, April 2617, 2012

      This makes me wonder… If a few designers and ux people got together for a beautify Smalltalk project, would it have an effect on the number of people who learn it?

      • Francois
        Thursday, April 2613, 2012

        I don’t know for Smalltalk tools per se. But all the stuff around (websites, logo)…

  12. Jdx
    Thursday, April 2631, 2012

    Great article, I almost feel bad that I linked to the Ruby resources not python.

    General feedback: you guys need to all a date to your articles.

  13. Abderrahmane TAHRI JOUTI
    Thursday, April 2623, 2012

    This is like the most ridicoulous blog post I’ve ever read in my life.

    I am sorry but blaming apples for how oranges taste is like the most unthinkable argument I’ve ever came across in my life.

  14. johannes
    Thursday, April 2639, 2012

    well, let’s take your first example: the python page looks like something organized and friendly where you could potentially learn something. the ruby page looks more like the cover of a “for idiots” book. even the “…in 15 minutes” stuff is there.

    the rest of your examples are similar. i don’t do much python, and i don’t do web stuff, but based on your examples, i’d choose python any time.

  15. Kenneth Reitz
    Thursday, April 2614, 2012

    FWIW, Heroku fully supports Python now :)

    Your point still stands though.

  16. Thago Avelino
    Thursday, April 2627, 2012

    In Python developers need to improve the interface of our projects.

  17. Steve Lacy
    Thursday, April 2608, 2012

    Heh. Nice try. You’re comparing the top page of the Django documentation with the top page of the Rails documentation. Have you looked at what it takes to actually find the information & documentation you want? For example, let me show you:




    Ruby’s use of frames (yes, old-school HTML frames) is totally unacceptable. Google results pop you down into a place where you can’t navigate back up again. Python is fully and well documented. Let’s compare Rails vs. Django

    Django Forms: https://docs.djangoproject.com/en/dev/topics/forms/?from=olddocs
    Rails FormHelper: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

    Please. It’s comical how ugly and poorly documented Rails is.

    • Jess Johnson
      Thursday, April 2650, 2012

      Good point. For people using the docs, Python does a great job. But for people who are evaluating whether to learn Python or Ruby, I think they will be hitting the front pages and exploring from there. Its a very real possibility that usability or design issues on the front page will negatively affect Python adoption.

      • George
        Thursday, June 2847, 2012

        That’s an interesting point. Am I weird to say that I appreciate how quickly you can find the info you want in the Python documentation? It’s clear exactly where to look, everything is well linked, etc. On the other hand, RoR’s website makes you feel excited…

        One thing that Python really has going for it is Sphinx. Is there an equivalent for Ruby documentation? Quick web search reveals yard and RDoc, but I’m not sure.

        While coding, it’s great to be able to be able to look up information on functions from the command line (with pydoc or help).

    • Willy
      Friday, August 2407, 2012

      You are pointing to the old rails 2.3 documentation, this is the one you should have used:


  18. Karen Rustad
    Friday, April 2718, 2012

    I can only imagine that it’s the demographics of who learns the languages. Anecdotally, at least, nearly all the designers/UX people I know who’ve decided to learn the development side of things have gone to Railsbridge workshops (or similar) and learned Rails. I don’t know how or when it started, but there’s a lot of overlap between the design and Rails communities and that commonality perpetuates itself. (Birds of a feather flock together and all that.)

    Whereas most Pythonistas it seems started out as coders and stuck with it. (Plus the science majors who were introduced via scipy et al.) I’m one of the weirdo designers who happened to fall in love with Python later in life and who doesn’t really get Ruby; we exist, but it’s kinda lonely over here. And resource-wise, honestly, when one of my designer friends tells me that they want to learn web programming and don’t know where to start, it’s hard for me to not wistfully point them to Railsbridge et al. The resources and the attitude for newcomers and designers are already there, where they aren’t as much in most Python groups. I’m working on changing this, but it’s slow.

    tldr; It’s not (just) a matter of knowing to hire a designer or not, it’s whether you’re actively recruiting designers to code with you and join your community.

    • Jess Johnson
      Friday, April 2741, 2012

      Thanks Karen that’s interesting. I had assumed that Python did a better job of welcoming women looking to learn programming, but I didn’t know about Railsbridge which is an entire organization devoted to free rails workshops for women and their friends.

      >> The resources and the attitude for newcomers and designers are already there, where they aren’t as much in most Python groups. I’m working on changing this, but it’s slow.

      How can I help?

    • George
      Thursday, June 2808, 2012

      The only thing I can offer is that Udacity is starting to change things, with really amazing videos and examples, well-documented, well-supported, and all focused on Python in all different forms.

      Unfortunately, there is *nothing* about front-end design yet, but it at least has a fun, supportive environment. (and there’s a webapps class by the founder of Reddit now too!)

  19. Lior
    Friday, April 2756, 2012

    The django site is prettier and cleaner the the convaluted rails site.

  20. juniorbnusc
    Friday, April 2755, 2012


  21. Chetan
    Saturday, April 2858, 2012

    Site design, so it is and needs fix.
    When I started exploring Python web development frameworks a year ago, exactly this aspect kept me diving me into any one of them! looking at architecture of leading python web dev frameworks chances are little with’em. sadly. Maybe be something need to be done from absolute scratch!

  22. ki113d
    Sunday, April 2924, 2012

    You sir are a moron

  23. Alan
    Wednesday, May 224, 2012

    The Django site was designed by Wilson Miner, former designer at Apple, and it’s definitely not ugly.

  24. Mimoprokhodil
    Thursday, May 356, 2012

    The left side is nice.
    The right one is filled with garbage.

  25. bimo
    Thursday, May 318, 2012

    as web designer and also a programmer, I think python website resources has it’s purposes since we don’t need any polished web (that sacrifice bandwidth and make it slow to load) just to find how to array slicing in python

  26. Allerin - Ruby on Rails
    Thursday, May 350, 2012

    Sites built using Ruby on Rails has overcome the features of Python.
    Websites based on Ruby on Rails look attractive and more dynamic as compared to Python.

  27. Aniran
    Thursday, May 359, 2012

    Totally agree with the article.

    I think part of this problem comes from the variety of python web frameworks existants out in the field. If one chooses Ruby, there’s Rails and thats it. But what about python? Quite a lot of different webframeworks to choose from! And webdesign must be aligned with the inter-structure where it runs from. RoR webdesigners have a lot less to learn before laying their code.

    • ntlarson
      Thursday, May 307, 2012

      no, I simply cannot agree with this line of reasoning. The front end design, as I explained above, has nothing to do with the back end mechanics. Even considering frameworks with different tools to generate the front end html, that is as far as the back end interacts with the front end. Once the HTML is generated, either boilerplate or via a template system, the design, the look, feel, and usability of the site is based on CSS and JS (possibly some 3rd party tech like Flash if you are developing for older browser tech). To link the two is as silly as saying the engine in a Gremlin is responsible for its ugliness.

      I have been looking more at things relating to graphic design and my stance on this has only been strengthened after pointedly spending time educating myself further in the principles of graphic design.

      The only thing limiting Python sites aesthetics are the developers themselves. As Jess and I discussed above, the lack of better design does have an impact on the overall perception of the community, and this is unfortunate. However, there is no legitimate connection to the majority of pages backed by python being ugly, and the python language itself. What needs to be addressed is a better exposure of design principles to the developers, not merely working in a different language or framework. Ruby or java or .NET offer nothing of direct significance that will make the site inherently more attractive.

      On a side note. I have purchased the Design For Hackers book Jess recommended as well as The Elements of Graphic Design I am about a quarter of the way through this one. I also purchased a few books on typography as this is a critical part of good design for the web. So far they all look good, though I have not read them all yet, only so much time in a day :-)

  28. Chris Bertoli
    Thursday, May 1041, 2012

    Python scripts are a terse computer program, Ruby scripts are a concise design document. Python is designed with terseness and professionalism in mind, Ruby is written with conciseness and developer happiness in mind.
    In Python, whitespace is part of the syntax so your program will look a certain way depending on your code, in Ruby whitespace is there if you want it, gone otherwise. You can spread your code out and it won’t affect the program in any way.

    For Hello World;

    print(“Hello World”)

    puts “Hello World”

    The brackets scream COMPUTER_PROGRAM so when confronted with that a lot of people will panic and then say they have no idea what it does. puts ” ” on the other hand is easy to read, while still being concise. I should probably point out that terse and concise are being used differently here, concise being simplistic (no flowery sentences) meets developer happiness (ease of reading), terseness being simplistic meets professionalism in the computing world (Think Microsoft ten years ago). One has lots of brackets and proper formatting, the other has much less “terminology” and leaves you to format as you please, provided it’s syntactically correct of course. Think of it like noise vs signal at the macro level and cryptic vs clear at the micro level.

    The websites for languages to the best of my knowledge will reflect the particular language design process, code of conduct and thought process for coding in it. Take VB.NET, verbose and made by a very large, very rich, very professional company. The website looks like it’s written by a marketer who gets paid a fortune but has no imagination and no experience with the language.

    Ruby websites (especially a few of the tutorial ones, Hackety-Hack for instance) look like they’ve been written by an artistic five year old in crayon for the sheer joy of doing so. Any language that is built around design and developer happiness is going to affect everything it’s associated with. It can’t not, to abuse the English language.

    The only immediate solution is to be happy and code in Ruby. =P

    A funny note, even the Wikipedia page for Ruby
    is full of colour and whitespace.

    • George
      Thursday, June 2805, 2012

      That’s an interesting perspective. To me, I get thrown off by all the colons and question marks and things in Ruby code, but I’m definitely more comfortable with computers I guess.

      That said, I don’t see “puts” as being particular obvious as a statement that means “display this text”…I think of “put” meaning “put in” as in, I’m going to put x in y. I find print clearer, but I completely recognize that it’s a bias from other programming languages

    • brian
      Friday, September 1435, 2012

      Uh… You do, of course, know that:

      print “hello world” # works just fine in python.

      And also has the benefit of using actual words instead of ‘puts’.

      Re TFA: All it means is that the Rails community is more superficial. That’s it.

      • airtonix
        Tuesday, October 127, 2013

        agreed, which also makes me nervous about a web application created by a (lol) “Ruby Designer”… I mean with back-end development, you should be focusing on system design, data flow, modularity and decoupling, abstraction.

        The last thing on a back end developers mind should be how pretty it is visually, that is the job of the front-end developer and the UI/x architect.

    • David Conrad
      Saturday, February 920, 2013

      Not only is

      print “Hello World”

      perfectly legal python (try it!),

      puts(“Hello World”)

      is perfectly legal ruby (again, try it!)

    • airtonix
      Tuesday, October 152, 2013

      if “puts” is your only example of how ruby is more like a natural language then i despair, because every time I look at ruby code:

      I think wtf is the colon doing before that word? what does it mean? (in english a colon after a word means that there is a list of related information

      When I see pipe character, I mentally think oh they are passing information into this new variable… but the subtle difference is that this is actually the beginning of a multi line lambda.

      Ruby may have tried to be a natural language, but it fails miserably, ends up being so littered with characters in places that are just plain confusing to grok.

  29. Mark Chapsis
    Wednesday, May 2307, 2012

    Python is for serious people. Serious people write plain html. Fuck “style”.

  30. cirillo
    Saturday, July 1411, 2012

    Our High Priest Van Rossum and his divine in dented language. Boring, like the other religions.

  31. Mushfiq
    Friday, August 335, 2012

    This is very personal opinion and you can find 100s applications that have good UI design and backend is python.

  32. saad
    Tuesday, August 745, 2012

    Loved your article, and I concur python is a beautiful language but it pales in comparison to ruby in design department. I love the creative aspect of web development and I will really look into the links provided by you, and hopefully create something beautiful in python.

  33. Raed
    Tuesday, September 1142, 2012

    Rails aims to simplify the creation of websites by performing some ‘magic’ at the background, such as AJAX calls.

    However, I am not really sure that the same is done by Python’s frameworks. Thus, Python’s developers would have to spend, not waste, more time to program what Rails provide and what Python lacks.

    Rails developers design beautiful interfaces while Python developers program the missing parts.

    I am not saying it is a bad thing. I feel like I have to know how the missing parts work, and maybe improve them.

  34. Stefan Fidanov
    Friday, September 2146, 2012

    I half agree with you. There are way too many ugly python sites and there are way less ugly ruby sites. However, I do not agree with your comparison for django and rails. To me the django site is much more beautiful and well organized then the rails one, and I have used both extensively. Also one other comparison is the http://www.ruby-lang.com and the http://www.python.org. Both sites are not beautiful, but the way I can access tutorial or documentation on the python site is more clear and simple.

    One example of good looking python web site: http://disqus.com/

  35. David Conrad
    Saturday, February 910, 2013

    Your reference to a “lightening talk” was in fact a “lightning talk”.

  36. Simon
    Wednesday, August 1417, 2013

    I’ve noticed this too. Very true, but don’t know why.

    • airtonix
      Tuesday, October 119, 2013

      So then how can you prove that it’s true?

  37. Chris Steve
    Thursday, February 2051, 2014

    I find the ruby ones ugly. i get in the world of startups that you have to follow suit and make things look hideous but thats fashion yeh. At least the python sites are well engineered and structured, the ruby examples you posted are just fancy bullshit marketing terms on a screen and in a years time will be out of date unlike the python ones which seem timeless imho.

    its in the eye of the beholder.

  38. True
    Thursday, February 2052, 2014

    Great article… and so true. I expect a large part of the python community is made up of the more technical folks, whose idea of design is a matplotlib chart.

  39. Noel
    Thursday, February 2043, 2014

    I tried learning Ruby once and realized that I could not remember the complicated syntax – can’t keep them in my head like C where there are very few to remember. Not so with Python, and the power that it wields without having to torture your brain to understand the basics. Ruby is superior? Even so (but that is debatable), the complexity that I have to go through is just not worth my time because I sure going to forget them anyway and have to start over again. Yeah, simple is better than complex in doing the same thing.

  40. Matheus
    Thursday, February 2044, 2014

    What did you think of the new python.org?

  41. Gunther Leenaert
    Tuesday, April 2915, 2014

    “What’s in a name?”

    Apparently, stigma leading to bad design. Snakes are ugly, jewels are pretty.

  42. railshater
    Wednesday, April 2245, 2015

    I rather prefer a simple factory that produces fast cars over a fancy factory that produces slow cars.

    Rails community is noisy. Once I watched a talk called ‘Snakes and Rubies’ where creators of Django and Rails would talk about good and bad of each other’s frameworks. I did not like the way rails creator talked so I choose to learn Django instead.

  43. nicorellius
    Saturday, March 530, 2016

    Cool article, buy super biased. I can easily find awesome designs for any framework, anytime, and likewise crappy ones for the same. And, to be fair, Django’s site is now awesome. And have you seen Django CMS? Beautiful. True, you wrote this when many sites on they web looked bad (in the last few years we’ve seen an explosion of slick sites), but that’s no excuse. Finally, we all know that backend and front are fully decoupled, so I’d say statistically it’s just as likely to find an ugly front, covering up a pretty back, as it is to find the opposite. I know part of your argument is that Python developers don’t care. Being one, I disagree… I can say that I always try design a sleek and attractive front.

  44. Patently Paul
    Monday, May 121, 2017

    Can you make an Update about this topic? Most python and ruby sites have changed.

    And when I’m already here, what do you think about flask?


Leave a Reply