The concept of “play” is incredibly interesting. If you’ve ever had a kitten or puppy, you know that play is not unique to humans. Evolution would suggest, then, that play must serve some purpose, or at least that it must confer some sort of advantage sufficient that it was not selected against.
So what is the purpose of play? If you watch a kitten or puppy play, you might suspect that play is a form of rehearsal for “hunt”. Yet non-carnivorous animals also play. Another theory as to why play exists is that it provides individuals an opportunity to make mistakes without dire consequences. If a kitten pounces on a ball of yarn and it “escapes”, well, no big deal, but if a wild cat pounces on a mouse and it escapes, that missed meal could be the difference between life and death.
Another interesting dimension of play is its relation to age and maturity. The juveniles of wild cats and wolves play, much the same as their domesticated counterparts, but the adults generally don’t. The fact that an older dog still plays fetch with you is likely correlated to the fact that domestication is essentially an artificial selection for individuals that remain perpetual juveniles. We humans still play well into adulthood, though, as do a number of other wild species such as dolphins, primates, elephants, and certain birds. What seems to link all the species that participate in adult play is intelligence.
Why am I thinking about play lately? Well, for one, the date of this post. For another, I find it interesting that “play” is probably a more accurate description than “learn” for what we have LLMs do to train on a dataset. Instead of severely penalizing models that give a wrong answer, we nudge them in the direction of the correct one. Over enough time, these nudges add up to something that, at least on the surface, resembles intelligence.
But the real reason I’ve been thinking about play lately is that there seems to be a real “play deficit” in the world of software.
The hacker culture that grew out of the early work on Artificial Intelligence at MIT was as much about play as it was about software. There were so many inside jokes and funny anecdotes that eventually the Jargon File was created just to catalog them all. Various long-running jokes about “The Cult of VI” or “The Church of Emacs” practically defined the early days of the open source movement. (One of my personal favorites remains “Ed, man! !man ed”.)
This culture of play persisted through the early days of the personal computer. Steve Wozniak, arguably as responsible as any for the PC revolution, used to run a “joke hot-line” which mostly just consisted of people calling his phone and him reading them a joke out of a large book of jokes he had. As the internet started to take form through series of “Requests For Comments”, the confusingly named documents that described early networking standards and protocols, a tradition of April Fools’ Day RFCs took hold, culminating in the pinnacle of internet standards: the Hyper Text Coffee Pot Control Protocol. Rather than bemoan the incomprehensibility of writing code in the “modern” programming languages of the day, the International Obfuscated C Code Contest was born.
Even into the 1990s and 2000s this culture remained strong. One of my first introductions to the Ruby programming language was courtesy of the ever whimsical _why. Back then we had the weekly Ruby Quiz and code golf tournaments, where each participant attempted to solve a programming challenge using as few characters as possible (and no, it was usually not possible to read the resulting programs). Heck, the Python programming language was named in honor of that famous British Comedy Troupe of the same name. When I first started my professional software career at Apple, one of the best attended sessions at Apple’s Worldwide Developer Conference each year was “Stump the Experts”. Many of the old guard of Apple, both still at the company or having since moved on, would take the stage in all manner of comical garb, share hilarious stories of the past, and challenge anyone in the audience to “out nerd” them.
Perhaps its my own perception, perhaps I’m just “getting old”, but it seems like sometime in the late 2010s the amount of play in the world of software decreased rather dramatically. Maybe it was the decline (and eventual COVID-hastened near-death) of the in-person conference. Maybe it was the increasing reliance of the world’s population on the products of our labors, or the infiltration of “the business types”. Maybe it was social media. Maybe it was nothing in particular…
There’s another element to “play”, another hypothesis as to what advantage it confers to all the species that evolved an increasing appetite for play: it helps to relieve stress. Ivan Pavlov showed, via his dogs, how certain environmental cues can lead to involuntary physiological changes. So when an alert goes off because production is down enough times in a row, eventually that alert will invoke an involuntary stress response in even the most grizzled of gray-bearded hackers. Allowing for play, where the same sort of alert is tied, instead, to a comical result helps not only break up that Pavlovian training, but replaces stress with a sense of relief.
I find this aspect of play to be, perhaps, the most important today. Over the last 12 months, in the software industry, it seems like either your job is being replaced, or you’re being asked to do 10-100x as much work as before. Either way, these are stressful times. Play is practically mandatory! For example, I recently was asked to investigate what would happen when an MCP tool call made by a client we were working on took too long. I could have just built a server that exposed a tool that slept. Instead, I wrote a tool that distributed wise-sounding gibberish advice and called it MCPhilosopher. It accomplished the same task, but I smiled every time it timed out.
I should say, I don’t think all hope is lost. The Jargon File is still accessible. The IOCCC just closed another round of submissions…I can’t wait to see what those mad scientists have cooked up this time. Even the recent “carwash” problem exposing the humorous ways that LLMs can still make mistakes has an element of play to it.
For my part, last October I realized a life-long dream: I submitted a game to Ludum Dare. It was…not good. Even the code is rather ugly. But it was (marginally) playable, and I got a chance to learn things and use tools I probably would never in a million years of doing “just work” had a chance to learn or use. So, I am looking forward to 16 days from now, to Ludum Dare 59. I intend to submit another horrible game…
…because it is fun.