[ Content | Sidebar ]

sid meier’s alpha centauri

July 13th, 2009

The Vintage Game Club’s sixth game was Sid Meier’s Alpha Centauri. About which I don’t have much to say, but I’m in the habit of blogging here when I finish a game, so:

It’s a Civilization-style game. Some of my friends praised it quite a bit, but I’m not seeing that: it’s in the lineage of a series that I enjoy and respect quite a bit, but no more than that for me. I’d heard claims that its narrative set it apart from other games in the genre; there wasn’t enough narrative to make a difference to me. I’d also heard claims that the differences between factions set it apart from other games in the genre; I enjoyed not having to worry about unit types when playing as the Gaians, but nonetheless: not enough to make a difference to me.

Still, it’s a genre that I like, and it’s well executed once I got used to a user interface from a decade ago. In fact my basic problem with the game and the genre isn’t that I don’t like it: on the contrary, it’s a genre that I get far too addicted to, that I find myself staying up far too late playing. Though even that isn’t entirely due to my liking the gameplay so much as that the gameplay doesn’t have natural stopping points: there’s never (well, rarely) a feeling that you’ve accomplished something and that you want to take a break now to savor it, instead you always feel the pull of “click this, upgrade that, move the other”.

Fortunately, I rather enjoy that constant clicking, so I’m happy enough to keep playing such games indefinitely. And I really like the idea of building, both at a city and a nation level. (It’s probably just luck, but the world maps that I was given in my games were well suited to pleasant growth with natural chokepoints for battles.)

But, when I got bored with exceedingly-easy difficulty settings, I was happy enough to give the game a rest rather than continue on at harder difficulties. At least part of what’s going on there is hidden information that plays out over long time periods. I don’t particularly enjoy hidden information in general (e.g. my least favorite Advance Wars levels were those with Fog of War), but here it’s particularly bad in that, if you make a mistake in your production strategies, you generally don’t find out about it until an hour later and long after you can do anything about it. And even when you do find that you’ve made a mistake, it’s not clear exactly what you should have done differently.

So I was happy enough to stop playing after three weeks. But I made it through (and enjoyed) three playthroughs of the game during those three weeks; who knows, maybe if I had different constraints on my time, I’d still be playing it and be happily delving into the strategy.

explaining my choices

July 6th, 2009

I periodically encounter discussions of why people play games (most recently in A Life Well Wasted), and I’ve been getting more and more allergic to such talk. The main reason is that it almost always comes in the form of claims that “we play games to have fun” (with a strong implication that anybody who thinks otherwise must be deluded), a polemic that I disagree with rather strongly.

As I’ve been thinking about it more, though, I’ve realized that there’s more to my unease than a philosophical distate: it turns out that I don’t have a very good answer myself to the question of why I play games! Do I play games for fun? For beauty? To learn something? For some other reason? It’s actually not at all clear to me.

And what makes this especially weird is that, even though I can’t explain why I play games, I am quite confident that I’m not playing games just out of inertia. Over the last few years, I’ve been getting more and more conscious in my choices of how I spend my time. And I’ve chosen over and over again to continue to make time to play games, even though I have enough time pressure that it would be very easy for me to stop doing so and fill up that time with other activities that I would also find very rewarding.

I’m not even doing this out of a sort of inertia once removed, e.g. because games are an entry (a few entries, actually) in my GTD projects list. GTD is a way of structuring my life to increase the chance that I’ll be able to do what I most want to do at any given moment, not something that I follow indefinitely on autopilot. Every week, I have to ask myself “is playing games really part of what I want to be doing?” And, so far, the answer has always come back “yes”. (With the occasional caveat.)

Part of the answer, I think, comes from my recent Christopher Alexander reading: he’s gotten me using the word “soul” in public, and asking myself how I feel at a fundamental level about various choices. With that in mind, it may be that the question of “why do I do X?” (for broad questions X) is becoming, to a larger and larger extent, irrelevant to me: on the one hand, perhaps I’m getting better at telling which broad choices feel right to me, and then using techniques like GTD to have me spend as much time as possible actually doing that.

But, though I’m sure there’s some truth to that, it’s not all of the answer. In particular, it’s also true that both of the influences I’ve mentioned here, GTD and Alexander, have analytical components that I’m not actively using. GTD has its horizons of focus (which I should consider taking more seriously at some point); Alexander has his characteristics of living structures. So it’s entirely possible that, if I were to apply similar techniques here, I’d be able to figure out better what makes those parts of my brain tick.

Indeed, it’s possible that I’m being somewhat disengenous by writing this post—I have, in fact, been known to spend time thinking in public about various choices that I’m making. But I’m not being completely disingenuous: I really don’t have a great explanation for why I play games (or program, or read), but at the same time that lack of an explanation isn’t giving me the slightest pause that I might be spending my time in ways that aren’t good for me.

Who knows. I suppose the most likely explanation for my lack of worries in those areas is that I’m turning into a fundamentalist, or indeed have long since done so…

vgc game 7: majora’s mask

July 3rd, 2009

I’m pleased to say that the Vintage Game club has chosen The Legend of Zelda: Majora’s Mask as its seventh game. The discussion will probably begin on Friday, June 10th; it’s a wonderful game, and one that I suspect has quite a lot to teach me; please come join us if you have any interest in playing the most notable black sheep in the Zelda series.

the perils of particle physics

July 1st, 2009

If you are considering building an experimental apparatus filled with liquid hydrogen, you might want to keep the following incident in mind:

Deep within the bubble chamber, the inner beryllium window had shattered along a microscopic imperfection in its surface. Splintering outward, the inner window fragments blasted open the outer beryllium window accompanied by the pressure wave of the expanding hydrogen. Within half a second, the laboratory floor was bathed with some 400 liters of turbulent, burning hydrogen. Ignited when the outer window failed, the fire burned wherever the hydrogen and air were mixed. Seconds later, a fierce explosion ripped through the laboratory, strong enough to blow the 31,000 square foot laboratory roof 10 feet into the air. As it crashed back down, roof material cascaded onto the floor and began to burn, raining down hot tar. Now other areas erupted in flames as the soft soldered joints melted in the tubes that linked large quantities of liquid petroleum gas, as well as other combustibles. (Galison, Image & Logic, pp. 356–357.)

Fortunately, it was shortly after 3am, so not many people were around, and only one person died. The most dramatic survival:

One graduate student had managed to crawl into a space between the bubble chamber electronics room and the south wall. Unable to escape further because of his injuries, he remained there until the fire seemed to be closing in. Radioing an ambulance to the east exit, the deputy fire chief, an engineer, a cryogenics expert, and some firemen hacked their way to him and brought him out on a stretcher. (p. 359)

And the end of one eyewitness report:

“I did not consider 80 PSI as extremely serious at that instant since all the peripheral systems are capable of easily handling such a pressure. At this point I turned to check the pressure in the Bubble Chamber to make sure that it was not rising excessively. I never did see the Bubble Chamber pressure gauge.” (p. 356)

a taxonomy of boundary objects

June 26th, 2009

The original paper on boundary objects gives a partial taxonomy of boundary objects; given my earlier thought experiment, I thought I’d see if I could find programming analogues to any parts of their classification.

Star and Griesemer’s first type of boundary objects are Repositories:

These are ordered ‘piles’ of objects which are indexed in a standardized fashion. Repositories are built to deal with problems of heterogeneity caused by differences in unit of analysis. An example of a repository is a library or museum. It has the advantage of modularity. People from different worlds can use or borrow from the ‘pile’ for their own purposes without having directly to negotiate differences in purpose.

At first, I thought this type was kind of banal, corresponding perhaps to collection objects in software, but now I think it’s more interesting than that. Reading their description more closely, I don’t get a collection object vibe: collections in the programs that I write usually contain a quite uniform group of objects, and those objects are used for one or two specific purposes; the above, however, emphasizes heterogeneity and differences in purpose.

