Tuesday, July 5, 2011

Large-scale critical thinking

There is a particular aspect of critical thinking that I will introduce by way of an analogy. Critical thinking is a way of spotting and fixing errors in an argument for a claim.  Debugging is a way of spotting and fixing mistakes in a computer program, such as a computer simulation.

For those who have never done any debugging, imagine this.  Writing computer code is never the hard part; 90% of programming is debugging.  After writing any moderately complex code, it has a pretty good chance of failing.  The best kind of failures are the ones that stop the program and tell you where it went wrong.  The worst failures are when the program appears to be fine, but gives incorrect results.

A major problem is that you don't always know where the bug is.  Now you could locate the bug by reading the code line by line and checking the all the syntax, control loops, and so forth.  But any program of moderate complexity will have thousands of lines of code.  And if we could spot the bug that easily, we would have spotted it as we wrote it in the first place.  A more effective way of locating the bug is to use tests to isolate it within a small region, and then look line by line.

Most arguments don't involve thousands of steps, so most of the time you can find errors by just going through step by step.  But there are exceptions.

Many arguments, for instance, involve scientific papers.  As a blogger, I think laziness is a perfectly valid excuse to not examine a scientific paper in detail, but if you don't accept laziness, there are other reasons.  If there are problems in a paper, they may be impossible for a lay person to spot.  Or they may just be plain impossible to spot.  They may involve details omitted by the authors, or details in other papers.  We could also be cherry-picking a single study, but we'll never know unless we look outside the study.

Another example are conspiracy theorists and physics cranks.  Such people construct a whole universe of details to support their view.  The worst part is that often each universe is unique.  Even if you spent all that effort to locate the errors, you've only debunked the claims of... one person.

In these situations, and others, we may need to resort to larger-scale critical thinking.  How can we examine an argument for a claim without going into the details?  How do we find a bug without looking at code line by line?

A common technique is to execute the code with simpler inputs and watch what goes wrong with the output.  This would be analogous to using reductio ad absurdum.  For example, if I accept the argument that homosexuality is wrong because the Bible says so, mustn't I accept the same argument against wearing clothes with mixed fabrics?  Clearly there is an error in the argument, but we still need more work to pinpoint it.  Pinpointing the error might consist of discussing where the Bible came from, and why this is an inappropriate source.

Another example that I have actually blogged about is the ontological argument.  Most treatments of the ontological argument simply say that it is absurd to prove the existence of something with mere logic and without any investigation of the real world.  But this does not pinpoint the exact error in the ontological argument.  Knowing this, I thought it would be an interesting exercise in modal logic to pinpoint the error.  But there are other times on my blog where I take the opposite approach and look at the big picture only.

There are more critical thinking techniques that may not have any analogy to debugging.  Appealing to experts comes to mind.  Why locate an error when you can instead locate an expert who will locate it for you?  Of course, you have to trust that the expert really does know how to spot errors, and that the expert is not omitting errors in the other direction.  A good critical thinker tries to understand the nature of experts, and does not use them indiscriminately.

One major difference between critical thinking and debugging is that the debugger must locate the precise error to fix it.  The critical thinker only needs to show that there is an error somewhere, and does not need to pinpoint it.  And yet, if you can pinpoint the error, or show that there is none, this trumps all large-scale analysis.  It doesn't matter if an expert made the argument, if we can show the argument is incorrect.

And yet, small-scale critical thinking does not really trump large-scale critical thinking.  In such a detailed analysis, it is easy to make mistakes.  To miss errors or see errors that aren't there.  Also, as with investigations of paranormal phenomena, these details can be completely lost to time.  Even in absence of laziness, large-scale critical thinking is an important component of any analysis.

I think this is another one of my posts where the conclusion is, "Critical thinking is hard."


Larry, The Barefoot Bum said...

The worst failures are when the program appears to be fine, but gives incorrect results.

The worst failures are when the program appears to be fine, but intermittently crashes or gives incorrect results.

I don't think critical thinking is all that difficult. It takes a degree of skill, but skill can be learned. It takes some patience, but not that much. More importantly, it does not require the creativity and insight that original work in a field requires. I have no ability to do original work outside my own specialties (computer programming, philosophy, political science and economics), but I can spot a bad argument in almost any field.

The only "hard" part of critical thinking is honesty. Not just the day to day honesty of not lying, but, as Feynman describes, the ability to bend over backwards to not fool yourself. See Cargo Cult Science.

miller said...

I don't know why I forgot to mention intermittently buggy programs. There's some wonderful analogy in there about new age and/or liberal religions.