Open-ended computer ideas

The best thing about computers is that they're open-ended. You can extend them to do things that they were never made to do, and nobody ever imagined they would or could do. Sometimes the reason people don't envision computers doing something is because of technical limitations; 20 years ago, many people suspected that gigahertz-level microprocessors might be impossible, for example. But just as often, the reason people don't envision a computer application is just that: They simply don't think about it. This is not a problem with technology so much as a problem with the human imagination.

Today, there are many models of the PC which are terribly restrictive in terms of what they envision the PC doing. The home computer has developed a handful of pre-defined roles for itself, most of them relating to passive entertainment or communication: People think of the PC only as a stereo that can play music, a home theatre system that can play videos, or a communication device that can send e-mail. While the PC can do all of these things, the fact that a computer is programmable means you can also make it think "out of the box", as long as you're able to do so as well. There are so many ideas for things a computer can do that you could fill a whole book with them. I imagine somebody probably has, but I'm not aware of such a book, so rather than just relying on my saying so, I went ahead and made this page to serve as a sort of inspiration into the mindset of the true hacker who makes computers do unconventional and interesting things.

(If this page seems a bit too spaced-out and big-sky for you, try Not-so-open-ended computer ideas instead.)

Think about a visual pattern. These are all around us; so many things in the world around us have patterns that it shouldn't be too hard to think of one. Now think about how you'd render that pattern on a computer screen, as an algorithm. Of course any image can be represented as a raw grid of pixels, but how could you describe that pattern mathematically, and make it show up on a screen? For example, if you're thinking about a pattern of circles, could you make an algorithm to form circles that looked similar, and then just supply some spacing parameter to replicate the pattern? This exercise obviously gets more complicated if you're thinking about a pattern made of shapes more complex than the simple geometric shapes of a line, square, circle, etc., but most patterns can be algoithmically represented one way or another. Now think about how you might introduce variations on this pattern. Computers can come up with random (or at least pseudo-random) numbers; how could you use these to introduce enough randomness into your pattern algorithm that the result might almost seem real? Very few things exhibit a perfect pattern in the real world for very long: Things get dusty, scratched, scuffed, smudged, and affected by other processes associated with aging. The patterns you see in real life usually have some element of randomness thrown into them, which is why a perfect pattern of, say, parallel straight lines next to each other doesn't look "natural"; it looks artificial. But would it be possible to create the right kind of "noise" into your pattern to make it render things that looked like real, physical objects that had endured some time in the real world? For that matter, what sort of variations could you put on your pattern to make it look like it was something from another world altogether? What kind of variations could you put on it? The great thing about a computer is that since it has a screen full of pixels and a CPU which can do math, you can try all kinds of algorithm-based visual tricks and see the results immediately.

