At the Intersection of Work, Play, and Learning

Cluster with Standard Attributes

Cluster with Standard Attributes

For the most part, I keep my professional blogging separate from my hobby blogging.  During the day, I’m a programmer for the University of Notre Dame, and at night a pen, paper, and cardboard gamer.

I consider myself to be a reasonably competent programmer, but recognize continued room for growth.  This manifests in reading and experimenting in code.  Lately, I’ve thought of myself more as a software doctor than a software engineer.  Doctors practice medicine, and I practice programming.

This past month, I picked up Avdi Grimm‘s “Objects on Rails” [Free legal online version] and Uncle Bob Martin‘s “Clean Code“.  I’m interested in exploring better software design, with a focus on code refactoring…I’m the primary maintainer of a 6+ year old Ruby on Rails based CMS (It started somewhere around Rails 1.1.6 for those keeping score).  And sometimes it feels like I’ve donned the Black and patrol the Wall. But I digress.

I decided that I wanted to apply some of these principles to a problem space that I understood…RPGs.  In particular, I wanted to automate the Diaspora Cluster Creation, not because it is convoluted, but because it is very well defined process.  That is to say I already understood the domain.

Cluster with Arbitrary Attributes

Cluster with Arbitrary Attributes

Over the past week, I’ve worked on creating the Diaspora Cluster Creator command-line utility by striving to apply these recommended constraints and methodology.  The tool I’ve created is an over-engineered solution for what amounts to 5 minutes of dice rolling at a table with a group of friends.

This exercise has proven to be ridiculously rewarding.  I was working on a greenfield project and trying to adhere to the teachings of others.  In some cases, I stumbled, creating code that I should’ve known would be a problem; Hint, if the tests are complicated to setup, then there are issues.  But, through refactoring, I was eventually able to clean things up – I’m still not satisfied with the Node class.

While I typically try to work within these constraints, for this project I was trying extra hard to keep them at the front of my considerations: The Law of Demeter, Single Responsibility Principle, Test-Driven Development, Command/Query Separation, general readability, and fast tests (Corey Haines would be proud).

The result has been a code-base that has been very fun to work with, and has been relatively painless to extend.  The Cluster creator can just as easily create Diaspora clusters with attributes different than the assumed Technology, Environment, and Resources.

The command-line solution is not suitable for the general role-playing populous, so I’ll need to take that into consideration.

For those of you interested in installing it yourself, it’s up on Githuband available as a Ruby gem – `gem install diaspora-cluster-creator`.  You can take a look at the Cucumber feature that defines the command-line behavior of the tool (Hint: there are several options).

It’s Only a Model

Monty Python and the Holy Grail

Monty Python and the Holy Grail - The Arrival at Camelot

In my day job, I’m regularly modeling systems.  Typically the models involve relatively concrete concepts: a page, a navigation structure, a financial transaction (previous job), or a place on a map.  These models can be defined with a noun: Page, Navigation, Payment, Placemark.  The models themselves have methods, or verbs.  (i.e. render, publish, and pay).  Loosely, this is part of the definition of object-oriented programming.

Recently, I’ve had the urge to work on table top game-design (and no I’m not quitting my day job).  One of the things that surprised my wife is that I haven’t done any game-design.  After all, I am a poor soul hopelessly consumed by gaming.  

In large part this inspiration has come from reading D. Vincent Baker‘s Dogs in the Vineyard and Apocalypse World, Ryan Macklin’s most excellent (and mouthy) blog, Fred Hick’s very transparent blog concerning gaming, Gnome Stew’s blog (in particular about improv), Luke Crane’s Burning Wheel and Adventure Burner, Graham Walmsley‘s Play Unsafe, Bully Pulpet Game’s Fiasco, Brad J. Murray and crewsDiaspora, Evil Hat‘s Dresden Files and Spirit of the CenturyGrognardia, the Alexandrian, Daniel Solis; listening to Fear the Boot and the Walking Eye; and countless other influences.  In fact my Google Reader is loaded with all kinds of game related blogs.  My @takeonrules account follows several game designers.

But most importantly, the tipping point came from two sources on the same day: Mike Roe, my coworker and an all around creative spirit, who spoke on creativity; And my wife suggesting that I design, as a Christmas present, a game for our children.  I don’t know if I’ll get to that, but that is my present goal.

The problem is…What kind of game do I want to design?  My personality is one that enjoys refactoring and tinkering with other people’s work.  Getting started on a new project is very daunting as is pushing it through to the finish (I’m great in the middle innings).

I did a little bit of research, and ultimately settled on Game Design Concept‘s blog, in particular the entry concerning a game design syllabus and schedule.  I went out and bought, from my friendly local bookstoreScott McLoud’s “Understanding Comics: The Invisible Art”, Raph Koster’s “A Theory of Fun for Game Design”, and Brenda Brathwaite and Ian Schreiber’s “Challenges for Game Designers”. I’m working my way through the most excellent recommended reading, and will then begin in earnest working through the syllabus.

Clearly the game will need a theme and the underlying system should model that theme.  However, my training for modeling has thus far been focused on more concrete objects (i.e. Page, Navigation, Train, Shoe, Radio).  Modeling a theme requires modeling something much more abstract (i.e. Scarcity, Hope, Depravity, Corruption, etc.) than my standard fare.  So how do I go about doing that? (This is not rhetorical, but may come off as such)

From my reading, it sounds like Apocalypse World does an excellent job at modeling scarcity. Clearly depravity and corruption are not something I want to model with the kids.  So I’m going to be thinking about Hope, but I’m sure there may be other themes I want to explore.

What are Hope’s associated verbs? What other models interact with Hope?   That is the exercise left for the writer.

As a side note, I don’t think I’ll be working towards Daniel Solis’ Thousand-Year Game Design Challenge:

Create a game. The game can be of any theme or genre you desire, but there is one restriction: You’re creating a “new classic,” like Chess, Tag or card games. So, create a game to be enjoyed by generations of players for a thousand years.

That is a little too lofty of a goal for my first game design.