That last sentence, in particular, reminds me of mashups; if you combine that with standardized indexing, I’m getting a very strong RESTful vibe from this. In a RESTful application, names are key but internal structure can vary from location to location, and outsiders can use standard tools to access the data that the application exposes and borrow it for their ends.

Next in their taxonomy is the Ideal Type:

This is an object such as a diagram, atlas or other description which in fact does not accurately describe the details of any one locality or thing. It is abstracted from all domains, and may be fairly vague. However, it is adaptable to a local site precisely because it is fairly vague; it serves as a means of communicating and cooperating symbolically—a ‘good enough’ road map for all parties. An example of an ideal type is the species. This is a concept which in fact described no specimen, which incorporated both concrete and theoretical data and which served as a means of communicating across both worlds. Ideal types arise with differences in degree of abstraction. They result in the deletion of local contingencies from the common object and have the advantage of adaptability.

My first reaction here was to try to make an analogy with abstract types; indeed, they use the word “abstracted” in their second sentence, and I can easily see their species example being used as an example in an OO textbook. The only thing that gives me some amount of pause when proposing this analogy is their use of it as a talisman communication tool between multiple parties, many of which may turn out to want to know more about the details of the objects in question.

In contrast, in my programming experience, if I have a concrete subclass of an abstract class, it’s more typical for almost all users to only care about the abstraction, while perhaps only one user cares about the concrete class. Though, rereading what they say, maybe their species example suggests that the correct analogy to the Ideal Type is to (any sort of) class, with the non-ideal objects being instances, rather than subclasses? Either way, though, I get the feel that I’m missing something in the way that I was missing something with my earlier analogy between a Repository and a collection: is there another analogy waiting to be found here that’s a bit grubbier in the way that the RESTful example is?

Third up are Coincident Boundaries:

These are common objects which have the same boundaries but different internal contents. They arise in the presence of different means of aggregating data and when work is distributed over a large-scale geographic area. The result is that work in different sites and with different perspectives can be conducted autonomously while cooperating parties share a common referent. The advantage is the resolution of different goals. An example of coincident boundaries is the creation of the state of California itself as a boundary object for workers at the museum. The maps of California created by the amateur collectors and the conservationists resembled traditional roadmaps familiar to us all, and emphasized campsites, trails and places to collect. The maps created by the professional biologists, however, shared the same outline of the state (with the same geo-political boundaries), but were filled in with a highly abstract, ecologically-based series of shaded areas representing ‘life zones’, an ecological concept.

This one was hard for me to grapple with. (And I’m not the only one; that link, incidentally, gives references to extensions of this taxonomy.) Even in the physical world, it’s a bit hard for me to tell examples of this: is the concept really restricted to large-scale geographic areas? That seems a bit limiting.

The paper in question discusses the Museum of Vertebrate Zoology at the University of California, Berkeley; is it a boundary object? I tend to think so: quoting from the definition on page 393,

This is an analytic concept of those scientific objects which both inhabit several intersecting social worlds (see the list of examples in the previous section) and satisfy the informational requirements of each of them. Boundary objects are objects which are both plastic enough to adapt to local needs and the constraints of the several parties employing them, yet robust enough to maintain a common identity across sites. They are weakly structured in common use, and become strongly structured in individual-site use. These objects may be abstract or concrete. They have different meanings in different social worlds but their structure is common enough to more than one world to make them recognizable, a means of translation.

And certainly the MVZ is robust enough to maintain a common identity, but it means something different to a postdoc working there, to somebody who has spent her career there, to a visiting researcher, to a university administrator, to an outside funder, to a janitor. (Indeed, much of the paper is devoted to showing such differences in meanings.) Given that, I would treat the MVZ as a Coincident Boundary: though not spread over a large-scale geographic area, it’s still a place which means different but related things to different people.

Which, to be honest, doesn’t help me directly with finding programming analogies; maybe a function body in the input to a compiler that means different things to the lexer, the parser, the optimizers, the code generator, the debug info generator? Actually, I think maybe the more important analogy is a bit more conceptual and not internal to programming: maybe we could think of a domain object as an example of a Coincident Boundary that means one thing to a programmer, another thing to a database administrator, a third thing to an system architect, a fourth thing to an XP Customer, a fifth thing to a marketer, a sixth thing to an end user. I’m not completely sold on that, but I do think that domain objects are boundary objects of some sort, and they’re a better fit to Coincident Boundaries than anything else in Star and Griesemer’s taxonomy.

The last entry in their taxonomy is Standardized Forms:

These are boundary objects devised as methods of common communication across dispersed work groups. Because the natural history work took place at highly distributed sites by a number of different people, standardized methods were essential, as discussed above. In the case of the amateur collectors, they were provided with a form to fill out when they obtained an animal, standardized in the information it collected. The results of this type of boundary object are standardized indexes and what Latour would call ‘immutable mobiles’ (objects which can be transported over a long distance and convey unchanging information). The advantages of such objects are that local uncertainties (for instance, in the collecting of animal species) are deleted.

Class interfaces (whether concrete or abstract) are examples here, as are generalizations such as duck types or the sorts of dependencies that C++ templates impose on their parameter types. For example, templates don’t care about the details of an iterator as long as it exposes its increment operator under the name ++, its equality operator under the name ==, and so forth.

Network protocols are another example: indeed, what is better than TCP/IP at ensuring that data “can be transported over a long distance and convey unchanging information”? Stick it on the wire in a Standardized Form, and it will come back out the other end. We can use our RESTful example from above in this context as well: if you want disparate clients to all be able to talk to each other, it helps a lot if everybody speaks in terms of GET, POST, PUT, and DELETE.

And, as we did with the last example of the taxonomy, we can step away from the code a bit. An acceptance test is a Standardized Form: if the Customer and the engineers want to agree on what it means to complete that task, it sure helps if they can point to a Standardized Form for specifying that completion, and an acceptance test that both sides can read (and run!) is an excellent form for that agreement to take, for deleting uncertainties.

Interesting stuff. I’m curious what other classes of boundary objects people have come up with, and I should probably spend more time thinking about examples outside of the strict domain of code. And I really like the lens it gives on the messiness, the grunge, the lack of sterility of the RESTful approach: if you pin down enough so that people can talk to each other while leaving enough of the details undetermined so that different groups can use the entity in question for significantly different ends, unexpected synergies can flourish.

boundary objects and solid principles

June 23rd, 2009

The following bit from Brian Marick’s summary of boundary objects caught my eye:

Ivermectin is a popular drug for deworming animals. Onchocerciasis (river blindness) is a chronic illness that’s a particular burden in sub-Saharan Africa. Since river blindness is caused by a worm susceptible to ivermectin, the manufacturer (Merck) desired to donate ivermectin to fight the disease. That presented some problems. For example, it would not be in Merck’s interest if the bulk recipients responsible for redistributing ivermectin to people instead resold it into the lucrative veterinary market. On the other hand, it would also not be in Merck’s interest to tell the recipients (including national governments that are markets for other Merck drugs) that they are not competent or trustworthy enough to receive ivermectin. Merck needed organizational distance.

The solution was for Merck to donate the drug to a non-profit non-governmental organization. An independent expert committee would make the decision about which applicants (both governments and non-governmental organizations) would then receive the drug. This committee is a boundary object. To Merck, it provides distance: Merck donates the drug, reaps the benefits in good will and tax deductions, but is insulated from political repercussions. To the bulk recipients, the committee is the dispassionate judge of applications, end-point of an application process, and advisor during implementation.

This situation and its solution immediately reminded me of the notion that “All problems in computer science can be solved by another level of indirection.” But it’s not just that broad aphorism: the example reminds me of Bob Martin’s SOLID principles in particular. (The first five principles listed here; see also this Hanselminutes show on the topic.) I don’t think all his principles apply to the drug example, but more than one does.

The most obvious example is the Single Responsibility Principle. Merck is a big company that does lots of things; to handle this problem, they created a separate organization that has only one job, to deal with dispensing ivermectin.

