A little anti-anti-hype

by Steve Yegge

Note, Jan 10th 2005 -- I removed this post after receiving enough angry letters about it to make me feel bad for having written it. In the 10 days or so since then, I've received angry letters telling me that I'm rewriting history by turning it off, and so on. It's a lose-lose situation for me. At the risk of becoming the most hated person in blogdom, I'm turning it back on. Please make sure to read the follow-up, "Bambi Meets Godzilla", before sending me your angry flames. Thanks. -steve

Everyone's buzzing about Bruce Eckel's "anti-hype" article. I hope the irony isn't lost on him.

The thrust of Eckel's article appears to be that hyper-enthusiasm is diminishing the Ruby camp's message, and it's spoiling a good gentleman's argument. Those darn hyper-enthusiasts are focusing relentlessly on how cool Ruby is and how much they like it, when what's really needed here is a balanced, objective, neutral, moderated, standards-based, point-by-point, academic discussion of Python vs. Ruby, in which we can all make well-informed decisions, and may the best language win, as long as it's Python.

Python folks never really did understand marketing.

I'm surprised we need a history lesson here; we've all been through this so many times before. But let's look once again at the basics of language adoption.

First, inferior languages and technologies are just as likely to win. Maybe even more likely, since it takes less time to get them right. Java beat Smalltalk; C++ beat Objective-C; Perl beat Python; VHS beat Beta; the list goes on. Technologies, especially programming languages, do not win on merit. They win on marketing. Begging for fair, unbiased debate is going to get your language left in the dust.

You can market a language by pumping money into a hype machine, the way Sun and IBM did with Java, or Borland did back with Turbo Pascal. It's pretty effective, but prohibitively expensive for most. More commonly, languages are marketed by a small group of influential writers, and the word-of-mouth hyping extends heirarchically down into the workplace, where a bunch of downtrodden programmers wishing they were having more fun stage a coup and start using a new "forbidden" language on the job. Before long, hiring managers start looking for this new language on resumes, which drives book sales, and the reactor suddenly goes supercritical.

Perl's a good example: how did it beat Python? They were around at more or less the same time. Perl might predate Python by a few years, but not enough for it to matter much. Perl captured roughly ten times as many users as Python, and has kept that lead for a decade. How? Perl's success is the result of Larry Wall's brilliant marketing, combined with the backing of a strong publisher in O'Reilly.

