Reginald Braithwaite a while back posted his favorite interview question: "sketch out a software design to referee the game of Monopoly." My interest in his question starts with game "nouns and verbs" and ends up this muse: would Martians wishing to understand the rules of the World of Warcraft (WoW), say, be better off trying to read its source code or watching video of millions of hours of screen capture?
Also mentioned, the "Vietnam of Computer Science" and the "Grammar of Gameplay..."
Reginald's interest in the game of Monopoly as the subject of an interview question centers on how to represent games well with object models (see Object Oriented Programming). While I suggested in Hot Blooded Objects (and Troubles with Tribbles), software objects present a number of challenges to virtual worlds, the challenge that Reginald picks up on is different, though a most interesting one: how to model the virtual world effectively in code.
Interestingly, he starts with a noun/verb lingo with parallels to how it is used by game developers. But he also suggests of the challenge in mapping an easy (and perhaps even imperfect vernacular) into software. Listen:
...Now let's talk about 'object-oriented programming' for a second. 99% of the stuff you read discusses modeling real-world physical objects. Things. Nouns. It is a Kingdom of Nouns. Most candidates start every design by dutifully listing all of the nouns they can think of and then they spend the rest of the time available thinking about piling them into phyla, hierarchies of "IS-A" and "A-KIND-OF."
This approach, which I will call "noun and verb," is so limited I'll dare to call it brain damaged. In fun. But seriously, competent software developers spend much more time on relationships, responsibilities, and constraints than they do on trying to prematurely optimize reuse through inheritance.
Now let's ask a question about Monopoly (and Enterprise software). Where do the rules live? In a noun-oriented design, the rules are smooshed and smeared across the design, because every single object is responsible for knowing everything about everything that it can 'do'. All the verbs are glued to the nouns as methods...
For those of you who want to dig deeper into a related topic, consider Ted Neward's superb essay describing the object-relational mapping problem as the "Vietnam of Computer Science. " It is a fantastic read (though perhaps a little heavy-handed with the Indochina analogy) that I will try to relate to our non-technical readers as follows.
The best state-of-the-art mainstream software engineering can offer to build applications - virtual worlds included - is object-oriented. Developers, designers, tools, and training is geared towards modeling the world-as-a-computing-problem in terms of objects. Problems occur when what goes on in the real world may not be easily communicated in terms of objects. One area of impedence occurs with trying to map a relational data model (e.g. databases) into an object model. The challenge is this. How to reify an intrinsicially relational real world problem, say a social population of players, with an object design without engineering a solution that is either impractical to build or impossible to maintain?
Now, for our technical readers, were Reginald to jump in he might suggest that instead of using an all-purpose programming language (e.g. Object Oriented) use something highly specialized to the problem you are trying to solve (see Domain Specific Languages - DSL).
This, however, only brings on the next challenge. What would be the ideal game-oriented virtual world programming DSL look like? Perhaps it would involve something like Raph Koster's ambition of a Grammar of Gameplay (see [1.] , [2.] ).
To return to our Martians.
Let us suppose our Martians don't care about players or player culture. They simply want to know how the game is played so they can decide whether WoW could be as big a hit on Mars as the macarena.
Would they be better off directly observing the game - sourced by its code. Or would they be better off reverse-engineering it from the behavior observed of human players? The challenge of Reginald's interview question is this simple - "If someone were to read the source code, do you think they could learn how to play the actual game?"
In some ways this challenge hints of the reward of "downhill synthesis" over an "uphill analysis": who really knows what the rules of WoW are (say) except by grace of the analysis of a million fan websites and trial and error. Do the developers really know?