Wednesday, January 23, 2019

Problem Calculus: Motivation

Why a calculus for problems?  

With respect to programming, the software engineering industry doesn't really have very good metrics for what makes for good source code.  There is the concept of code smells (the name of which is already suspicious) where an individual "knows" that something is wrong, but is relying on "good taste" to justify the decision instead of being able to actually describe why things are problematic.  Best practices won't necessarily cross problem domain or programming language boundaries.  And they have the dubious property of being attached to successful people and projects as a justification.  Is the practice a predictor of success or was the people or was the problem?  There's always experience, which always works until of course it doesn't.  The underlying theme here is ultimately appeal to authority.  Problem calculus suggests a way to have objective arguments about what code is good and what code is bad.  The principles will also cross domain and language barriers.  

Let's move onto studies for programming languages and development methodologies.  The biggest factor in all of the studies I've seen is that they do not want to contaminate the study by using experts.  The argument goes that if you run a study with someone who is an expert then their familiarity will be the determining factor, but not whether or not the concept under study is good or bad.  So, the studies use novices and students.  This is of course problematic because any conclusion you reach can really only be known to apply to novices.  The hope of course is that knowing that some concept is better for a novice will also hold for an expert, but that's wishful thinking at best.  What we want is a way to run these studies with experts without having to worry about previous experience influencing the results.  Using problem calculus we can create novel problems that do not have their origin in anything familiar.  Because the problem is artificially created, we can control how difficult the problem is and we can make sure that the problem does not have its origin in a known concept.

Finally, when should you try to solve hard problems and when should you look for a way to simplify your situation.  Using problem calculus you can determine the nature of the difficulty that you are facing.  Some difficult issues can be simplified and some cannot.  There are trade-offs that you can make so that you can control the type of difficulty that you're facing.  When are you facing a hard problem and when are you facing an unfamiliar problem.  Verify the situation you're in.

No comments:

Post a Comment