"Programming Perl" was a landmark language book: it was chatty, it made you feel welcome, it was funny, and you felt as if Perl had been around forever when you read it; you were just looking at the latest incarnation. Double marketing points there: Perl was hyped as a trustworthy, mature brand name (like Barnes and Noble showing up overnight and claiming they'd been around since 1897 or whatever), combined with that feeling of being new and special. Larry continued his campaigning for years. Perl's ugly deficiencies and confusing complexities were marketed as charming quirks. Perl surrounded you with slogans, jargon, hip stories, big personalities, and most of all, fun. Perl was marketed as fun.

What about Python? Is Python hip, funny, and fun? Not really. The community is serious, earnest, mature, and professional, but they're about as fun as a bunch of tax collectors.

One could write a fat book about this, but just to give you the flavor, consider what happens when you type "python" at a command prompt. It fires up a little interactive interpreter. At the prompt, if you type "quit", it responds with 'Use Ctrl-D (i.e. EOF) to exit.'

Well that's not very nice, is it? It *knows* you want to quit, even going so far as to call you an EOF, whatever that means. (Yes, you and I both know, but is it really the right thing to show to a beginner? Hardly.) Why didn't it just quit, then?

If you were to bring this issue up on a Python newsgroup at any time in the past 10 years, someone would tersely have instructed you to go look at the FAQ. Or they'd have explained that having 'quit' quit would be a strict violation of the semantics of the REPL, which has no a priori knowledge of English, and as Ctrl-D is universally recognized as the EOF char on most terminal emulators, excepting of course broken ones on win32 and VAX platforms, and the interactive shell's clean design allows the interpreter to treat the input as if it were coming from a file or similar stream, blah Blah BLAH, ergo, the current behavior is correct, quod erat demonstrandum.

Never mind that it's patently obvious that "quit" should just quit the frigging shell, semantics be damned. They don't care a whit, because they're focused on the "right thing" at the expense of the user experience. There's an old adage for this; it's called "missing the forest for the trees."

Of course it's just as difficult to figure out how to exit the Perl shell, if not more so. But if you were to bring it up on a mailing list or newsgroup, some nice Perl person would come along, eager to show you how to add one more snippet of job security to your lineup of Perl folklore, and would spend an hour explaining how cool it is that you can quit the shell with a single keystroke, one that works in other Unix commands as well, and then maybe show you how to hack the Perl binary so that "quit" also exits the shell for you. The difference is huge: both shells have that crappy misfeature, but Python folks will bore you with justifications while the Perl folks excite you with marketing.

Pedantry: it's just how things work in the Python world. The status quo is always correct by definition. If you don't like something, you are incorrect. If you want to suggest a change, put in a PEP, Python's equivalent of Java's equally glacial JSR process. The Python FAQ goes to great lengths to rationalize a bunch of broken language features. They're obviously broken if they're frequently asked questions, but rather than 'fessing up and saying "we're planning on fixing this", they rationalize that the rest of the world just isn't thinking about the problem correctly. Every once in a while some broken feature is actually fixed (e.g. lexical scoping), and they say they changed it because people were "confused". Note that Python is never to blame.

In contrast, Matz is possibly Ruby's harshest critic; his presentation "How Ruby Sucks" exposes so many problems with his language that it made my blood run a bit cold. But let's face it: all languages have problems. I much prefer the Ruby crowd's honesty to Python's blaming, hedging and overt rationalization.

As for features, Perl had a very different philosophy from Python: Larry would add in just about any feature anyone asked for. Over time, the Perl language has evolved from a mere kitchen sink into a vast landfill of flotsam and jetsam from other languages. But they never told anyone: "Sorry, you can't do that in Perl." That would have been bad for marketing.

Today, sure, Perl's ugly; it's got generations of cruft, and they've admitted defeat by turning their focus to Perl 6, a complete rewrite. If Perl had started off with a foundation as clean as Ruby's, it wouldn't have had to mutate so horribly to accommodate all its marketing promises, and it'd still be a strong contender today. But now it's finally running out of steam. Larry's magical marketing vapor is wearing off, and people are realizing that Perl's useless toys (references, contexts, typeglobs, ties, etc.) were only fun back when Perl was the fastest way to get things done. In retrospect, the fun part was getting the job done and showing your friends your cool software; only half of Perl's wacky features were helping with that.

So now we have a void. Perl's running out of steam for having too many features; Java's running out of steam for being too bureaucratic. Both are widely beginning to be perceived as offering too much resistance to getting cool software built. This void will be filled by... you guessed it: marketing. Pretty soon everyone (including hiring managers) will see which way the wind is blowing, and one of Malcolm Gladwell's tipping points will happen.

We're in the middle of this tipping-point situation right now. In fact it may have already tipped, with Ruby headed to become the winner, a programming-language force as prominent on resumes and bookshelves as Java is today. This was the entire point of Bruce Tate's book. You can choose to quibble over the details, as Eckel has done, or you can go figure out which language you think is going to be the winner, and get behind marketing it, rather than complaining that other language enthusiasts aren't being fair.

Could Python be the next mega-language? Maybe. It's a pretty good language (not that this really matters much). To succeed, they'd have to get their act together today. Not in a year, or a few months, but today -- and they'd have to realize they're behind already. Ruby's a fine language, sure, but now it has a killer app. Rails has been a huge driving and rallying force behind Ruby adoption. The battleground is the web framework space, and Python's screwing it up badly. There are at least five major Python frameworks that claim to be competing with Rails: Pylons, Django, TurboGears, Zope, and Subway. That's at least three (maybe four) too many. From a marketing perspective, it doesn't actually matter which one is the best, as long as the Python community gets behind one of them and starts hyping it exclusively. If they don't, each one will get 20% of the developers, and none will be able to keep pace with the innovation in Rails.

The current battle may be over web frameworks, but the war is broader than that. Python will have to get serious about marketing, which means finding some influential writers to crank out some hype books in a hurry. Needless to say, they also have to abandon their anti-hype position, or it's a lost cause. Sorry, Bruce. Academic discussions won't get you a million new users. You need faith-based arguments. People have to watch you having fun, and envy you.

My guess is that the Python and Java loyalists will once again miss the forest for the trees. They'll debate my points one by one, and declare victory when they've proven beyond a doubt that I'm mistaken: that marketing doesn't really matter. Or they'll say "gosh, it's not really a war; there's room for all of us", and they'll continue to wonder why the bookshelves at Barnes are filling up with Ruby books.

I won't be paying much attention though, 'cuz Ruby is soooo cool. Did I mention that "quit" exits the shell in Ruby? It does, and so does Ctrl-D. Ruby's da bomb. And Rails? Seriously, you don't know what you're missing. It's awesome. Ruby's dad could totally beat up Python's dad. Check out Why's Poignant Guide if you don't b'lieve me. Ruby's WAY fun -- it's like the only language I want to use these days. It's so easy to learn, too. Not that I'm hyping it or anything. You just can't fake being cool.


Dan Kohn
2005-12-26 21:14:32
Amusing piece. I was pleased the first time I needed to quit out of irb that my default guess, "exit, also quit.
Jeff C
2005-12-26 22:02:16
Great article. I first read about thinking of Ruby hitting a tipping point from David Geary at http://jroller.com/page/dgeary?entry=tipping_rails and it's absolutely true. Sure, I loved Python back in the day because it saved me from Perl but eventually I had to set it aside to focus on Java to pay the bills (it's tough to keep up with the mass of Java libraries and frameworks!).

I'm jumping on the Ruby wagon because it's fun and more importantly with all the hype I anticipate that there will be an increasing number of jobs looking for skills in Ruby/Rails; I'll be able to earn a living working with a dynamic language just as I've wanted to do since my first days as a Java developer sneaking JavaScript and Python on the side. That's what matters to me, I guess I'm just pragmatic.

2005-12-27 01:07:42
I don't know. There are at least a few Rubyists out there (myself included) who don't see the war between Python and Ruby. I may or may not be a 'hyper-enthusiast' but I am still struggling to see why Bruce Eckel's post has taken so much heat.

Maybe I'm missing the reason why everyone is so offended and so quick to defend Ruby when it really wasn't assaulted, but to me the real issue here is only that Ruby is finally coming of age. First they ignore you... then they laugh at you... then they fight you... and you know the rest.

The core of this community will love Ruby because it makes them happy, not because it's the 'cool' thing to do. As for the 'hyper-enthusiast' bandwagon, well, it doesn't hurt to have a few cheerleaders around here and there. ;)

