Formalize and expand

A thread in theserverside about whether OOP is good or not stroke a nerve and nicely coincided with my current thoughts about automation.

I haven't studied psychology, but I think thinking can be described as building abstractions and processing them with language (which is an abstraction, too). The goal is to use the abstractions as building blocks for new abstractions and repeating this ad infimum.

The limits of language are the limits of one's world
 - Ludwig Von Wittgenstein

In software development I think the only way to proceed is to formalize all good practices and other "manual" stuff.

Take programming paradigms as an example of how they formalize things that were only "best practices" (or several of them competing) in their predecessor:

Of course OOP has its problems. But the answer is not go back, but forward. It's much easier to build another abstraction level using OOP than "skip over it" using the procedural paradigm.

(There are other "branches" of paradigms like functional or logic programming that most certainly have potential as building blocks for future languages.)

This is what I meant in my earlier blog: keeping the process manual prevents you from building upon the current process.

But why is that people who are capable of using formal languages (i.e. programmers) are so reluctant to use their ability in SCM? I have several theories, but more about them later...

Originally published on 2005-02-03 at under category Art of programming