Numbers That Go Up

A few years ago I was talking to Ying about my aspirations to one day develop my own game (Iä! Divunal! May its slumber soon be ended!).  I was telling her about its design — naïve student of interactive fiction that I was, I had decided that there would be two salient features: permanent death, and "no numbers anywhere".  Everything would be relayed to the player by way of descriptive phrases, because that was, like, more real, man.

Never one to pull any punches on my account, Ying told me she didn't think it would be any fun.  I asked her why she thought this game — which, if I could pull it off, would be artful, like a reading a novel that was written for you every day — would not be fun, whereas a grindy stat-monster like DragonRealms was fun. She said:
People like numbers that go up.
This is a phrase which I have now both said and heard in countless conversations with professional game designers.  At the time it struck me as insightful, but I didn't realize how insightful it was for many years.

Now, I am obsessed with the power of numbers that go up.  It's not just a trick for game designers.  It's a basic part of the human condition.  A power so great it can be used only for good, or evil.  A tool for positive social change.  A force which, every day, keeps little babies from dying.

You think that last bit was hyperbole, right?  Wrong.  Doctor Virginia Apgar developed the Apgar score, which is a way of rating how healthy a newborn baby is.  The development of the score itself, not any particular technique for improving the score, was responsible for drastically reducing infant mortality.  (I believe one of the largest drops in recorded history, but I can't find an online citation for that.)

Lest you think this had something to do with the culture around video games, she did this in 1952.

Many people have observed that there is also a dark side to this phenomenon.  In 1987, Alfie Kohn famously wrote an article that is now distributed with every copy of emacs which notes that giving people incentives gets them to focus on the incentive rather than the task; and enjoy the incentive more than the task.  In 2000, Joel Spolsky wrote "Incentive Pay Considered Harmful", which details the numerous problems with HR reviews and employee incentive pay.  Just this month, he expounded again in "How Hard Could It Be?", noting that when you pay people to optimize something, they will optimize it, whether that helps you or not.

I don't believe there's a contradiction here.  What these studies are observing is that, if you crudely design and crudely present an incentive, it will have crude effects.  There's an art and a science to designing incentives, and the people who write employee incentive plans (and incentive impact studies) are not really using interested in using incentives in the way that makes them effective: to make activities more fun.  The only people who really get this right are game designers.  Unfortunately, the insight that game designers have is rarely shared with other disciplines. Game studios make even software startups look tame by comparison, leaving their employees little time for professional development, or, you know, sleeping.  When their ideas are shared, they are frequently, almost implicitly dismissed — after all, it's "just a game".  The "serious" folks want measurable objectives, clearer research, not "fun".

But tell a "serious" cognitive scientist or a "businesslike" incentive plan designer to produce a scheme which will cause the user's brain to release large amounts of Dopamine on demand, and they're not likely to deliver anything useful.

I certainly don't have as much experience with this as I'd like, but I've made plenty of observations.  My personal hypothesis is that the key factor here is subtlety.  The apgar score is an arbitrary number.  It means nothing beyond what it means.  Your progress, or health in a game has no meaning beyond the game.  It's an obvious yardstick by which you can judge your progress, but it doesn't really matter.

Stack Overflow is, I think, a great example of this type of subtlety.  Your reputation is arbitrary, and there are lots of arbitrary little landmarks you can achieve.  "Badges", originally from City of Heroes, and also known as  "achievements" on Steam, are a great way to motivate users to stick around just a while longer.  "Oh, I'm done for the day, but I'm only 30 votes from civic duty.  Let me vote on a few more things."  Because the motivation is there, you stick around; but because it's subtle, it's not worth aggressively gaming the system (and thereby wrecking it).

You can see the flip side of that pretty quickly on similar sites that try to motivate participation based on money.  I can't tell how good Experts Exchange is, because it throws up roadblocks, to protect their precious "content" and make sure they can make money on it.  Those who I know who have tried it assure me that it is full of spam and fraud, largely because the incentive structure is all based around money.  The "score" doesn't represent progress or mark status, it is progress and it is status.  The point of Experts Exchange is to get money, and the questions are just there to provide you with a mechanism to do so.  The point of Stack Overflow is to provide good answers to questions, and the reputation score is just there to get a rough idea of who does that best.

I think that this principle can be applied in lots of places in everyday life.  To give you a hint of where I hope to apply it at Divmod, in Blendix: consider the feeling of getting a point in a game, and the feeling of checking off an item on a to-do list.  Compare beating a level to seeing a page full of "done" items.  Just imagine that page full of ticked-off checkmarks.  Makes you want to write a to-do list, doesn't it?

ScribeFire Rocks

I promised I would say so, and so I am.  I might have given it away in the lead, but:

ScribeFire Rocks.

ScribeFire especially rocks now, if you are a Python blogger, because you can do this:

    def proto_init(self, string):
        """
        String received in the 'init' state.
        """
        self._currentBox = AmpBox()
        return self.proto_key(string)

I'm indenting code!  On a blogger-hosted blog!  And the code stays indented!!!

The elaborate process that I used to do that?
  1. alt-tab to emacs
  2. copy
  3. alt-tab to scribefire
  4. paste
And... I'm done!  (Well, okay, not really.  I did have to manually insert the tag to change the font face.  But still!  I didn't have to type    three million times.)

