Examine the computing evolution's effect on programming

Justin James explores a number of points from Gordon Bell's essay, "Bell's Law for the birth and death of computer classes: A theory of the computer's evolution." He also describes what programmers will need to know if the smartphone class of computers comes to fruition.

Gordon Bell has a long and storied history in the computer field, and he certainly knows what he is talking about regarding the industry. Bell's Law is like a large-scale version of Moore's Law; although instead of dealing with processing power, it addresses the long-term jumps in computer "classes" such as "minicomputer" or "supercomputer." (He's also very unique -- for some time, he has been covered in cameras and microphones so he can archive his entire life.)

Today I took the time to read his essay Bell's Law for the birth and death of computer classes: A theory of the computer's evolution. (His essay seems to be somewhat rough in terms of a couple of paragraphs and graphics -- it is definitely not fully polished yet.)There are a handful of points in his essay that I feel are extremely crucial for forward-looking programmers to understand and that touch on topics I have been thinking about a lot lately. I examine each of these points in some detail.

The evolutionary characteristics of disks, networks, display, and other user interface technologies will not be discussed. However for classes to form and evolve, all technologies need to evolve in scale, size, and performance, (Gray, 2000) though at comparable, but their own rates!

(Bell's Law for the birth and death of computer classes: A theory of the computer's evolution, pp. 2 - 3)

In other words, a sudden leap in CPU, RAM, disk, network, display, etc. capability alone will not produce a new class of computers; they need to evolve in tandem with each other. It's equally foolish for developers to focus on just one issue of the programming end of things when trying to write software for new classes of computers.

Bell believes that smartphones and similar devices are the next class of computers. I am inclined to agree from the standpoint of consumer grade computing and a number of business purposes. Programmers targeting these devices are not looking at the big picture; they are treating the devices as slow PCs with low amounts of RAM, disk space, and slow networks. In reality, they are much more than that. Until programmers targeting these devices recognize this (as well as the reasons why people will be choosing them over PCs), the software for the devices will continue to be fairly lousy.

Nathan's Law, also attributed to Bill Gates, explains software's increasing demand for resources:
  • 1. Software is a gas. It expands to fill the container it is in.
  • 2. Software grows until it becomes limited by Moore's Law.
  • 3. Software growth makes Moore's Law possible through the demand it creates; and
  • 4. Software is only limited by human ambition and expectation.

(Bell's Law for the birth and death of computer classes: A theory of the computer's evolution, p. 16)

Bell is talking about the fundamental principle underlying "bloatware." We use general purpose PCs to do a lot of processing; if we shift to smartphones with limited RAM, CPU, and disk resources, we are looking at keeping this all on the server and using the smartphone as an input/output device. But how many desktop applications can legitimately run on an application server at a reasonable cost? It is one thing to slap a $600 PC on 10 desks; it takes a lot more than $6,000 to buy a server that can handle the same load that those 10 PCs can handle. Those "economics of scale" get even worse when the users are doing intensive work, such as multimedia content editing, and smartphones do not have the power to do these things themselves. It's a quandary, and developers are going to need to deal with it. Users and customers will understand that some functionality will be given up along the way, but how much are they willing to sacrifice?

In 2007, the degree of parallelism for personal computing in current desktop systems such as Linux and Vista is nil either reflecting the impossibility of the task or the inadequacy of our creativity. Several approaches for very large transistor count i.e. 10 billion transistor chips could be:
  • 1. system with primary memory on a chip for reduced substantially lower priced systems and greater demands that either require or imply proportionally lower cost software
  • 2. dedicated functions for networking and improve user interface including speech processing for text to speech and spoken commands
  • 3. graphics processing, currently handled by specialized chips is perhaps the only welldefined application that is clearly able to exploit or absorb unlimited parallelism in a scalable fashion for the most expensive PCs e.g. gaming, graphical design
  • 4. multi-core and multi-threaded processor evolution for large systems
  • 5. FPGAs that are programmed using inherently parallel hardware design languages like parallel C or Verilog that could provide universality that we have never before seen, and
  • 6. inter-connected computers treated as software objects, requiring new application architectures.
Independent of how the chips are programmed, the biggest question is whether the high volume personal computer market can exploit anything other than the first path.

(Bell's Law for the birth and death of computer classes: A theory of the computer's evolution, pp. 22 - 23)

I have echoed many of these sentiments, particularly the one about "the degree of parallelism for personal computing." Number 5 is where some folks are going now, but instead of having actual field-programmable gate arrays (FPGAs), they are using the shaders on GPUs, and the possibilities are rather limited as a result. Number 1 is scary to a lot of people who make a living programming. After all, it's more difficult to turn a profit on lower-priced software. When you combine that with the fact that the trend towards ad-supported software must end if the smartphone era becomes a reality (where will the ads appear on those screens and still leave a usable UI?), I suspect that we will see a resurgence in the paid-for software market, but with a few twists that we have never seen. I won't even try to predict what those changes might be.

I know I probably sound like Chicken Little, but this issue is real. Everyone who knows what they are talking about is talking about this (I'm not elevating myself to their ranks, by the way).

We went to multi-core CPU architecture on the desktop because current manufacturing techniques could not continue increasing clock speeds within the reasonable cooling and power capabilities of a standard desktop PC. The only way to maintain Moore's Law is to keep the cores relatively slow and increase the number of cores. On the mobile front, we are hitting the limits of battery lifetime and cooling. Thus, we should be seeing multi-core architecture on the smartphone platform fairly soon. On a standard PC, software developers can get away with being lazy and not doing parallel computations, because even the cheapest desktop CPU can run a single thread very quickly. That luxury does not exist on the mobile platforms due to the resource constraints, especially if we expect them to pick up more and more of the work currently done on overpowered desktops. Programmers who do not learn parallelism will not be able to successfully write software that meets market needs in the (somewhat) near future.

Since the majority of PC use is for communication and web access, evolving a small form factor device as a single communicator for voice, email, and web access is quite natural. Two things will happen to accelerate the development of the class: people who have never used or are without PCs will use the smaller, simpler devices and avoid the PC's complexity; and existing PC users will adopt them for simplicity, mobility, and functionality e.g. wallet for cash, GPS, single device. We clearly see these small personal devices with annual volumes of several hundred million units becoming the single universal device evolving from the phone, PDA, camera, personal audio/video device, web browser, GPS and map, wallet, personal identification, and surrogate memory.

(Bell's Law for the birth and death of computer classes: A theory of the computer's evolution, p. 23)

He is absolutely right -- most people do not do much with their PCs most of the time, but almost everyone goes beyond communication and Web browser at least some of the time. I predict that we will end up with a universal docking station type of system, with a single cable to connect to devices. There is no reason why it cannot happen now. Simply plug a USB-type cable into your smartphone at one end and a powered hub at the other end, and you can have video, keyboard, mouse, optical storage, sound, and even wired networking -- all for under $400 per docking station at today's prices. This is compelling, especially if those applications are usable at a limited functionality on just the phone itself. For example, a BlackBerry-style messaging system becomes a client equivalent to Outlook when docked. Why sync when the device could replace the computer? This will not be a perfect solution for many workers, just as the client server never fully replaced mainframes. In the future, I suspect that PCs will be considered a legacy class of computers.

Finally, Bell's grand slam statement:

New applications will be needed for wireless sensor nets to become a true class versus just unwiring the world.

(Bell's Law for the birth and death of computer classes: A theory of the computer's evolution, p. 24)

He has summarized the entire problem with the current state of affairs in the mobile computing mindset. Programmers are not looking at a new class of computing -- they just want to do the same tired tasks but without wires.

Folks, no one is happy with the way they compute currently. It is why people are running like rats from a sinking ship to the Web, and they are quickly discovering that the Web is a burning house and not a safe haven. The Web as an application platform is not a different computing paradigm; it is a gussied up version of "green screen" systems, which is a paradigm that proved inadequate in the late 1970s.

If the smartphone class of computers comes to fruition, programmers will need to know how to do the following:

  • Distributed clients, single-server computing
  • Offline operation with no interruption and minimal reduction in functionality with instant, transparent syncing and concurrency resolution, while maintaining the safety of "data at rest" on remote devices and "data in transit" to/from the device
  • Efficient multi-core, low RAM computing
  • Elastic/liquid UIs that adapt on-the-fly to changes in display and input technologies; in other words, UIs that can transition from 240 x 320 displays and thumb keyboards to 1650 x 1250 with full keyboards and a mouse with a single cable connection, and no warning (and back!) and appropriately scale up and scale down capability
  • Monetize software without advertisements

It is going to be a very different world if Bell turns out to be correct, and I feel that he probably is. In many Asian countries, the cell phone is the computing platform of choice. In the Third World and developing countries, cell phones trump PCs because they are simpler, more reliable, and require less infrastructure.

The use of the PC as a primary work tool forces users to act in completely unnatural ways, like being tied down to a desk with minimal face-to-face interaction with peers and colleagues. For all of the supposed advances in communications that the PC has given us, most people communicate worse with PCs than in person due to the one-dimensional nature of the PC; most people use them as text editors with a variety of data storage and transmission options. The smartphone class makes video, still images, and sound infinitely easier to create and consume. I am fairly certain that this is where the market is headed in the future, so now is the time to prepare.