Make Love, not War. Even with snakes. Maybe especially with snakes.

2005-12-27 03:31:55
Lies, Damn lies, - and now the article above!
First make a false statement of Pythoneers ignoring Marketing then back it up by a skewed slant on language history.
I hope Steve Yegge doesn't exemplify the Ruby afficianado.
Programming is about a way to solve problems. Keep that as your focus and with Python you can enjoy being productive.
If you want to find out about the Python user community then come on over, and lurk on comp.lang.python They are a most helpful, witty, and decent community of folks.

As for Rails being a great killer ap. Compared to what? Have you tried Django? Have you compared other frameworks based on Python?
Or Maybe English isn't your first language. Python has full internationalisation support now. Unlike some other languages.

If you employ programmers or aspire to that position then you should know that program maintenance and documentation are essential parts of a programs lifecycle. In python ease of maintenance and docstrings are part of the language and its culture. Maybe That is what Steve doesn't like about Python and Pythoneers, we try and encourage good practice, often through example, rather than an 'if it gives a correct result then its OK' type of mentality.
Time and again on comp.lang.python you will find people giving multiple answers to questions from newbies, and those multiple answers being reviewed and criticised, often by their original poster. Now thats a way for people to learn!

So, come on over and try Python - we don't bite.

- Pad.

Austin Ziegler
2005-12-27 06:55:33
One of the links (about floating point) you gave to the Python community’s "pedantry" in Python isn’t quite fair, as when the question comes up for Ruby, the answers are often similarly pedantic and people are pointed to What Every Computer Scientist Should Know About Floating Point or similar papers.
James Britt
2005-12-27 15:57:21
"I don't know. There are at least a few Rubyists out there (myself included) who don't see the war between Python and Ruby. "

Same here. And I believe that if one goes through the ruby-talk archives, looking for the oft-asked "Python or Ruby"? question, most of the replies will suggest trying both and picking the one that makes you most happy. No war.

