Tuesday, November 24, 2009

Programming Plato’s New Computer

There are four things that have a huge impact on how we think about solving problems as software developers: our experience, education, programming languages and Plato’s computer.

Plato’s computer is the ideal computer. Not the best computer, but the idea that we have in our minds about what a computer is and how it works. Our programming languages are not yet so high level that we don’t have to think about Plato’s computer when solving a problem. After all, we’re programmers, and we have to program something. We are programming Plato’s computer.

So what does Plato’s computer look like these days? It has a processor, RAM, a disk, a network connection, and I/O capabilities.

Computer technology changes very rapidly. But notice that Plato has been using the same computer for a very long time. I got a Commodore 64 back in the 80s and learned to program it using BASIC. Real computers have changed a lot since then. But Plato still has the same one.

Sometime in the next 20 years Plato will be getting a new computer. There will only be one additional letter in the description of his new machine. An “s”. It will have processors, RAM, a disk, a network connection, and I/O capabilities.

That’s right, it will now have processors.

In this business, if something has been the same for 30 or 40 years, and then changes, that is a big deal. If one of the four things that impacts the way that we think about solving problems changes, that is a big deal. This is what we call a paradigm shift.

Once Plato gets his new computer, we will all be doing things differently. After all, that is the cause of him getting a new computer.

Most of us now have computers with multiple processors and/or cores. My laptop has two. My Windows desktop machine has four. My Linux machine has eight. Maybe you know some really cool guy who has thirty two. The other day I read about a machine that has 255,584 (Unnecessary nerd fact: this machine also has 362 terabytes of RAM and a 10 petabyte file system.) Even though these machines exist, it has not penetrated through to the ideal. It won’t until most machines have thousands of cores. Today most machines have one or two cores. Some day most will have thousands. Some day millions.

A huge change is coming. It has already started and will be complete sometime in the middle of my career. As with all paradigm shifts, there will be denial, crisis and maybe even despair.

As for me, I would like to start wrapping my head around this as soon as possible. Many are already doing this. I want to learn how to program Plato’s new computer. At the very least it will mean shifting my thinking from sequential to parallel problem solving, investigating new (to me) languages such as Clojure, Erlang and Haskell and questioning common architectural patterns which are based on the limitations of Plato's old computer.

What do you think are the most significant changes that will occur as we move to this new paradigm?