Think about a sound; any sound at all. What might this sound look like on a graph, such as one formed by playing the sound into a microphone hooked up to an oscilloscope? (Actually, just as an aside: How would you view the waveform of this sound on a computer, without a dedicated oscilloscope? As long as the computer has an analog input, it should be possible! In fact, there are programs to use the microphone input on a computer's sound card to show the waveform of *any* voltage level--not just that of a microphone--which essentially turns the computer into an oscilloscope. Just one more way computers are extensible, extendable, and extensile!) Okay, back to the sound: What kind of variations could you put on the sound? What would it sound like played a little slower, or a little faster? If you're comfortable with that kind of math, what might the Fourier series of the sound look like? (This is obviously easier to think about intuitively if the sound is short and simple.) How would you play the sound on a monophonic sound system like that used by the stock IBM PC, or even an aphonic system like that used by the original Apple II? It can be done. How about reproducing the sound using a series of FM-synthesis voices, such as with an AdLib card? (This relates rather directly to the Fourier series of the sound.) What kind of algorithmic variations could you put on the sound? This is sort of the domain of traditional sound-hacking that people often do with electronic music synthesizers, but the nice thing about a computer is that since a computer can have a sound system, it's possible to do these same things with a computer instead of a regular synth. A computer also adds the advantage of being able to perform advanced math functions on sounds or use input to modulate the sound somehow. Could you use a computer to make a sound seem like it's always coming from behind you, for example, even if you turn around in a 360-degree circle? What about from above you?

One of the many gray areas about computers is what parts they have. If you plug a microphone into a computer's sound card, for example, the microphone is part of the computer, right? Is it a microphone plugged into a computer, or is it a computer that *includes* a microphone? If you unplug the microphone and plug it into a regular stereo system, it still works. A microphone isn't inherently a computer part, but it can be used with a computer, so things which you wouldn't normally think of as computer parts can become parts of a computer if you interface them to the computer. The inverse is also true: Things which are usually considered computer devices can be used for non-computer purposes. For example, you can disconnect your computer monitor, hook it up to an antenna, and use it as a plain television screen. What other things can you make "part of the computer"? A telephone can become part of a computer. So can a light bulb. What happens when a person uses a computer? Is the person a peripheral, used by the computer to perform some function, or is it the other way around? After all, a computer can't do most things without a human to guide it. Is the person part of the computer? Is the computer an all-consuming monstrosity that can turn anything into part of itself? Going in the other direction, what parts of the computer could you use in applications that defy the traditional model of the personal computer? Remember that when the microprocessor was first invented, its main applications were foreseen to be in calculators and traffic lights.

Getting away from the idea of everything being part of the computer, one of the great things about computers (and one aspect many people forget when thinking about computers) is that computers are interfaceable. This means that even if you consider outside peripherals to NOT be part of a computer, you can still make the computer communicate with those devices and control them through the computer. Robots, musical instruments, and household appliances can all be programmed and controlled by a computer. Besides their native digital interfaces, computers can be made to produce and modulate analog signals through relatively simple digital-to-analog circuits. When you start controlling analog electrical signals, the whole world opens up to you, because almost anything can be controlled or monitored by electronic signals. What sort of interfaces can you make to allow a computer to interact with the world around you? Think about almost any device that exists; chances are you can control how it works and get up-to-the-second information about what it's doing through a computer interface.

I'm actually going to try and avoid saying too much about computer games here, because so much has already been said about them, but I wouldn't really be doing this page any justice if I didn't add that computer games (and things which sort of seem like computer games, but might not be) are an utterly limitless field of exploration and experimentation. Anything that physically exists in the real world can be modeled on a computer screen, along with many things that don't physically exist. What kinds of virtual worlds can you create on a computer? What might make them different from the real world? Would these worlds have different levels of gravity, or even no gravity at all? Would they violate the Second Law Of Thermodynamics? Would objects bounce off each other in your virtual world, or would they simply pass through each other, as though each object were completely ethereal (which, in reality, they of course are)? What defines a computer "game"? Does a game have to have a goal and an end? If you make a program in which you fly a plane around but don't do anything else, is it a "game", since there's no competing and no winning? (Realize that in the real world, people debate endlessly over this very question.) What about a simulation of walking in the park? It could be like a first-person shooter, except without the shooting. Is it still a game then, or is it just some program that simulates walking around in the park? Either way, what would be in your virtual park? What sights and sounds would people experience there?

When I was young, I played an educational computer game (what would be called "edutainment" today) in which you had to build androids (robots which look like humans). Part of this process was stress-testing the different components for the robot's body, head, and feet, through experiments like dropping these components off the top of a building. By varying the height from which the components were dropped, you could observe the effects of various shock forces on the components. Although the simulation was fairly limited (it was pretty much binary; drop something below a certain height and it'll survive, drop it above that height and it'll smash), it offers a brief glimpse into how brilliantly effective computer simulations can be at being both entertaining and enlightening. Think of any physical phenomenon that you'd learn about in physics class: Gravity, evaporation, magnetism, light reflection, nuclear fission, and the like. All of these can be simulated on a computer. Virtually any physical process can be expressed as a collection of numbers, and portrayed graphically. How would you simulate and display two large planetary bodies passing each other in space and diverting course as a result of each other's gravity? How would you simulate and display a puddle of water evaporating on a computer screen? How would you simulate and display light reflection or refraction on a computer screen? How realistic could you make all of these processes? You can drop in some fairly simple calculations and simulate these processes on a computer screen, but can you make them so realistic that observers might be fooled into thinking that what's on the screen is really happening? How could you make a physics engine more accurate? On the other hand, who says physics engines have to be perfectly true to life? If you could bend any rule of physics you wanted to (sort of like the characters in the Matrix movies), which ones would you bend? Why? How? With a computer, it's possible. What would change if a car driving down a highway had much more wind drag than it would in real life? How about if it had much less wind drag? How about changing the traction of the tires, or the octane of the fuel? Other branches of science, like chemistry, can be simulated on a computer just as well as physics.

With all this thinking about what you could do with your computer, it's easy to forget about usability. Creating a true-to-life simulation of something is cool, but what if someone else wants to use that simulation? What if that someone else has no background in physics and doesn't understand what's going on? How could you make the program easy to understand and use for such a person? This same question goes for almost any program that you make. Great computer software is just plain great, but what if not everybody can use that great software? How could you make all your software intuitive, so that even if the user doesn't understand what's really going on at the deeply technical level, they can still gain an intuitive understanding of the program's main intent, and vary its parameters to the point where they can make the program do something interesting? User design is a fascinating field which borrows significantly from psychology and the visual arts. When you make truly great software, you'll have chances to make extensive use of both the scientific and the artistic sides of your brain. Anyone who thinks that computers are cold and soulless doesn't understand what can really be done with them. How would you make a realistic simulation of water evaporation stimulating and accessible for someone who has little or no interest in computers or science? You could use visual or audible stimulation to attract people's interest, but you actually don't have to use either; you can simply use interesting thinking exercises that get people interested by making them use their minds. How would you get non-technical people interested in something on a computer screen without using snazzy graphics or sound to dazzle them?

None of the ideas laid out here are spaced-out thinking. These aren't possibilities that we might be able to think about 100 years from now, 10 years from now, or even tomorrow. The great thing about all of these possibilities is that if you have a computer, you can sit down and start exploring them right now. They don't require the latest and greatest whiz-bang computer (although for some of them, the results might bemore impressive on such a computer). They're written here in mind of the fact that although the human imagination is a powerful thing, it's often difficult for the imagination to create anything sensible out of nothing; typically, the imagination needs a seed of some kind, an idea with which to build from. When one brainstorms, one only hopes that one can come up with ideas that are open-ended enough to lead to even more open-ended ideas. As tools that can aid both speculative and concrete thinking, computers are a potent way to build on those ideas.

Back to the main page