"I may or may not be a 'hyper-enthusiast' but I am still struggling to see why Bruce Eckel's post has taken so much heat."

Bruce is only getting heat from a small group of vocal people, who do not speak for Rubyists as a whole (of course; no one does). Much heat, little light.

People need faith-based arguments? Is that to be the new Ruby sales pitch? Faith-based programming? Perhaps we need a programming Taliban, too.

Add me to those who say, "Gosh, it's not really a war; there's room for all of us."

And count me as an infidel in these dopey Crusades.

Steve Yegge
2005-12-27 22:33:05
Gregory - I certainly can't speak for anyone but myself, but I felt Eckel's article failed miserably at practicing what he's preaching.

He says he tries to investigate his ideas thoroughly, then turns around and says "Ruby is to Perl what C++ is to C". He clearly hasn't bothered to do more than glance at Ruby. If he knew more about Ruby, then a statement like this could be construed as malicious FUD-mongering, trying to tie Ruby to Perl and C++ (both awful languages) in the public mind. But as he clearly doesn't know anything about Ruby, it's merely an investigative failure on his part.

He says: 'That kind of thing: "I like this, I don't like that," which is fine but not compelling.' -- and then he goes on to say he prefers Python's lists, detests begin/end statements, and so on. In other words, virtually all his arguments are preference- and/or faith-based.

His first sentence in the last paragraph is directly at odds with his claim that Fowler came from a Smalltalk background. He can't seem to make up his mind where all the Rubyists are coming from, and makes self-contradictory claims about it.

He trashes Tate for not doing his homework, then asks the world to present him a feature-by-feature comparison of Python and Ruby -- you can find such a thing on WikiWikiWeb, if you care to look, but he didn't.

