Programming is like magic
Robert Schuster
|Wednesday 20 December 2006
|Ok friends this is going to be a long post and I try to get the introduction short at least:
- I am profiting from free software enormously.
- I know that everyone can do 1.
- I like telling how this can happen. :-)
- I am currently preparing an introductory presentation about free software.
- I will put my thoughts here for all to discuss & criticise it.
The following notes are inspired by a transcript of a talk by Richard Stallman and the many other authors whose essays, notes and comments I read.
When I have look at the usual programming language constructs from which software is being built then this is stuff like the if-, while-
or the switch-case statement. These statements are highy deterministic: They will always do what I expect from them.
Let us have a closer look at the if()-statement: An if() will only cause a branch in the program sequence when the expression inside its brackets evaluates to true. It will never happen that while the expression is true the branch is not taken.
Such an if() amazingly resistant: Even in a ten year old application all the if()s contained within it will work as they did at the time the application was compiled. Compare that to spare parts on you car?
The if() is completely unaffected by the environmental condition it was 'produced' in. Whether it is typed sitting in a cleanroom or in a dirty backyard does not matter for the functionality of the statement. I wonder how much energy is spent by microchip manufacturers generating a suitable production atmosphere in their fabs?
One of the most stunning features of an if() is that if I want to use one in the companies' projects I do not have to ask my boss whether such action will exceed the budget limit.
Yeah, software programmers have it really easy: Compared to technical engineers we can focus our work on the problem the software should solve. Hardware makers for instance have to deal with space, heat and cost constraints when designing electronic circuits. They have to think about additional wiring to power every electronic component and niceties like signal propagation delays and leakage current.
In electronic circuits the contingency risk rises with each component added to the design. In my software application it makes no difference whether I use one, a hundred or millions of if() statements. All of them will work flawlessly and the contingency risk is zero.
The effect of software programming being such a riskless and deterministic technology is that a single programmer can construct, overlook and maintain a software system that has a much greater complexity than it would be possible for a mechanical, electrical or electronical system.
I am convinced that software is the key to built the most complex and sophisticated systems. Furthermore I think that this ability makes it possible to construct humanity's most important tools: Things that keep our connected world together like internet routers, management software for the stock exchange or public administration but also global knowledge databases like Wikipedia.
As a programmer you may draw conclusions about the implementation from seeing any of such systems at work and have a real chance to participate in their development (get hired). For someone with no understanding in programming it is completely inexplicable how those software systems can work at all. Creating a program that does something useful and which did not exist the moment before must be complete magic to such a person. A programmer may tell everything to a non-programmer how an application does its job and she/he will not be able to verify that.
At this point you may draw your own conclusion. Mine looks like this: My ability to program gives me great power - especially over those
who do not have this ability. For them I can do things they cannot understand and which they cannot scrutinize reliably.
If I would not have the ability to program I would not like to live in a world where programmers do not share their power openly and honestly with everyone.
I think free software is the way to get rid of the difference in power between programmers and non-programmers.
Feel free to comment or drop me a line if you're not a fellow: robertschuster - at - fsfe.org


