There is a nice reward, when learning how to program: not only do you realize that thinking is a projection of thoughts into the world, but you also realize, that whatever you think about your world, it requires a structure that connects your thinking about the world to impressions of the world, that you can share with other human beings1. In short: there is a world, that exists independently from your thoughts about the world.

When you think of writing a computer program there’s a set of questions you would consider:

  • what is the input to the program, i.e. what data is given.
  • what is the output of the program, i.e. how is the state of the world changed.

And from here on, we go the route to abstraction.

Thinking of data, what it is? In a purely computer way of thinking, data is a certain state of the world. There’s some piece of hardware and inside this hardware there are switches (which is basically what a processor is) that either set to on or off.

But when you write a computer program you usually don’t think about these switches, you think about a higher level of abstraction, like things that can be ovserved in the “real world”. Here starts the journey to successfully writing software, by selecting the proper things to observe. If you fail here, your whole program won’t ever do anything good, as you’ll always miss the point.

I like to spend some time in the beginning of a software project on really grasp the abstractions with which I’m going to work.

Going back to the concept of state of the world. When we’re going to describe the world as state, we follow a path that refers to the concept of representation, i.e. that there is some state out there, that we can represent in a certain fashion in order to gain new insights into interrelations of the world.

It is clear, that every deductive way of gaining new insights, depends on the basic observations and concepts of representation.

For example, when using a progamming language like Java, your basic concepts are objects, their properties and their capabilities (i.e. methods of an object). So the state of the world has to fit in a concept of distinguishable, separated things, that can interact with each other by certain means.

A contrary concept is given by a programming language like Clojure, which is purely functional. There are no objects, no things in the world, only interactions and transition of representations of observations of the world. From a programmer’s point of view, this approach requires one to consider oneself as a doer. One has to take some given data and do a transition on this data. There is no contemplation of the state of the world, but it is directly given by the parameters of the function2.

As one learns by experience and hard work, there is not one right approach. Certain conditions require a certain approach and one has to learn different ways of describing the world and create projections from one system of describing the world to another one3.

And thus, when learning how to program, one learns also humbleness, in that one can not force others into one way of describing the world.


  1. If this sounds like the philosophical concept of realism, I’m glad to made my point. As even Nelson Goodman, who refers to himself as fan of nominalism, has to admit, that thinking of the world requires something out there that we refer to with our expressions (see Nelson Goodman, Ways of Worldmaking, 1978), I feel pretty confident with my understanding of the world. Besides that, I would be very glad, if someone can point out to me where one can find strong evidence against this understanding. ↩︎

  2. Interestingly a similar concept is mentioned by Romano Guardini (“Welt und Person”, Würzburg, 1962, p. 73), that there are two typical ways of approaching the world. One contemplating which makes a distinction between the inner experience of the world and the outer world and an approach where oneself is in the world, which does not require a separation between the inner experience and the outer world. ↩︎

  3. In this regard, the concept of Paul Feyerabend seems fertile, as it points out, that we have to life within the boundaries of our limited capabilities to explain the world and accept, that other people, other cultures are also able to understand crucial parts of the world and that this, what we understand, is not the only slice of the world that’s worth understanding. ↩︎