The whole article is subtly inflammatory -- why is he even bothering talking about Ruby at all? He clearly doesn't like it. Several commenters have pointed out quite rightly that it might be better for people to focus on their work instead of bashing on other languages. I can assure you that I wouldn't have written anything about Python (which I actually like a lot, and have used far more than I've used Ruby) if it weren't for Eckel's (IMO) rather slanderous assault on Ruby and the Java, Perl, Smalltalk, etc. enthusiasts who are happily migrating to it.

Other people may, of course, have other issues with the article, but that was my take on it, after about the 10th reading.

And of course I overgeneralized a LOT about Python and other languages, since it's virtually impossible to write anything short, memorable and occasionally funny without oversimplifying and making a bunch of people mad. So it goes. In reality, of course, lots of Python enthusiasts are nice, fun, and funny, and are nothing at all like the "lies, damn lies, etc. ..." commenter. And I know a few fun tax collectors, too.

Putting trees aside and looking at the forest, I stand firmly behind my overall point: marketing matters, language adoption matters (from the perspective of getting libraries and frameworks built, if nothing else), and I don't see a compelling marketing message emerging from the Python camp just yet -- especially not around Web frameworks, but also around plain old fun. I think Perl showed us pretty clearly that fun beats elegance for most programmers out there. With Ruby, I see both; with Python, all I see is the elegance. That, and people like Mr. Eckel complaining about the Ruby migration.

I'll tell you this: I *did* learn all the languages Bruce Tate talks about, and more that he didn't. I went to tremendous lengths for 3 years to figure out which language would be the next big thing. My take: I think Ruby's going to be absolutely huge. It's a great language, it's no more flawed than any other great language, and it has by far the best marketing out there. I think its current trajectory makes it clear that Ruby will eventually have Java-class (or better) tools, documentation, libraries, and the other trappings of a world-class development platform.

If Python can pull that off too, *great*. But I think they'll need at least a few hundred thousand more users. It seems self-evident that unless they do something differently than what they've done (whatever that is) for the past decade, those users won't materialize.

In any case, barring any more assaults from the Python camp, I'm looking forward to talking about how much I like Ruby from now on. And if I'm labeled a hyper-enthusiast, I'll take it!

Dave Lopez
2005-12-28 00:27:43
I prefer Ruby over Python, and I agree marketing is important, but it's ridiculous to say that the Python crowd is a bunch of buttoned-down tax collectors.

Oh..and Ruby will have its place in web development, but let's get some perspective here. It's numbers will always be miniscule compared to Java, .NET, or even Javascript

2005-12-28 06:17:07
Seems every language has its share of unavoidable quirks, some embraced more than others. The hype paradigm changes over time, as does perceived programmer pain. The last major pain was escape from the Microsoft hegemony. Java was hyped to fit the bill. Nowadaze, it's (back to?) what's most "fun."

On a not-so-related note, is there some reason why the home pages for these dynamic languages have to be so durned ugly?

Owen Densmore
2005-12-28 08:06:37
OK, agreed, nifty languages. But one tough question: what GUI tools are available.

Wait! I mean one that is really, really cross platform and universal. And, no, TK doesn't count.

BTW: Do you think Groovy has a chance? Or possibly JRuby?


Steve Yegge
2005-12-28 11:31:32
Dave: it's all relative. First paragraph of the Python Cookbook: "As a well-known Perl hacker once said, Python's prettier, but Perl is more fun. I agree with him that Python does have a strong (as in well-defined) aesthetic, while Perl has more of a sense of humor." I didn't mind poking fun at them with my tax-collector comment, because they don't seem to mind poking fun at folks I respect (like Martin Fowler, Dave Thomas and Bruce Tate), calling them hyper-enthusiasts in a rather pejorative way. When it comes down to it, I know Bruce was having fun when he wrote his article, and I had fun writing mine. Fun!

Here's some perspective for you: http://www.tiobe.com/tpci.htm -- Python's bigger than JavaScript and C#. (Comparing a language to .NET isn't apples-to-apples; Ruby will obviously run on .NET someday). PHP and Perl are within spitting distance of Java and C++. According to Tim O'Reilly's blog, Ruby book sales are up over 1000%. Aren't you excited by this? I am. Hyper-excited, even, because (like Bruce Eckel, although the details may differ) I don't like impositions on my thought process, and clean dynamic languages really seem preferable to Java and C++ to me. If Ruby and/or Python (two of my favorites) became bigger than Java, just think how much faster programming will move forward.

Steve Yegge
2005-12-28 11:46:07
Owen, that's a great question. Worth a full blog in response. But for now, I think JVM languages have a ton of potential. I even experimented with several of them earlier in the year (http://www.cabochon.com/~stevey/sokoban/), although the work was interrupted and I haven't finished it.

I believe whichever JVM language gets the best marketing will probably win, as long as the quality is above some minimum level. Groovy's getting the most marketing, but last I checked, its quality was far below the minimum pain threshold. That, of course, can change.

I never posted the results of my JVM evaluation, but I felt that:
- Jython was the winner, barely, even though it's only Python 2.1. It's just a rock-solid offering: succinct, elegant, well-documented, and stable. I've used it extensively (150k lines or more) in my game (http://www.cabochon.com)
- Rhino (JavaScript) was a very, very close runner-up, and was better in some ways. I would strongly recommend it.
- NetRexx was surprisingly professional, clean, and stable, and definitely raises the bar for packaging and distributing JVM languages.
- PNuts was my personal favorite for some reason. It had all these really cool integration points with the JVM, making for a super-succinct implementation. I loved it.
- Nice was really cool and amazingly powerful. Given that Java will never give up static typing, I think Sun should try to evolve the language in the direction of Nice.
- Scheme and Ruby are my favorite languages of the lot, but both Kawa and JRuby were pretty raw, and wound up being disappointing. I have high hopes for both of them, long-term.
- Groovy was a pretty poor experience, and didn't look like a very nice language to me, either. That just goes to show you how important marketing is -- the quality really has little to do with it.

Nice Post
2005-12-28 13:44:23
Great post. Like Austin mentioned, Ruby does some of this stuff too. Like 3/4==0 in ruby as well as python. Also the :blah vs "blah" (symbols vs. strings) question appears to be quite common and the explanations I've seen (see links below) are unsatisfactory. It's clearly a ruby wart. But like you said, every language has its warts. I think ruby's warts aren't quite as severe as python's, but still significant and should be addressed.
Shanti Braford
2005-12-28 14:50:31
Spot on post, mate. Hilarious and true.

Whenever I meet a diehard holdout who won't even *try* Rails, it's like talking to a brick wall.

All I really have to say to these people is... try Rails for a few days. Build an app with a decent data model (say, 4-6 tables), and talk to me when you're through.

I built this site:

...in a long weekeend or two using Rails. This included learning Ruby, Rails, everything.

After building a sample app in Rails, if you still don't like the language / framework, and want to go back to EJB, Python, or whatever, great. But at least we can have an intelligent conversation on the subject then.

2005-12-28 20:32:31
Steve, I'm just suggesting not putting fuel on a fire most Rubyists never intended to start in the first place.

There is no need for a crusade or jihad here, on either side of the fence.
This post just seems to be painfully biased with the expressed intent of bashing Python. That's just not cool.

Pythonistas are not all tax collectors.

2005-12-29 00:08:53
I agree about the exit/quit misfeature in Python, and I personally just dislike the force for tabs (cant copy paste stuff, like i can in irb, to make it work).
However, and this needs be said:

a) Python BEATS Perl. As does Ruby beat Perl. Period.
b) There are many cases where there ARE bindings available for python but not for Ruby, Ogre3d and Blender come to my mind, which the ruby pendants are really incomplete and lacking. The Python bindings may not be perfect but they are available.
c) I am unhappy about the hype in Rails, because it is RUBY which is the great thing, not Rails. Well, Rails may be great too :) But its based on Ruby, and it was actively hyped. Hypes are never good, marketing gains you a broader user base, but it also attracts more users that are not as... hmm nice. There is a big difference in #ruby-lang, and #rubyonrails, which I must say, the #ruby-lang channel is BETTER.

