Humans have a strange obsession with purity — it’s often accepted that the more “pure” something is, the better it is. By way of Simon Willison, I saw this quotation from Mark Pilgrim about HTML:
Anyone who tells you that HTML should be kept “pure” (presumably by ignoring browser makers, or ignoring authors, or both) is simply misinformed. HTML has never been pure, and all attempts to purify it have been spectacular failures, matched only by the attempts to replace it.
It made me really think about the utility of the concept of purity. I think that placing a high value on purity is in nearly all cases a case of intellectual laziness. An obsession with purity allows you to avoid critically evaluating factors that might otherwise go into making the best decision. For example, let’s say I’m writing an application using Ruby on Rails and I need an XML parser. Some would argue that I should only use “pure Ruby” XML parsers and leave it at that, but that’s not helpful. Impure parsers may be faster, or offer more features. On the other hand, pure Ruby parser may be easier to deploy. But the discussion should center on those competing benefits, not on the abstract concept of purity.
If you look at the history of purity as a virtue over the course of human history, you will certainly find that any fixation on it has been unrealistic at best and disastrous at worst. Reject purity. It’s overrated.
November 3, 2009 at 2:27 pm
Abstracting problems is very, very worthwhile; pure mathematics (which I am not associating because of the name, but because in a certain sense it only looks at problems which are pure, stripped to their essential features and ignoring many real-world concerns) is a fruitful science. Maybe for those on the real-world application front, purity is worthless, but don’t forget that there’s a huge setup of pure work going on behind you.
November 3, 2009 at 3:02 pm
“The price of reliability is the pursuit of the utmost simplicity.” – Tony Hoare
“Simplicity does not precede complexity, but follows it.” – Alan Perlis
November 3, 2009 at 4:40 pm
Reject purity. It’s overrated
Don’t let the Purity Ball crowd hear that.
November 3, 2009 at 5:30 pm
“purity” and “elegance” are two of the most dangerous words in programming.
“elegant” usually isn’t. It usually stems from a flash of insight into the general character of a problem – which is fun, and often useful – but rarely is it the case that slavishly following up on that insight will result in a final system that is any more “elegant”, or “clean” than just doing something simple that works. “elegance” generally incurs a cost in development time and system complexity that is not paid back.
Of course, I am as bad as anyone else at following this advice. I love elegance. I love seeing the structural pattern that can be used to solve not just this problem, but a whole class of problems similar to this one. But you have to keep that impulse under control. As often as not, you will learn something about the problem that makes it a worse fit for that general solution once you’ve solved the problem once in a simple fashion and looking at the result and how people use it.
November 3, 2009 at 5:34 pm
Generally speaking, elegant code is the code I have to change first when I features go into testing.