Wednesday, February 02, 2011

Rationalism vs Empiricism

I'm currently reading "The Design of Design" by Frederick P. Brooks, Jr. and found one of those nuggets in Chapter 8.  Mr. Brooks provides his software engineering angle on the difference between Rationalism and Empiricism.  It's so good that I've got to share it.  He says the following...

"The rationalist believes that man is inherently sound (and good), subject to mistakes, and perfectible by education.  After right education, maturing experience, and sufficient careful-enough thought, a designer can make a flawless design."

"The empiricist believes that man is inherently flawed, and subject repeatedly to temptation and error.  Anything he makes will be flawed.  The design methodology task, therefore, is to learn how to determine the flaws by experiment, so that one can iterate on the design."

Mr. Brooks acknowledges the fact that he's a die hard empiricist.  He goes on to say...

"A program is a pure mathematical object and in principle can be designed perfectly by correct thought.  The difficulty is not with the design medium but with the designers."

"This firm faith in fallibility prescribes a design methodology that includes design, early prototypes, early user testing, iterative incremental implementation, testing on a rich bank of test cases, and regression testing after changes."

This last sentence describes the implementation approach to Agile Software Development.  I don't see how anyone that would put themselves in the empiricist camp would favor the waterfall approach to creative software engineering. 

No comments: