Darren Hobbs and Les Stroud are in debate as to whether sofware development is like engineering or not. Les’ argument is that with software development there appears an abandonment of the use of methods that prove something is correct without using (i.e. testing) it. Darren on the otherhand is arguing that the reality software development practices are unlike engineering, simply because sofware has different properties than the physical world. Darren and Les arguments echo the Tracer Bullets and Protoypes analogy to software. If you got a moving target you use tracer bullets, however if it’s a fixed one, then consult your firing table.
In essence, different styles of thinking apply to different kinds of problems. The Analyst style is effective for fixed targets, domains that are relative mature, domains where we do have at our disposal formulations that allow us to develop conclusions from first principles. However, the Pragmatist style is necessary when the target is moving, when we don’t have enough information to make a good plan of action. There are of course other complexities in software development and a combination of thinking styles is more effective than just one. The important take out of this is to realize that choosing the right thinking style based on the characteristics of a problem may be an extremely effective strategy.
On this topic Bill Venners in “Can Static and Dynamic Languages Live in Harmony?” muses about a dual personality, that is he choses to use Python for quickly coding and Java for more industrial strength systems. Programming languages tend to favor one kind programming task over another. In fact I speculate that they tend to favor one kind of thinking style over another. It’s interesting to study what thinking style was used in developing a programming language.
Programming Language Thinking Style Scheme, Smalltalk Analyst Perl Pragmatist Python Realist C++ Synthesist Java Idealist
The table above is a first cut and a bit rough, it would actually be more precise if we studied the motivations behind the development and evolution of the language. Oh well, it’s nice to think about.