KillerSites Blog

Don't let theory get in the way of practical application.

February 11, 2005

One of the disturbing mindsets in software development and web design today, is the sacrifice of practical concerns in favor of theoretical constructs.

Case in point:

Recently a young friend of mine (who is studying computer engineering,) told me an interesting story about a class project where each student had to produce a piece of software … the results, and the professors reaction to the results, are interesting.

Sad but true:

When all things were said and done, only one student was able to produce a working application. The irony was that this student got a failing grade because his code did not meet certain theoretical constructs!

The above example illustrates a problem in the way many programmers think: putting theory over practicality.

With that failing grade, the professor has sent the wrong message to his students: that results are not as important as being true to the theory. And people wonder why so many Java projects fail…

Why theory over practicality is total bull:

  1. Broken but theoretically correct software, doesn’t pay the bills.
  2. Theories are constantly revised; so don’t be to quick to marry them.

I think the first point is self evident, so let’s look at the 2nd point and consider one of the fundamental theories of modern software development: inheritance.

At one time in the distant past (5 years ago,) design-by-inheritance was the theoritically correct method of software development. At some point though, people began to discover that inheritance had its’ problems and now (in many cases,) design-by-interface* is the preferred method.

Theories change

The shift from design-by-inheritance to design-by-interfaces is but one example of how theories are constantly updated to reflect practical realities.

If anything is consistent of about software development, it’s that theories change. So don’t sacrifice practical application today, to satisfy some theoretical construct that may very well be discredited tomorrow.

Stefan Mischook

1. ‘bull’ is a technical term that conveys a complex meaning in a terse and well understood format.
2. In Java, interfaces are classes void of method implementations.