Lately, I’ve been thinking a lot about my origins — mainly because I take a lot of it for granted, despite so much of my experience contributing to the person I am today. So many of us programmers have incredibly cool, diverse backgrounds and experiences.

I was raised by my grandparents since I was young, for example. They did an exceptional job raising me, and laid the groundwork for my high standards for myself.

One area I haven’t really touched on is that my grandfather played a huge role in my movement toward computing.

He outfitted me with my first Macintosh Performa (from his office at Polaroid) when I was barely in elementary school, and provided me with a steady stream of educational software. Number Munchers helped me learn prime numbers and multiples. KidPix provided a creative outlet I had only dreamed about. I realize looking back how privileged I really was to be able to own a personal computer at that age. I was also blessed, because it gave me my on-ramp to the technology highway — and I was off.

Dungeon Life

As I grew older, I started to branch into some different areas of online gaming. I stumbled upon Zork I: The Great Underground Empire one day in the mid-90s, and my life would be forever changed. I proceeded to dabble in more text-based roleplaying games (RPGs) over time.

AOL hosted Modus Operandi, a Caribbean-themed text-based online roleplaying game that I would play off-and-on for over a decade, before they closed down their servers. GemStone III (now GemStone IV) fulfilled medieval fantasy dreams I didn’t even know I had.

And as an added benefit, the rapid-fire communication style of online gaming taught me to type nearly 100 WPM with 95%+ accuracy by a young age. If you didn’t spit it out quickly, roleplay would move forward without you.

My enthusiasm for gaming didn’t go unnoticed. In nearly every game I played, staff would take notice of my creativity and curiosity, and I was able to secure some staff “builder” positions despite being grossly underage (the internet was a different place then, I guess). I found mentorship in relatively anonymous figures with object and class-based “power”.

The only thing that connected me with these resources is sheer curiosity, and curiosity is a wonderful programmer trait. I badly wanted to interact with others in the game, build cool things, and flex my creativity… so I figured out how.

About a year later in 1995, when I was only 10(!), I discovered Multi-User Dungeons (MUDs) and MOOs (“MUD, Object Oriented”).

No… I wasn’t rolling around in the mud with cows. A MUD, or “Multi-User Dungeon”, is a text-based style “game” that provides a virtual experience via commands sent to the server, and the server’s responses.

The virtual world of MUDs itself also offers incredible creative license. Rather than clicking a “right” button in a graphical user interface (GUI), you would type “east” or “e“. The server, based on your current location, would route you to a different room, or locale. There are no images, and no sounds. Bards “sing” their lyrics, actions toward other players while roleplaying must be “emoted”, and you basically have to have a REALLY active imagination. Being both left and right-brain, all of this appealed to me.

What is a MOO, though? According to Wikipedia:

“One of the most distinguishing features of a MOO is that its users can perform object-oriented programming within the server, ultimately expanding and changing how the server behaves to everyone.Examples of such changes include authoring new rooms and objects, creating new generic objects for others to use, and changing the way the MOO interface operates. The programming language used for extension is the MOO programming language, and many MOOs feature convenient libraries of verbs that can be used by programmers in their coding known as Utilities. The MOO programming language is a domain-specific programming language.”

A typical MUD “room” and player character description.

It wasn’t long before I became completely enamored with the idea of creating virtual, text-based worlds. Anything was possible!

MOOs: A Young Programmer’s Playground

A freshman in high school by this point, I discovered the LambdaMOO Programmers’ Guide and printed the whole thing out. It went with me in my school backpack, and I read it over lunch, during band practice, after finishing tests… in the girls’ room. I was determined to make something cool, and nothing was going to get in my way.

That night after I finished my homework, I logged onto LambdaMOO and created my first objects following what I had learned. Using initial conceptualization of prototyping and inheritance, I then created a slew of objects with different methods, states, and properties:

A hat with a button on it, that when pushed, would release confetti and a small dancing bear from the top. Weapons that would interact with a player object’s health points when in a battle state. Animal familiar that would follow you around, perform actions, and aid in battle.

The Programmers’ Guide provided me with all the tools I needed to build. Effectively, MOO core programming languages acted as a framework of sorts, allowing me to use expressive commands and pseudo-coding to build objects within the virtual world. It provided a strongly-typed playground, with little to no room for really causing any irreversible damage to the server itself.

The possibilities were endless, and only limited by my own creativity

Drawing Connections

Who would have thought that these programming concepts would make their way onto my computer screen at such a young age?

Both MUDs and MOOs utilized principles of object-oriented programming. I didn’t know, however, that object-oriented programming was a more widely-utilized concept outside of the MUD world. I wouldn’t really come to make that connection fully until I was in college, exploring the Computer Science degree program.

The only thing that connected me with these resources is sheer curiosity, and curiosity is a wonderful programmer trait. I badly wanted to interact with others in the game, build cool things, and flex my creativity… so I figured out how.

To this day, I frequently program bottom-to-top, focusing on the end result and working backwards to fill in the gaps. Working with such great abstraction helped me focus on input and output, giving attention to the details after the fact.

Perhaps the most alluring feature of MOOs is that you can play around with core fundamentals of object-oriented programming in a FUN environment. Programming doesn’t feel like programming. You learn to implement logic into your objects to make them do cool things.

There are many kid-friendly MUDs out there, as well, where your Programmers-In-Training (spawn) can experience their first introduction to object-oriented programming. If you are interested in exploring your creativity within a MUD or MOO environment, The Mud Connector is a great place to start. With ranking systems and searchable features, you can find genres like fantasy, medieval, and even cyberpunk/futuristic.

I personally believe that text-based gaming changed my life for the better. They also played a huge role in my career choices later in life, which is more than most graphics-fueled video games can claim (unless one goes on to become a video game developer).

MUD and MOO Programming Resources

The LambdaMOO Programmer’s Guide linked above provides insight to LambdaMOO programming, but there are many other types of core languages. If you are interested in learning more about building your own MUD or MOO, here are some books I’ve found to aid you:

MUD Game Programming by Ron Penton

Creating Interactive Fiction with Inform 7 by Aaron Reed

Writing Interactive Fiction with Twine by Melissa Ford

Do you have formative experiences with gaming that influenced your programming career? Still curious about MUDs, MOOs and more? I want to hear from you! You can keep the discussion going in the comments below, on the La Vie en Code Facebook page, or via Twitter @lavie_encode. Happy coding!

Solve code challenges in less time, with less stress, with step-by-step problem solving approaches.

Solve code challenges in less time, with less stress, with step-by-step problem solving approaches.

View the course