I’ve squinted at the the Open Closed Principle a few times, and I can’t see how it applies to this situation – the types of modification that the OCP is talking about don’t seem so relevant here.

The Liskov Substitution Principle also doesn’t seem particularly relevant. It’s about base classes and derived classes; the only example of that that I see here is that you could think of the abstract concept of an applicant as a base class, with concrete applicants as derived classes, but that’s a pretty weak LSP situation: the base class is so abstract, the derived classes are so concrete.

Skipping ahead to D, the base and derived classes are a much better fit for the Dependency Inversion Principle. In fact, the second paragraph quoted above is all about that principle: rather than having the concrete company Merck deal with concrete recipients of donations of the drug, we introduce multiple abstractions. From Merck’s point of view, the NGO is something of an abstraction: as long as Merck knows enough about the NGO to trust that they’ll do a reasonable job dispensing the drug, it doesn’t have to worry about the details of the process. Similarly, from the applicants’ point of view, the NGO is a relatively abstract organization compared to Merck. (Or is it? Am I conflating this with the Single Responsibility Principle? Certainly there are fewer opportunities for linkages between the applicants and the NGO than between the applicants and Merck as a whole.) From the NGO’s point of view, the very notion of “applicant” is an abstraction placed on real people, real organizations.

Going back to I, the Interface Segregation Principle also seems relevant, though admittedly my justification for it here seems very similar to my justification to the Single Responsibility Principle: the NGO is exactly the interface to Merck for clients who want free ivermectin.

Does this analogy hold up in other examples of boundary objects? Can we relate the Open Closed Principle and the Liskov Substitution Principle to examples outside of programming? Can we run our analogy in the other direction, finding properties of boundary objects that suggest principles of good programming?

random links: june 21, 2009

June 21st, 2009

margaret robertson on (no) story

June 14th, 2009

One of the most interesting of the talks I attended at this year’s GDC was Margeret Robertson’ talk Stop Wasting My Time and Your Money: Why Your Game Doesn’t Need a Story to be a Hit. Unfortunately, I didn’t take any notes while listening to it, so my summary at the time was exceedingly sparse. But it keeps on coming into my head at odd moments, so I figure I’ll give another shot at providing notes, almost three months later.

Fortunately, she’s posted the slides for her talk. So go open them up it another window, and I’ll see if I, by using them as a jog to my memory, can add some modest value to them.

She begins by talking about why traditional big stories in games are problematic. For one thing, they’re extremely expensive. For another thing, the notion that people follow the story through is false: most people playing through games don’t make it to the end. For example, Half-Life 2: Episode 2 is a short game (averaging less than seven hours to complete), yet less than half of its players made it through to the end. (At least I think so – why do so many of the graphs on that page have the 0 mark floating above the bottom?) Given this, perhaps there are ways to get more bang for your development buck than traditional big stories?

Which isn’t to say that she doesn’t like stories. In fact, she lists some benefits that stories provide: Motivation, Entertainment, Communication, Metaphor. Though, she says, games don’t need to get their emotion from stories. I wish I could remember more of what was going on with that slide and the five that follow it; I suspect that the Paul Klee painting that follows is part of that sequence, showing something that gives rise to emotions without any story to be found. I could be wrong, though.

Anyways, back to the good side of stories: fortunately, stories can deliver those benefits while being tiny, instead of horribly expensive! She gives some examples from outside the genre: an art installation that consists only of a crack (and whose story lingers, is indeed perhaps strengthened, after it is filled in); and the Hemingway six-word short story “For sale: baby shoes, never worn”.

And then she goes into game examples of small stories. Which is where she totally won me over, by bringing up Majora’s Mask: the main story in that game is all well and good, but what still haunts me in that game is the same story that haunts Margaret Robertson, namely the love story of Kafei and Anju. (About which, two side notes: 1) Margaret Robertson returned to the game in an Offworld column. 2) The next VGC game will be a Zelda; discussion will start Friday-ish, so if you want company while giving Majora’s Mask another look, or even a first look, come and convince other people to vote for it!)

She then talks about where you can tell a story: aside from plain old exposition, you can do so in the set-up, externally, subtextually, in the environment, and in gameplay. And you can tell it through the HUD, art, animation, sound, text, voice-over, and/or video. (Giving examples of each, many of which are much more subtle than her Majora’s Mask example.) That last list is, I think, supposed to be ordered from least obviously story-related to most; she also has a slide with an arrow going the other direction, and I wish I could remember what that was about; maybe they’re most effective in the opposite order, or something?

Then, a gameplay challenge: try to, as economically as possible:

  • Communicate that time has passed since you were last in this world.
  • Communicate that you are now famous.
  • Communicate that you are the good guys.
  • Communicate that your army is low on resources.
  • Communicate that your army is dogged and determined.
  • Communicate gameplay hints.

Her answer: you can do it with one letter (or one texture), namely the orange lambda symbols from Half-Life 2. Which is a big win over elaborate, expensive cut scenes.

And finally, a reminder that we’re talking about games, not films. What people care about in games, in descending order:

  • Where I am.
  • What I can do.
  • What I look like.
  • Who I am.

Leaving us with the recommendation: “Can you imagine it in a film? Dump it. Easier on [game developers], better for the player.”


So: that’s her talk. Which was awesome, but that alone isn’t enough for me to want to write up notes on it after so much time has passed. The reason why I’m doing so is that I’ve finished two games since GDC: Chrono Trigger and Flower. The former has a big, traditional video game story; I didn’t care about that story at all. What I did care about was a child in one of the houses saying that she hated her father; I was in pain when I read that, I was hugely relieved when that finally got resolved hours later, and it’s a perfect example of one of her small-scale stories. And the latter game doesn’t have any sort of traditional story at all: far from being a problem, the game got me thinking as much as any other game has in recent memory, among other things trying to figure out what sort of story I should read into it. And that’s just the games I’ve finished—the game I’ve played most this year is Rock Band 2, which has a very bare-bones story indeed. (But, I will add, a very effective one: in particular, for a certain type of player, it provides an extremely important form of motivation and structuring for your play.)

Which isn’t to say that I’m against stories, either: for example, I quite enjoyed Mass Effect, and am very much looking forward to its sequel. Though even that example gives me pause: I remember enjoying its story at the time, but its story hasn’t particularly stuck with me in retrospect.

In all seriousness, it’s possible that this talk will be a turning point in what I see in games. I simply don’t know if I would have seen Chrono Trigger and Flower in the same way had I not attended this talk; I also don’t know what other storylets I’ve failed to appreciate in other games I’ve played over the years. (Which doesn’t mean that the stories didn’t have an effect, just that I wasn’t conscious of the construction of their effect.) Maybe those two games are exceptional (actually, I’m quite sure both are, though not only for this reason), but maybe there’s a wealth of stories waiting for me if I just open my eyes a bit.

change of focus

June 2nd, 2009

Over the last few weeks, I’ve been finding enough unusual projects imposing on my time that I think I’m going to have to shuffle my priorities, albeit temporarily. I’ve been wanting to do more programming at home than normal recently: aside from improving the memory project, I want to spend a bit of time getting back into functional programming. And then there’s conference preparation work on top of that.

Being a good GTD devotee (or a good lean/agile devotee), this means that something has to go. Fortunately, I’m actually pretty well on top of things right now—in particular, my Next Action list is about as short as I can ever remember its being—so I shouldn’t have to prune too much; but I have to prune something. And I’m certainly not going to take a break from learning Japanese—in fact, one of the unintended consequences of the memory project has been to make there be pretty serious consequences if I take even a couple of days off from my study. (One could make a sensible case that I am being a total idiot in subscribing to ChineseClass101 right now, however. Though I certainly don’t intend to treat that as seriously as I’m treating learning Japanese.)

So I think my only choice is to cut down on my video game playing for the time being. Don’t get me wrong: I’m not going to stop completely, you’ll still find me every Thursday evening at the VGHVI play nights, and I’ll keep up with VGC activities. I imagine I’ll do some playing and blogging outside of that, too, but for those of you who read this blog for game-related content, don’t be surprised if there are relatively slim pickings here for a while.

But don’t unsubscribe, either! In particular, my conference activities won’t continue forever, so by the fall I should be back to normal. Heck, I might even be back to normal after Agile 2009—I certainly want to find time in early September to play a certain game.

come play games with us!

May 30th, 2009

I normally stay away from online video game play, both because of a lack of time and because of the bad things I’ve heard about strangers’ behavior on Xbox Live. For the last six months, though, I’ve been meeting up every Thursday thursday to play games with people from the Video Games and Human Values Initiative, and I’ve been having a great time!

I encourage any of my blog readers to join us. We meet every Thursday at 6:30 p.m. Pacific / 9:30 p.m. Eastern time; send a friends request to “a VGHVI” to join in. We try to balance playing a mixture of games (and game styles) with returning to favorites fairly frequently; you can see a list of games we’ve played at the bottom of this VGHVI wiki page, but we’ve played Burnout Paradise and Left 4 Dead several times; Castle Crashers, Rock Band 2, and Carcasonne a couple of times each (with another round of Rock Band 2 on tap next); and a couple other games one time each; we’re open to further suggestions as well.

So far we’ve largely been doing this on Xbox Live, though apparently a Lord of the Rings Online group just started up as well. (I think they’re on Sundays, but I’m not sure.) Please join us if you’re looking for fun games and pleasant company!

update on learning japanese and memorization

May 29th, 2009

It’s been ages since I blogged about learning Japanese, so I figured I’d give y’all an update. I finished the textbook I was using last November, which raised the question of what to do next. I have some manga around and even a couple of collections of essays/stories, but I wasn’t sure I’d be up for them just yet. So, on a friend’s suggestion, I subscribed to a series of children’s books! The friend in question is an American with a Japanese wife, and they subscribed to the books for their kids; based on his description, they sounded delightful, and I’m certainly not too proud to read books targeted at two-year-olds.

Actually, I subscribed to several of the company’s series: I was pretty sure that the lowest level they offered was too basic for me, but the next five levels (going from 2-year-old through 6-year-old) all seemed plausible. So I subscribed to all five, planning to unsubscribe from the lower levels as I got more confident. In fact, I subscribed to them several months before I finished the textbook, so I had a backlog built up before I started reading any of them.

So I started working through my backlog of the 2-to-4-year-old fiction level, こどものとも年少版. (Which means something like “child’s friend early years edition”?) It was surprisingly hard, in some ways harder for me than later levels: it uses an awful lot of onomatopoeia (which Japanese uses much more than English in general), and I’m fairly sure that some of the speech forms are somewhat nonstandard parents-talking-to-kids forms rather than what I’d learned in grammar books. Fortunately, the books were totally charming, and while I wouldn’t want all books to be as repetitive as those ones are (a lot of doing the same thing on different pages with different numbers or colors or animals or whatever), it really helped me to have the same sentence structure and half of the same words to cling to while figuring out the rest of what’s on the page. And I’ve gotten a lot better at reading books in that series over the intervening months; the onomatopoeia words are even starting to stick.

Once I made it through my backlog of books at that level, I started on the next level: ちいさなこどものとも (little science’s friend?), nonfiction for 3-5 year olds. This was a great level for me: the sentences didn’t have the word usage quirks that previous level had, and the sentences were a bit more interesting while still not requiring me to look up an overwhelming number of words.

About a month ago, I made it through my backlog of those (I’d been reading one every weekend), and moved up to the next level. It’s called こどものとも年中向き (child’s friend targeted at intermediate years?), and is fiction for 4-5 year olds. And I’m enjoying the transition: the books are a bit longer than previous volumes (28 pages instead of 24 with more words to a page), but my practice from previous levels is paying off, as is my memorization practice, so they’re not taking too long. I’ve only read three books from that level so far, but they’re really quite varied: one was a regular story that confused my a lot until I realized that some of the word endings were in regional dialect; one consisted of scenes from a train station that might have fit better in the science series; and one was a counting/animal story that, honestly, probably would have fit better at an earlier level.

I’ve subscribed to but not started reading two more levels after that (one nonfiction, one fiction, both going through age 6); for now, I’m staying subscribed to the earlier levels, but I imagine at some point I’ll unsubcribe to those and add a subscription to something still more advanced. Also, for what it’s worth, all of the levels I’m subscribed to are kana-only, so my kanji practice isn’t paying off here yet. Though it’s paying off in other areas: for example, it’s kind of weird looking over at the spines of my Japanese go books and realizing that I actually recognize most of the characters I see there, even the non-go-specific ones.

I’m still listening to JapanesePod101, of course (incidentally, they just added a Chinese sister site, if you’re interested in learning Mandarin), and I’m spending a lot of time (almost certainly an unproductive proportion of time) memorizing vocabulary in general and Kanji in particular. In particular, I basically haven’t skipped a day using my memory program since it went live almost 10 months ago. (I usually use it during my lunch break at work.)

Which has been an interesting experience: in particular, at first, I ignored some of Wozniak’s suggestions, and I’ve learned that I was wrong to do so. To be clear, I don’t claim to be following any of his algorithms at all—I’m sticking with the algorithm I outlined here—but there are recommendations he makes that would apply to my algorithm that I ignored. In particular, he suggests a floor of 1.3 for the exponent; initially, I figured I’d put in a floor of 1.0 instead. But, after a few months, that turned out not to work at all: it was taking more and more time each day to review stuff because, once an item got tagged as “most difficult” (not too hard with kanji), I’d review it every single day for a month, and that clogged up fast. So I bumped the floor up to 1.2, and things got better; I then figured I should stop reinventing the wheel and bumped it up to 1.3, and I’m glad I did.

I’m also doing a better job now of following his suggestion of breaking up items into small chunks to memorize. Before, I would list all of the readings of a Kanji as one item: e.g. for the question 問 I would list the answer “もん、と(い)question, problem; と(う)matter, care about”. But now I break that up into three pairs: Q: 問, A: もん question, problem; Q: 問い, A: とい question, problem; Q: 問う, A: とう matter, care about. That has several advantages: individual items are smaller (as Wozniak recommends), I naturally focus more on the readings that are harder for me to remember, and I’m testing myself on something that actually matters when reading instead of an abstract skill. (I.e. I will encounter 問う when reading, but I will never be in a situation where it matters if I can list all the endings that you can stick after the Kanji 問.) In particular, the previous method wasn’t good at training me to tell whether, say, 上る was the reading のぼる or あがる. (It’s the former, the latter is written 上がる.)

Also, I made another Japanese-specific change while breaking up the kanji into multiple questions: I started writing the On readings (derived from Chinese) in katakana and the Kun (native Japanese) readings in hiragana. (So the answer to 問 is really モン.) It’s actually usually pretty obvious whether a reading is On or Kun, so that’s not important from a memorization point of view, but it meant that every day I was exposed to hundreds of katakana characters, so my katakana recognition speed has increased dramatically. (Incidentally, if any of you are learning Japanese, a recommendation: learn how to use your keyboard input method. Under Linux, you can convert a word to katakana by hitting F7; under OSX, by hitting control-k.)

Another surprise: I’d sort of assumed that some sort of geometric series magic would mean that I would be able to keep adding items to the database without increasing the amount of time I need to spend reviewing each day. Which, if you think about it for a minute, isn’t the case at all: e.g. if all items are at exponent 2 and I never make a mistake, then every day I need to review all the items I added yesterday, all the items added 2 days ago, all the items added 4 days ago, all the items added 8 days ago, all the items added 16 days ago, etc., and the growth here is unbounded. (Or rather, is bounded only by my lifespan!) I don’t think this is a big problem, but it might be; it does suggest that if I have too many items with small exponents then I’m in trouble. I hope that that problem will naturally ease: there’s a limit to the number of Kanji I have to memorize (I’m almost halfway through the official common usage Kanji list), and as I start reading more, I’ll get exposed to vocabulary more frequently in other contexts, which should manifest itself by the vocabulary seeming easier from the program’s point of view. We’ll see how it goes; if it gets too bad, I’ll cut down on the forced memorization and spend more of my time just reading and not worrying much about words I don’t know.

I had plans to quickly spiff up this application and make it multiuser, but that didn’t happen: basically, it became useable shockingly quickly, and I really didn’t have much of an impetus to improve it past that stage. It’s amazing what I’ve managed to leave out: for example, I assumed that I would have to implement a search functionality early on. But part of the basic Rails CRUD functionality is a URL that lists all the items, and combining that with browser search still works acceptably for search even though I’ve got over 3000 memory items listed. Or I assumed that I would have to secure it (and probably naturally add multiuser functionality as part of that) to get it useable while at work or travelling, but ssh tunnelling to an unsecure deployment was working fine for me until I got my new iPod and wanted to be able to use the program from the iPod’s web browser.

That’s changing now: aside from the iPod issue, I’ve recently gotten a bit frustrated with some UI elements, Miranda has shown some curiosity in using the program, and I just finished reading the paper version of the third edition of the Rails book. So now I’m pretty excited to start up my tinkering again! And in fact I started that last weekend (I continue to be impressed at how easy it is to write functional tests in Rails, incidentally), and I plan to continue with that on future weekends until the program looks/works a lot better. So: Jim and Praveen, I apologize for the delays, I’ll have a multiuser version available soon if you’re still interested! And anybody else who is interested, let me know; I’ll announce it here when it’s ready for use by people other than myself.

converted blog to utf-8

May 26th, 2009

I just tried to write a blog post containing some Unicode characters (I was blogging about 日本語 learning), and found that WordPress helpfully converted those characters to question marks. After digging around, I ran into this web page describing the problem (see also this thread): basically, if you created your database in a pre-2.1.3 WP, then your database has remained in Latin-1 all these years. Oops.

I tried a few workarounds, including blowing away the database and restoring from the WP export format (including a detour through editing a php.ini file to allow uploads larger than 2MB); I still kind of think that might be the right approach, since I’m now worried about what further problems might be lurking, but the restore seemed like it was taking too long so I gave up and killed it. Ultimately, what I did was take my mysqldump backup, replace the occurrences of CHARSET=latin1 with CHARSET=utf8, and reimport it. This probably doesn’t work in general – see this post for some subtleties – but I’m hoping it worked for me. (In particular, I doubt there are too many places where I’d used non-ASCII Latin-1 characters.)

I think things are working fine now, but please let me know if you notice anything weird…

random links: may 26, 2009

May 26th, 2009

routinization, inscription, and facts

May 25th, 2009

I can’t say I’ve internalized (routinized? inscribed?) Latour’s Laboratory Life yet, but in the mean time I present you with three quotes on routinization, inscription, and facts:

To counter these catastrophic possibilities, efforts are made to routinise component actions either through technicians’ training or by automation. Once a string of operations has been routinised, one can look at the figures obtained and quietly forget that immunology, atomic physics, statistics, and electronics actually made this figure possible. Once the data sheet has been taken to the office for discussion, one can forget the several weeks of work by technicians and the hundreds of dollars which have gone into its production. After the paper which incorporates these figures has been written, and the main result of the paper has been embodied in some new inscription device, it is easy to forget that the construction of the paper depended on material factors. The bench space will be forgotten, and the existence of laboratories will fade from consideration. Instead, “ideas,” “theories,” and “reasons” will take their place. Inscription devices thus appear to be valued on the basis of the extent to which they facilitate a swift transition from craft work to ideas. The material setting both makes possible the phenomena and is required to be easily forgotten. Without the material environment of the laboratory none of the objects could be said to exist, and yet the material environment very rarely receives mention. It is this paradox, which is an essential feature of science, that we shall now consider in more detail. (p. 69)

The production of a paper depends critically on various processes of writing and reading which can be summarised as literary inscription. The function of literary inscription is the successful persuasion of readers, but the readers are only fully convinced when all sources of persuasion seem to have disappeared. In other words, the various operations of writing and reading which sustain an argument are seen by participants to be largely irrelevant to “facts,” which emerge solely by virtue of these same operations. There is, then, an essential congruence between a “fact” and the successful operation of various processes of literary inscription. A text or statement can thus be read as “containing” or “being about a fact” when readers are sufficiently convinced that there is no debate about it and the processes of literary inscription are forgotten. Conversely, one way of undercutting the “facticity” of a statement is by drawing attention to the (mere) processes of literary inscription which make the fact possible. (p. 76)

A fact only becomes such when it loses all temporal qualifications and becomes incorporated into a large body of knowledge drawn by others. Consequently, there is an essential difficulty associated with writing the history of a fact: it has, by definition, lost all historical reference. (p. 106)

Can we profit from focusing on objects/processes that “facilitate a swift transition from craft work to ideas”? I spent a few pleasant hours this afternoon doing some Rails programming; that framework shines because of the small amount of craft work necessarily to see a manifestation of your ideas. Does a software framework count as an “inscription device”? Does a programming language? Does a compiler, an interpreter? If not, is there some generalization of that concept that we can use here?

Agile processes value a swift transition between the programmer’s craft work and the Customer’s ideas. (A transition in both directions, I should add.) What are the inscription devices here? Ironically, one of the key mechanisms that agile uses to speed this transition is to remove certain inscription devices, or at least inscriptions, in favor of people talking directly to each other.

Can we relate tests to inscriptions and inscription devices? Test runs can certainly lead to thousands, millions of inscriptions over the course of a day; most of those inscriptions are internal, in that the software is noting that an assertion passed, but I label them as inscriptions nonetheless. They’re a very good form of persuasion; if you’re on a project where test runs act as a reliable safety net, then your worry level decreases, you can treat the software’s behavior as a “fact”, and spend time in idea land. Until, of course, a test failure (or, much worse, a failure that your tests didn’t catch) undercuts your software’s facticity.

I’ve been pretty obsessed with A3 reports for the last few months, which are certainly a form of inscription. And one of the strengths of the process is the extent to which the A3 report doesn’t serve as a source of persuasion, the extent to which the “sources of persuasion seem to have disappeared”: if the process is doing well, it’s a summary of facts to which all participants agree. Or have the sources of persuasion disappeared? Perhaps better to say they’ve been distilled down to a trace, as with a scientific paper; I don’t want to underestimate the importance of that trace.

I don’t suppose I can relate this to video games somehow? One issue that I struggle with, especially in games with a large variety of techniques to reach a goal, is how to internalize the various gameplay options that are available to me. Most of the time, I end up leaning on a few standard ways of progressing through a game’s levels; I suspect my experience would be richer if I had a broader tapestry of “facts” to choose from in the form of live tactical (or, better yet, strategic) options. What can games do to help me reach this state? What inscriptions can they present me with to ease this journey? How can I modify my own play styles to reach this state?

christopher alexander on our birthright

May 17th, 2009

The third volume of The Nature of Order, while very good, didn’t have the same impact on me as the earlier volumes did. Having said that, this bit from the conclusion is giving me something to think about:

And in all this that I observe, when I talk to politicians, to townspeople, to developers, when I watch the reaction in the newspapers, when I observe the studied (and to me frightening) neutrality of the journalist preparing to write his story, the most frightening thing of all is the loss that people have of their own feeling.

They no longer know what is inside them, they no longer know what they do know. That is the birthright I refer to, that is the birthright which is being lost.

The birthright being lost is not only the beautiful Earth, the lovely buildings people made in ancient times, the possibility of beauty and living structure all around. The birthright I speak of is something far more terrible; it is the fact that people have become inured to ugliness, that they accept the ravages of developers without even knowing that anything is wrong. In short, it is their own minds they have lost, the core, that core of them, from which judgment can be made, the inner knowledge of what it is to be a person, the knowledge of right and wrong, of beautiful and ugliness, of life and deadness.

And since this inner voice is lost, stilled, muffled, there is no possibility—or hardly any possibility—that they can cry out, “Oh stop this ugliness, stop this deadness which floods like a tide over the land.” They cannot do that successfully, too often they cannot even cry out, or let the cry be heard, because the source of such a cry has almost been stilled in them.

(A Vision of a Living World, pp. 681–682)

flower

May 3rd, 2009

The fifth level of Flower is the most problematic by far. At the end of the fourth level, you get a pretty strong indication that matters have taken a turn for the worse, with some sort of black energy running along power cables that have glowing red lights; even so, I was completely unprepared for the shock that you get when you touch one of the dark towers in the fifth level.

What to make of those towers? My first reaction was to read their combination of dark body, glowing red eye substitutes, and the attack when you come near as a sign of malevolence; given their nature as power transmission structures and the largely pastoral nature of prior levels, I read them as probably some sort of “nature good, technology bad” commentary. Which disappointed me, because I’d really liked the game so far, and I didn’t want my enjoyment to be spoiled by that sort of simplistic commentary.

The next aspect of the level to puzzle me: when you neutralize a tower, it goes white. At first, I read this as your having killed the malevolent entity that the tower had become, with the white color representing its bones. That didn’t feel quite right either, though. Every since I started to read The Nature of Order, I’ve been asking whether or not structures feel alive; those white neutralized towers didn’t feel alive, they felt sterile. And while skeletons of dead animals aren’t alive in a traditional sense, I do think that they qualify as living structures in Alexander’s sense: they’ve formed through living processes, you can feel those processes still within them, they still speak to your soul. Not so with those towers.

So: the dark towers with glowing red eyes weren’t good, but the sterile white towers that are left after you’ve neutralized them aren’t good, either. And, indeed, a naive color symbolism doesn’t fit well with the rest of the game: you’ve seen lots of red before in the form of flowers, and have had a quite positive association with it. And as to light and dark, the immediately preceding level was a sort of evening / early night level, with pools of light and glowing spots contrasting with a general surrounding darkness (or at least dimness); far from feeling threatening, that level was refreshing, welcoming, nourishing of one’s soul. (With, I think, a dose of a wabi sabi aesthetic.)

So I don’t support a reading that either black or white is bad in the context of the game. Though I am willing to support a reading that extremes are bad, that purity is bad: the darks and lights aren’t as extreme in the fourth level as they are in the fifth level. (Or are they? Some of those glowing specks in the fourth level are pretty bright.)

Which got me thinking more sympathetically about the dark towers: they’re not rich living structures, and they’re not even built on rich living structures. In that light, I felt more sorry for them than anything else, which in turn caused me to re-evaluate my labeling of the black energy as malevolent. I’m now instead preferring an interpretation of the dark energy as reflecting something profoundly sick and lashing out in its pain; the sickness is so pervasive that, when you put it out of its misery, there’s nothing left there any more. Which is emphasized in the sixth level: there, the husks of the towers have rusted and fallen, and so little structure remains that, when you touch them, they crumble and vanish.

(After writing the first draft of this post, I replayed the game, and noticed that the windmills go quite white in the third level; I actually felt that the mottled versions of the windmills had more life than the white versions, but I liked the white windmills more than the white tower skeletons. Not sure what to make of that; for now, I’ll take it as evidence of the power of the sickness that animated the towers.)

Actually, right now I’m having a harder time wrapping my brain around the sixth level than the fifth level: maybe it’s the really problematic one? (And maybe as I replay the game I’ll find each of the levels problematic in turn, as I realize how little I understand them?) In it, you regrow a city, sprouting up buildings that, at first, look sterile in the same way that the white husks of towers looked sterile, but then start getting life in the form of color.

Recall the envelope story of the game: you’re in an apartment with dreaming flowers. As you select each flower, you see a bit of the city, and are then transported to an idyllic rural setting. (Until you get to the later levels, of course.) At first, you can read this as “city bad, nature good”; normally, that would make me roll my eyes a bit, but the nature settings are so beautiful, so calming, so nourishing that I was more than willing to give the game a pass on that front.

By the time you get to the sixth level, though, that interpretation is starting to crumble. In the third level, the game says that some forms of industrialization are okay: given that we’re playing as the wind, who can complain about windmills? In the fourth level, we see more human artifacts, presented in the way that they enhance the beauty and soul-nourishing qualities of the scenes. (In fact, the fourth level is currently the one that I look back on most fondly, largely because of those human artifacts.) In the fifth level, we acknowledge that these human artifacts can go horribly wrong. But I think the sixth level gives a pretty clear statement that the lesson from the fifth level isn’t “human artifacts = bad”, it’s that human artifacts can be very powerful, and we need to take care with them. (I particularly liked that one of the ways in which you can regrow the city in the sixth level is by blowing on playground equipment: swings and the like. We don’t see any humans in the game, but those are a reminder of the importance of children, of growth in a human context as well as a nature context.)

Even with all of that, though, in my core the buildings in the sixth level didn’t nourish me in the same ways that, say, the rocks and trees in the first two levels did. So: are we back to “humans bad (or at least imperfect), nature good” again? The first time I finished the game, I didn’t know what to think about that theme. The second time I played the game, I was reminded that the sixth level isn’t the only place where the city makes an appearance: it makes an appearance in the apartment, in the transitions to the levels proper.

And while, on my first play, I’d seen those transitions as a negative comment on cities, I didn’t see them that way on my second play. The cities in those transitions, as brief as they are, have a good deal more life, a good deal more soul than the city in the sixth level of the game.

So now I’m reading it as all being the same city, or perhaps different cycles of the same (autumnal?) city. We see it in its birth in the sixth level of the game, where it’s bright, cheerful, but not so sophisticated. We see it its maturity, its middle age during the envelope story. And we see its death, its return to the soil in the fourth and fifth levels of the game.

Of course, the flowers in the apartment don’t like the city: they dream of being elsewhere. And who can blame them: they’re flowers! I’m glad the game, through the dream of the flowers, is reminding me of the virtues, the joys, the beauties, the calmness of nature; but whether in my in-game role as the wind or in my actual existence as a human being, I don’t have to ultimately be won over by the flowers’ dreams. I should take the best out of those dreams, and even keep a residue of poignancy as a reminder of what I’m missing, but I’m not those specific flowers, I’m not a flower in general, I’m one specific human being.

And one whose life is richer from having played this game.


Looking around, it’s amazing how much people have written about this game. I would feel that I should be doing a Critical Compilation for Critical Distance, except that I don’t think we have enough distance on the game yet. (EDIT: Others thought that it wasn’t too early, so I did turn the links into a Critical Compilation.) Still, for those who wish to read more:

chrono trigger

April 28th, 2009

The Vintage Game Club chose Chrono Trigger as its fifth game. I never owned a SNES, so I missed the game its first time around; I did play through most of the PS1 port of the game, but found it a bit of a slog. Which, I’d gathered, had a lot more to do with that port than with the nature of the game itself; so I was happy to give it a second try, this time on the DS version.

And, indeed, “slog” is now the last word I’d use to describe the game: it’s the lightest-on-its-feet JRPG that I can think of. When I think of that genre, I think of long treks through overworld areas, dungeons that don’t know when to stop, with both sorts of areas overflowing with random monster battles where you spend 75 percent of your time going through load screens and animations, 24 percent of your time mindlessly selecting the same actions over and over again, and one percent (if you’re lucky) actually enjoying the combat.

At first blush, Chrono Trigger couldn’t be more different from that description. As you emerge from your house, rather than emerging into a town, you’re placed directly on the world map. There is a cluster of buildings near where you are, but if you choose, you can wander quite far in the world (over a bridge into another continent, even) without encountering a single monster battle.

