Software engineering and philosophy

NOTE HXA7241 2011-05-22T09:35Z

Software engineering and philosophy are in a sense (with a little imagination) twin subjects.

The single core idea (to be rather bold and sweeping) in philosophy is the distinction of necessary and contingent: ‘necessary’ being what is always true, what is known logically; ‘contingent’ being everything else, that may or may not be known or true according to circumstance.

The single core idea in software engineering is abstraction: which is the fusion of a fixed part with a varying part. And this maps exactly to necessary and contingent. An abstraction says that within its context a particular thing is necessary – the fixed part – but also that the rest is contingent – the varying part. (A single bit number is always a number – by definition, but it might be 0 or 1 – completely by circumstance.)

Software engineering builds from this a hierarchical, nested structure. Each varying part is held by a fixed part, but each fixed part is itself the varying part of its surrounding context.

Software engineering is constructional philosophy.

Philosophy, as an activity, could be said to be about clarifying our thoughts. It does not change what exists, or the limits of what we can think, it just tries to make the two match up sensibly.

And this is what software engineering is doing. It neither changes what is wanted, nor what can possibly be computed, but just tries to bring the two together. Software engineering is first about clarifying what is wanted, which then leads straight to seeing how to build it. As far as we clarify what to build, we have clarified how to build it.

Software is clarity.

Russell says: “. . . as soon as definite knowledge concerning any subject becomes possible, this subject ceases to be called philosophy, and becomes a separate science.” (‘The Problems Of Philosophy’) And this too maps directly to software: as soon as we solve a problem we have a software part/component/library – that thing is known, and in software that means constructed. And then we no longer need to engineer it, we can simply copy it.