Think about this :)

2005-12-29 09:17:44
Java's running out of steam? What a bold claim. Why do people compare Ruby to Java? That's like comparing a Vespa in a crowded city street to a BMW.

If you think Ruby to Java is a valid and non-laughable comparison, you need to re-evaluate what you understand of computing. Putting the two in the same bucket is a joke.

As for Ruby vs. Python, the answer is a no brainer, it's Python for simplicity, clarity, stability, community, and momentum.

I understand Ruby has a lot of blog posts extolling its coolness though. Finally, a language to succeed Perl's hype!

Speaker to Computers
2005-12-29 16:24:25
I like a lot of things about Python, but significant whitespace is driving me nuts. Yes, it's pretty. Yes, it keeps One-True-Brace-Style wars from breaking out, but it is a serious PITA when you try posting a snippet of code somewhere like a blog entry - you can't just cut & paste it into a script because the whitespace the blog put in to line it up pretty breaks all the indentation. Ugh!

And the pedantry angle is dead on - when you ask how to do a switch statement, you get a tiresome explanation of how easy it is do emulate with if then elif. Yeah, I can use elif, but it's a lot less awkward to just have switch.

And the quit thing in the interpreter - they already have special case code to print the 'Use EOF' message, what would be so bad about doing what the user obviously wants instead of lecturing them?

All that, plus how wicked convenient Rails is turning out to be for the kinds of tasks I do lately, is convincing me to ditch Python.

Alex V
2005-12-29 16:45:33
So much hype every where about all of these new and exciting ways to do the same thing. Rails is definitely at the top of the hype curve now. Remember about 2 years ago, j2ee and the like were the tout of the industry, including JBoss? Now think 10 years ago, in the land of PowerBuilder, VB and other wysiwig tools for "rapid" development. What happened to them all? Destroyed by Microsoft. If MS comes up with something new to handle the web 2.0 paradigm, we may be repeting history and many of these tools will eventually go the way of PowerBuilder and Pascal. So, yes, I really think it will all come down to a matter of developer marketshare. But the industry is moving towards open source and standards, MS' achilles heel. Which way it will go is anybody's guess, but I'll tell you one thing: next year, when the macs start running on intel chips I will finally be jumping ship. And I suspect many many MS developers will too.
2006-01-27 04:04:21
In defense of Python (and as the Devil's advocate, as I'm an avowed PERL user who'd just as soon shell script anyway) it's hardly practical to continue to change a language ad nauseum to accomodate what the new wave of users thinks intuitive. An experienced programmer should expect his language to exhibit some consistancy. Where do you draw the line between, "That's a good idea, we'll roll it out in the next release," and "We've always done it that way, you'll just have to adjust"?
Daniel Berger
2006-02-03 21:47:08
Excellent post. I thoroughly enjoyed this one, as well as most of the other posts you've got on your website. Keep up the good work. :)