Dear Python, something has been bothering me for a while. Its just that, well, ummm…you’re kind of ugly. Look, you are beautiful inside: Python is a beautiful language and the Python community is open and welcoming. But Python resources are ugly enough to affect usability and adoption. This is damaging to the community.

Documentation and tutorials are often difficult to navigate. Products built with Python don’t put any thought into design. Blogging software written in Python helps create more ugly blogs about Python. Pythonistas just don’t care about presentation.

Let’s compare the usability and design of some different Python and Ruby sites. Ruby is a good reference point since it occupies a similar niche in the programming language ecosystem and is roughly the same age.

Python Interactive TutorialRuby Interactive Tutorial

Above are online interactive tutorials for learning Python vs. Ruby. isn’t ugly exactly, it’s just that Try Ruby is so much more polished. It’s obvious that a professional designer had a hand in Try Ruby, whereas the design of was thrown together by a programmer who later slapped a few ads on it and called it done. Which tutorial would you rather use?

Django web frameworkRuby on Rails web framework

Here are the homepages for Django and Ruby on Rails, popular web frameworks. Django’s homepage is poorly organized. The entire page is just a mess of links with no clear emphasis on anything. In contrast, the Ruby on Rails homepage does a good job of introducing people to Rails and pointing them to different areas of the site.

Adrian Holovaty's HomepageDavid Heinemeier Hansson's Homepage

Homepage of Django co-creator Adrian Holovaty vs. Ruby on Rails creator David Heinemeier Hansson. Both are well organized, but it is obvious at a glance who places importance on professional design and who doesn’t.

Google App Engine hostingHeroku cloud hosting

Cloud hosting: Google App Engine vs. Heroku. Once again the Ruby side is sexier.

Blogofile blogging softwareJekyll blogging software

Tinkerer Python blogging softwareOctopress Ruby blogging software

Python blogging software vs Ruby blogging software. The Python blog designs are uninspiring and unpolished, while the Ruby designs are striking. And who doesn’t love octopodes?

eGenix Python consultingNorbauerinc ruby consulting

Tummy Python consultingLittlelines Ruby consulting

Some top Google search results for “python consulting” vs. “ruby consulting”. The Python results look painfully outdated.

Maybe Ruby has an advantage because it is more tightly focused on web programming? It seems likely that consultants for web apps would have nicer web pages than consultants working on, say, scientific problems. To eliminate any unfair advantage, below are some top Google search results for “django consulting” vs. “ruby on rails consulting”.

Fez Django consultingScrum and agile rails consulting

It doesn’t matter. Python is still the ugly duckling.

This wasn’t a scientific comparison – somebody could try show the opposite conclusion by cherry-picking a different set of sites – but I think the screenshots I used are pretty representative. I also think that most people who have spent a little bit of time in both communities will agree that Python sites are ugly compared to Ruby sites.

Why does this happen?

Either Pythonistas aren’t pairing with designers as often as Rubyists, Pythonistas have less design talent, or Pythonistas simply don’t care enough about design to spend the time to do it right. I’m not really sure which is the case.

Does it matter?

Yes! This stuff matters.

It’s not just that Python sites are ugly (even though they are). It’s that the uglyness makes sites hard to navigate and hard to use. It’s that nobody is inspired by uglyness and nobody wants to use ugly products when there are better options. Nobody wants to hire someone who builds ugly web apps. It is unprofessional and sloppy to be so ugly.

This damages the Python community.

How can we fix it?

If you are a Python coder (or any type of coder who doesn’t fully grok design), spend some time learning basic design principles. Try Design for Hackers, Bootstrapping Design, or Step by Step UI Design. [Edit: Also check out this lightening talk on attracting designers to your project.] Then make friends with designers and know when to call them.