As you play more, you realize that the standard conventions are there, they’re just less prominent. Functionally, each area of the world map behaves like a city in a standard JRPG: being able to walk across two continents sounds impressive, but it’s probably the single largest area that you can walk across, it’s only one of four or so separate areas in that time period, and there are map regions in four other time periods to explore. So it’s a city, albeit a large one.

The traditional “travel while fighting monsters” overworld areas turn out to be there, too: as you emerge from your first time gate, you’re plunked into a forest area with monsters, and there’s another one as you go from the city area of the map to the castle. But they’re extremely mild, having between two and four monster battles.

The reason why I know how many monster battles there are is that, unlike traditional JRPGs (but, thankfully, like many more recent ones), the monsters are visible on the the screen, rather than being random encounters. This lets you avoid most of the monster battles should you so choose; I generally didn’t, however, because the battles went by so fast. They take place right on the screen where you’re travelling, instead of cutting away to a separate battle screen, and have a minimum of superfluous animation; that, combined with the small number of monsters, means that you can go through one of these overworld travel areas in a couple of minutes the first time, and faster on subsequent trips. The upshot is that the travel areas serve the structural goal of providing a clear separation between areas of the map while not getting in your way any more than necessary to accomplish that goal.

While the dungeons weren’t quite as ridiculously short as the travel areas, they were significantly shorter than the norm for the genre. A typical dungeon might take half an hour to go through: long enough to show of its personality, to give a few mild puzzles, but you’re at the final boss before you get bored. The DS nicely helped emphasize the compact nature of the dungeons: a map of the current area of the dungeon appeared on the bottom screen as you wandered through it, making it clear just how manageable it was.

The result is a game that, for its first half, was skipping lightly from event to event: wandering through a city here, a brief travel area there, a castle, a dungeon, back to the castle, spending most of your time advancing the (pleasant) plot rather than fighting repetitive battles.

Unfortunately, that didn’t last. Magus’s Lair was a good deal longer than any dungeon that preceded it; it was reasonably well constructed and at a key plot point, so I was willing to give it a pass for the sake of variation, but it was immediately followed by Tyranno Lair. That dungeon was equally long, not as well constructed, and had an unusual amount of monster battles that you couldn’t avoid, including battles in areas that you had to backtrack through.

After Tyranno Lair, the game had its ups and downs—the 12,000 BC time period had some interesting aspects, but in general there were a lot more dungeons, they were longer, and the game had lost its lightness. I was happy enough to keep going, but I was doing so more in a spirit of seeing the game through to the end rather than active excitement about what was to come. So I marched along with the game until Crono died.

Normally, having your main character die might sound like a bad thing, or at least (given that it’s a scripted event) an emotional high point. But while Chrono Trigger does have many virtues, its portrayal of its main character isn’t one of them; honestly, I was as glad to be given the opportunity to experiment with filling my party with other characters as anything else. The dungeon after Crono died was a well-done “get thrown into jail and have to retrieve your items” segment; when you emerged from that, the bad guys had conveniently added wings to your time machine, meaning that you could fly all over the world in five different time periods, most of which had significant areas that had been previously inaccessible.

With that, the game returned to its lightness. There was a main plot that you could follow if you so choose (indeed, that you were almost at the end of); given my lack of attachment to the main character, I figured I’d instead try out the many side quests that had suddenly opened up. And I’m quite glad I did! They were, in general, a return to the short dungeons that characterized the beginning of the game; the game also used your time machine to good effect in several of its puzzles, requiring you to navigate between periods to solve them and then showing you, on your return to the later time period, how your actions in the past had affected the behavior and legends of the later time period.

More than lightness, though, the side quests had an emotional resonance far beyond anything in the main story, or indeed most RPGs’ main stories. In her GDC talk on story, Margaret Robertson talked about how the most effective, affecting, enduring storytelling in games is more often found in the small touches than in the grand plots: she used the Anju/Kafei side plot in Majora’s Mask as an example, and I know I’ve been haunted by that ever since I played that game most of a decade ago.

And Chrono Trigger‘s side quests are another beautiful example of that. The side quest to set Cyrus’s soul at rest, where in 1000AD you hear about a ruined castle haunted by unsettled souls, then manage to go back to 600AD to properly bury Cyrus, then return to 1000AD and find that people’s conversation has changed to a discussion of Cyrus’s (and his friend Glenn’s) noble deeds. The side quest where you defeat a desert monster, letting a couple plant a forest; then leave Robo behind to help them tend the forest, returning 400 years later to find him enshrined (but still barely functioning) in a church. Which leads to a conversation around a camp fire late at night and a strange time gate leading Lucca back to a scene in her own childhood where her mother had lost her legs; this time, though, you can save her mother. Or, in my case, you couldn’t, because you didn’t figure out how to input the commands quickly enough; there was absolutely no chance that I was going to leave the game like that, so I replayed it until I succeeded in saving her.

And then there’s the Sun Stone quest. It’s the shortest of the side quests, but the most moving for me: it involves a family that you’d encountered before where the father only cared about money, where his kids hated him. Going into that house had almost felt physically painful for me before, and I’d never understood why it was there until I played through that side quest; in it, you change the events of the past in such a way that the father has become generous and gives you the Sun Stone. Getting the stone was nice, but removing the poison from that family mattered a lot more to me than the Sun Stone did.

Quite a game, when all is said and done. I can only imagine an alternate universe in which JRPG designers actually paid attention to Chrono Trigger, and emphasized a density of experience over stuffing you with dozens of battles with minutes of animations pitted against seconds of thinking. Or, more profoundly, an alternate universe in which the video game industry realized that grand narratives about saving the world from destruction had less of an impact on the players than sketches of what our daily lives, loves, families are or could be like. Which we saw in our previous VGC game as well: there, too, the save-the-world plot just got worse as the game continued, but the family relations still shone through.

Many thanks to the other VGC members who played through the game: I very much appreciated all of your company, and I’m looking forward to the next game!

idea factory workshop at agile 2009

April 27th, 2009

I was pleased to learn last week that the workshop that Brian Marick and I proposed for Agile 2009 has been accepted. It’s titled “Idea Factory”; since that link goes to a page behind a login barrier, I’ll just reproduce the description here.

Summary

Ever heard a programmer say “I think the code’s trying to tell us something”? A joke, right? A metaphor. There’s a social world, where people tell people things, and there’s a world of objects that, at most, exert passive pressure.

But what if we deny that the two worlds are separate? What if we treat everything as a moving mashup of objects, ideas, individuals, and groups? This workshop will present some recent perspectives from sociology on that question, and will ask participants the following: if you believed in one of those perspectives, what would you do differently on your project?

Process/Mechanics

We will repeat the following N times:

  • We will summarize a theory from sociology. During the summary, the two moderators will talk to each other as a way to encourage the audience to ask clarifying questions.
  • The introduction to the next section is: “OK. Lay aside your skepticism. Assume the theory is true. What should you do differently on your project? Shout out ideas.”
  • Like a brainstorming session, our goal is not to criticize ideas but to generate them. Unlike a brainstorming session, we’ll allow discussion of an idea with the aim of understanding it better or building upon it. We’ll also allow clarifying questions about the theory itself.
  • The discussion will continue until it begins to die down. The moderators will try to cut it short a little before people are fully ready to move on. (“Always leave them wanting more.”)

The exact workshop mechanics will depend on the crowd. If the crowd is small enough and lively enough, we’ll work as a single group. If that appears infeasible or doesn’t seem to be generating enough ideas, we’ll move into small group discussions with the moderators circulating through the groups answering or asking questions and helping people generate ideas. (Because of the latter possibility, we’ll want seating in the rounds.)

It’s entirely likely we won’t exhaust our fund of theories. That’s OK. (“Always leave them wanting more…”)

Learning outcomes

  • Callon & Latour’s actor-network theory
  • Star & Greisemer’s boundary objects
  • Galison’s trading zones
  • Fujimura’s packages

