A virtual environment is the perfect place to implement video games or video game-like systems in order to teach or even just to make the environment more pleasant to use. In our status meeting, Dr J wanted us to think about the possibility of using games in VIEW. The best idea that’s been presented so far is a trivia game… Here’s the letter I sent him on the subject:
Dr J:
I have some thoughts on VIEW.
First, looks. Does the environment display have to be ‘realistic’? Right now, we’re pulling textures from real-world photographs, and I understand that at the moment that may be what our resources allow. However, one of the things that make video games fun is the interesting environments, and I would argue that a virtual environment in a professional/academic setting has every right to be pleasant or organic or interesting or all of the above. We want this to be a productive tool, but also an enjoyable experience, yes? I read an article a while back about Vista, Longhorn when the article was written. The guy was struck at how organic and smooth the system felt and looked. He made the argument that as a computing professional sitting in front of a computer from at least 9-5, having a natural-feeling, attractive system might be vital to reducing stress and improving productivity. After all, if working on the computer becomes enjoyable in some ways, then it encourages people to focus and relax. Additionally, I would argue that a virtual environment may in some ways be expected to be something of an escape from reality. Something to think about for future versions, I guess.
Now, about games. I read an article in Discover that talks about how video games make excellent learning tools because the rewards are immediate and offer specific feedback on performance. Games not designed for education still manage to teach; aside from the immediately obvious benefits to hand-eye coordination games have been shown to teach understanding of spatial relationships, problem-solving (even ‘out-of-the-box’), understanding of the management of limited resources, and many other things. Applying these ideas to cs, a field that the very games are based on, should be relatively easy. A trivia game about cs may be mildly interesting and have significant teaching value, but I think we can do more than that.
What about a space invaders-type game, where the columns of aliens are actually linked lists or other data structures and a player can add or remove alien ships like they were pieces of data? You could even design a simple interface that would require the player to specify how the ’ship’ was handled, a magnetic coupler to represent a pointer for example. If the player sets up the ship wrong and sends it out they get a catastrophic failure. Removing ships would be the same way, in reverse order. Adding other concepts like memory allocation would be relatively simple. Then, introduce code syntax as labels on the ships/components (with color-coding to aid memory retention), gradually phasing out the game until the player is manipulating code.
How about the player acting the part of a program finding/manipulating data? For reference, please peruse this video (you’ll need flash, I have a high-def version on my laptop if you’re interested): http://www.youtube.com/watch?v=oeUjVkJ7seY . The portal could be a pointer. To show double pointers, you could port to a room (address space, memory space), and then port out again to the destination. Grab the data, bring it back, manipulate it, whatever. Labels and color-coding could be used to show how it applies and relates. You could have a different portal gun depending on your goal or intention to indicate different concepts/functions.
The point is, many of the concepts of cs are spatial in nature and could be shown in a graphical way. As most students learn, memorizing syntax isn’t what makes you a good programmer. One last thought, even concepts that aren’t spatial in some way can be shown in a game: http://www.cs.unm.edu/~dlchao/flake/doom/ .
One last thing, and this is slightly unrelated. I had an idea of a ‘dimensional pocket’ that could be associated with a person’s avatar. They could use it to store work, code, games they’ve earned or have been given (or however that would be handled), etc. Or, it could be a room they could jump into from any point in the environment to play the games. Similarly; a person could visit a professor, queue up, go to an arcade and play the games, and when the professor is ready to meet with them they simply teleport them to their office. The queue could be displayed on a sign that comes out perpendicular to the door into the hallway with a list of the names waiting to be helped and the name of the current helpee at the top.
Thanks for reading. I hope my thoughts have been useful.
P