When I'm writing, I don't like to focus on markup.  I want WYSIWYG editing.  I want to drag screenshots off of my desktop and drop them into my text without worrying about how they get uploaded, and I want to see how they cause my text to re-flow.  I want bulleted lists and italics and boldface and I don't want to worry about closing tags.


ScribeFire gives me all of these things when I'm writing, with pretty much no hassle.

Thank you, ScribeFire.  Stay awesome.

Wow! Java (Swing) doesn't have to look crappy!

I have a long love-hate (well, mostly hate-hate) relationship with Java.  I used to be a Swing hacker, in my callow youth, and the whole experience left me feeling pretty bad about Java GUI programming.

Over the years, I've watched as Java has gotten better and better native look and feel on Mac and Windows, but every time I've started a Java application on Linux, it's time to party like it's 1995; the default "Metal" look is reminiscent of a souped-up Motif, and clashes terribly with my desktop.

Totally by accident, I discovered this gem on stackoverflow...

This page explains how the work with Look&Feels: http://java.sun.com/docs/books/tutorial/uiswing/lookandfeel/plaf.html

You can do it commandline:

java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel MyApp
... and my jaw dropped.  Really?  It's that easy?  I tried it with my favorite Java GUI application, Tiled - and here it is, not looking like crap:



As with every native look and feel, it's not quite right.  The behavior of 'tab' is off in a few places, there are tons of things that should be keyboard-focusable but aren't... but it's a huge improvement.

I still have no idea why this isn't just the default behavior on Linux — although I'm sure I have a few fun inexplicable segfaults to look forward to — but I'm certainly going to enjoy using Java applications quite a bit more now.

Programming (And Markup) Languages I've Learned In Order

Catching up with some blog backlog, I saw this post from James Tauber and it looked memeish.  I think my list is interesting:
  • HyperTalk
  • SuperTalk
  • AppleScript
  • CSH
  • Bash
  • HTML
  • POVRay
  • C++
  • Emacs Lisp
  • VRML
  • Java
  • Perl
  • Scheme
  • C
  • x86 assembler
  • Python
  • Squeak Smalltalk
  • Common Lisp
  • Ruby
  • JavaScript
  • ActionScript 3
I would consider myself proficient in the boldface languages, and use them all frequently.

Languages I intend to learn in my copious spare time:
  • C#
  • Erlang
  • Haskell

After These Messages, We'll Be Right Back

Do you have an account on Blendix?  Did you know that you can find out all kinds of interesting stuff about me on my Blendix page?  Or that, if you sign up, you can get notified on your dashboard when I do something new?

I have no problem with self-promotion, but I tend to do it indirectly, in pursuit of making some point that I hope my audience will find interesting rather than just coming out and saying it.  But this weekend I discovered that not even my own sister knew we'd launched this thing — even though I mentioned it when it launched back in January!  I guess I'm not being clear enough!

So here's clear for you.  TRY BLENDIX! :-).

We have a bunch of new development happening on Blendix now, but it's been useful for a while already.  It's useful if your friends use it, since, like other services, your friends can update their list of feeds, and you'll be notified of new things.  On Blendix, though, if your friends don't have accounts, or are lazy, and don't update their pages, you can create your own version of them with more information that is useful to you.

Now, back to our regularly scheduled programming.