jobs and roles

April 18th, 2009

One of my goals in going to GDC was to get a feel for what the industry is like on the inside. I think I succeeded in that, to some extent; what I wasn’t expecting, however, what that I’d learn so much about what I like about my current job, and about things to keep in mind whether or not I eventually move professionally in a game-related direction.

The talk that did the most to crystallize these thoughts was the Harmonix one. The speaker started the talk off by addressing the issue that everybody at the company has an idea of how the games should work, should evolve; rather than treating this as an imposition (how dare those programmers tell the designers what the game should be like!), they apparently treat this as an opportunity, a resource. This doesn’t mean that they let everybody go off and stick their own ideas into the game—indeed, most of the talk was about addressing that tension, about how to get a coherent game in the face of so many cooks. But what it made me realize is: I’m totally one of those people who has opinions about everything, and who gets unhappy if his opinions get brushed off. (I’m quite happy to have my opinions argued against and discarded after due consideration, though!) So I’d better spend my time working at companies like Harmonix.

And that has nothing to do with the video game industry: on any but the smallest project, there will be multiple voices that want to be heard, that (in my opinion) deserve to be heard. One of the reasons why I’ve stayed with my current job for so long (coming up on six years!) is that I’ve never (or at least rarely) felt that my voice wasn’t heard: people have given my ideas due consideration, and a reasonable number of them have been adopted by the project. (And a reasonable number have been discarded, too. That’s okay. Incidentally, none of what I’m saying here should be taken as arguing against the agile idea that there’s a Customer who ultimately decides what goes into the project: I have nothing against somebody other than myself having final authority over certain decisions, I just want those decisions to be made after appropriate Consultation.)

This also shed some light on the sort of organizational role that I’d prefer. For the last four and a half years, if I’m counting correctly, I’ve been managing people, but I’ve maintained a job label that puts me in Sun’s engineering track rather than it’s manager track. And this isn’t just a conceit: I will immodestly suggest that I know the details of our product’s code as well as anybody, and I’ve touched the code quite regularly over the course of those years. (And continue to do so: some of the back story behind my last post is my thinking that I should increase my technical efforts in certain areas.)

This puts me in an uncomfortable position career-wise: I like what I’m doing now, with a foot in the programming world and a foot in the managerial world, and I’m all-too-well aware that the vast majority of jobs out there make you choose the one or the other. And I won’t rule out the possibility that I’ll eventually leave the programming world entirely—in particular, I’m getting more and more curious about how organizational change works, which fits better in the managerial world. (This is one of the ways in which my current job continues to hold my interest: over the last half-year or year, I’ve gotten to talk to more people in other parts of the organization, and started thinking about how we might do things differently.)

But, for the time being, I think the main aspect that I like about being a manager is that it makes it a bit easier for my voice to be heard, about the organization of the team as well as the organization of the code. And this brings me back to the thoughts at the start of this blog post: I’m pretty sure that I’d be happy in any sort of position where my thoughts were heard, irrespective of whatever formal power my position within the organization gave me. So I shouldn’t be thinking about being a manager versus being an individual contributor: from the former, I should take the idea that I want to be heard, and from the latter I should take the idea that I want to be in touch with the beauty of the details of what I’m working on. And wherever that leads me is okay.

Back to GDC and the video game industry: in the GDC Confab, Michael asked me if I was thinking of entering the gaming industry; my answer was that I wasn’t sure, and one big worry I had was the industry’s belief that it’s appropriate to force people to work extremely long hours. (I didn’t have anything to say at the time about the “But What I Really Want to Do Is Make Games” panel, but one of the comments that’s stuck with me was a panelist saying, basically, games journalists are already used to working ridiculous hours, so that’s a way in which they fit right into the game development world!) I don’t think that’s a good way to produce software in general—I’m pretty sure I can’t maintain disciplined, creative thoughts on one project for more than 40 hours a week—but even if it were, I’m not so obsessed with my career that I’m willing to let it dominate all other aspects of my life, my family in particular. I’ve recently heard the statistic claimed that the average amount of time people spend in the game development industry as a whole is five years, while I’ve already been at a single job for longer than that; the humane working conditions are a big part of that, and any industry would have a hard time learning and growing if it churns through its workers as quickly as the games industry apparently does.

It is certainly the case, however, that a lot of what I saw at GDC excited me. People were talking about all sorts of interesting things, things that I don’t necessarily get a chance to think about so much in my current job. And its artistic nature is a big draw for me: I’d like to work on something beautiful, something that nourishes my soul. Though, to be sure, code can be beautiful and nourish my soul, even if the beauty is hidden within the product: it may well be the case that I’d get more out of revealing the beauty hidden within some of our code at work than working on something more overtly artistic! Also, working on games would be a change of pace, which I like; I’m sure the fact that my role at work has changed significantly every year or two is one of the big reasons why I’m still there. (And has been changing again over the last year, the last few months, even seeing the seeds of new ideas over the last couple of weeks.)

If I had to say what sort of position appeals to me most right now, here’s a stab at what my list would look like:

  • I’d be getting my hands dirty with software
  • but would be able to think and talk about aspects of the product beyond just the code
  • (and have people listen to me!)
  • including the structure of the organization.
  • (Said organization would ideally be small,
  • and in particular I’d be on a small team.)
  • That structure would be an agile one
  • or, better/broader yet, a lean one,
  • including working at a Sustainable Pace.
  • (Working close to home would be good, too.)
  • The product would be a work of art
  • (a game would be nice),
  • working on it would nourish my soul.
  • And I’d be learning something new,
  • both technologically
  • and at a domain level.

Which is a lot to ask for. (But if there are any companies in Mountain View using agile methods to write soul-nourishing games in Erlang, please get in touch!) In the mean time, I’m doing pretty well on that checklist right now…

inbox zero and technical debt

April 17th, 2009

About 10 minutes into a talk he gave at the Philadelphia library, David Allen says:

A lot of it was based upon my experience getting a black belt in karate. … One of the things you need to learn is the strategic value of clear space. Trust me, when four people jump you in a dark alley, you do not want to have your brain wrapped around 3000 e-mails sitting in your in basket. That’s why, when I’m not doing anything else, folks, I’m cleaning up e-mail to zero: if I’m not exactly sure there’s something mission-critical I need to be doing right now, I am cleaning up.

Why? Because there is a surprise coming toward me I can’t see, and when that sucker hits, tonight, it might be landing while I’m speaking, … when that surprise hits, do you want to have still a lot of unconsciously accepted but not clarified agreements with yourself that you don’t know exactly what it means but it might be important and then suddenly having more stuff come in on you? That’s why interruption and surprise is becoming such a stresser these days, simply because most people have such a backlog of stuff that those surprises are hitting on huge backlogs so you have a subliminal sense of angst, you’re going to have a level there that is not clear to engage with that appropriately.

Which is a great argument for paying down your technical debt, too. If there’s one thing you can be sure about when working on legacy code, it’s that surprises are going to hit you when you don’t expect them. And, when that happens, you’ll be so much better off if you have a relatively small backlog of technical debt to work with. Whereas, if your code has “a lot of unconsciously accepted but not clarified agreements with [itself]” (where “not clarified” can mean untested, it can mean tested but badly structured, it can mean code that only one person knows how to work with), then your sense of angst will be far from subliminal, and you won’t be able to engage with the code appropriately to solve your problem.

Incidentally, about 50 minutes into the talk, he mentioned that he’s started generating a tentative daily plan. He’d previously recommended against that, since one unexpected event can and probably will change the course of your entire day, but now he’s finding it useful to structure his day by picking up a few candidate high-priority items, while accepting that events may cause that plan to change. Which I was glad to hear, because I’ve been doing that at work for a few months, and am quite happy with the results. Though he also says that he didn’t need to do that until a year ago; I’m quite sure that I’m less busy now than he was a year ago, which suggests that I’m having problems with managing my commitments and next actions.