spqrAs a computer programmer or software developer, you long each day for world domination. To be precise, you stagger constantly between world domination (in German “Weltherrschaft”) and total powerlessness, between absolute might and complete plight, between omnipotence and complete impotence. One day you feel like a mighty emperor, and the next day you feel like a powerless subject. Here’s why:

In the world of your own software, you are the lawgiver with absolute power and undisputed authority. This means world domination: everything follows your command without the slightest kind of opposition or resistance. The programmer determines in detail what every object, every class and every function should do, step by step, in every possible situation and in every possible context.

“The computer programmer is a creator of universes for which he alone is the lawgiver…No playwright, no stage director, no emperor, however powerful, has ever exercised such absolute authority to arrange a stage or a field of battle and to command such unswervingly dutiful actors or troops.”
(Joseph Weizenbaum)

The programmer and developer is the ultimate commander. Ideally he can create a whole application with only a few lines of code, he can create worlds with his fingertips. That’s the fun part. Yet despite all this power, and no matter how smart you are, as a programmer you will typically trying to understand what is going on most of the time. The problem is you usually use a lot of code from others – plugins, modules, units, libraries, frameworks – which you do not and can not understand completely. Even your own legacy code from the past is sometimes difficult to understand. Debugging foreign code is like walking around in a foreign city without a map. You don’t know how everything is connected, where the center is, or where everything leads to.

And there are always bugs around the corner waiting to be solved. Bugs belong to software like explosions to rockets. Rockets are based on controlled gas flow which results in explosions. Software is based on controlled program flow which results in features and bugs: there is saying that “the only difference between a bug and a feature is the documentation.” If debugging is the process of removing software bugs, then programming must be the process of putting them in.

Because there are always code parts which he doesn’t understand or bugs which he is trying to solve, a programmer gets often completely stuck, and falls into total powerlessness, until he is able to find out what happened. For a programmer, it is extremely important to find out what happened: either by examining existing or newly created log files, or by debugging (that is by stepping through the code bit by bit). Once a bug has been identified and located by logging and debugging the code, it is often easy to remove it, and the programmer is ready to dominate the world again.

This is why programmers stagger constantly between world domination and total powerlessness. Programming is 20% world domination and 80% frustration. Unfortunately, the frustrating times prevail, but the world domination times compensate for everything.

(The Flickr photo is from the user Toni Villen)