nolancaudill.com thoughts and whatnot

Zen and the Art of Software Design

I am currently reading Zen and the Art of Motorcycle Maintenance by Robert Pirsig and it has been chock-full of philosophical insights. One passage in particular jumped out at me due to its simple, but powerful, message:

The material object of observation, the bicycle or rotisserie, can’t be right or wrong. Molecules are molecules. They don’t have any ethical codes to follow except those people give them. The test of the machine is the satisfaction it gives you. There isn’t any other test. If the machine produces tranquility it’s right. If it disturbs you it’s wrong until either the machine or your mind is changed.The test of the machine’s always your own mind. There isn’t any other test.

This quote from the book could relate to almost any field involving technology, but it strikes a particular chord with me in regards to software design and development.

One way this quote can be looked at is an explanation of why a software engineer chooses and, almost more importantly, not chooses a tool for a particular task. We’ve all seen the flame wars that erupt on blogs and message boards about Tool A vs Tool B. Usually each of these pieces of software was developed to fill a specific need for a particular person whose needs were either not fulfilled by existing tools or the existing tools didn’t fit their world view. These original creators were creating “tranquility” for themselves.

When software is created for the reason of creating peace of mind in the developer, the result is often that a tool that doesn’t feel right to them is getting replaced. An example of this is the new web frameworks that have sprouted up over the past few years, mainly Django and Rails. The creators of these pieces of software dreaded the ordeal of writing yet another website or web app in Java or PHP because to them these methods didn’t produce tranquility and just felt wrong for the task at hand. So these developers wrote something that felt “right”.

Since both Rails and Django ultimately were fulfilling the same purpose, other developers that wanted to go down the path of rapid web development had to choose between these two. On the web, whenever there is no clear advantage of one technology over another, conflict arises. You have people entrenched on both sides of the debate of which technology is better. What is not seen is that neither side is inherently right or wrong. Rightness is only determined by what creates tranquility in the person using the tool.

If you like Ruby and the Rails way of doing things, go that way. If you enjoy Python and the Django method, go with that. The main goal is not to choose some arbitrarily correct right tool, because what may be the bee’s knees to one developer may be chopped liver to another. It’s usually not that extreme, but the point is that often arguing over particular technologies is like arguing over favorites colors. The only winners are the ones that choose the tools that suit themselves the best.

Bookmark and Share

3 Comments

Great post, and I agree with it completely. I’m unsure, though, that Django and Rails is a very good example. In my view, the Django and Rails camps are quite friendly to one another, even going so far as to host events together (see ‘Snakes and Rubies’). The creators of both projects have publicly praised the other (“If there was no Rails, I’d probably be using Django,” and vice-versa).

If anything, Django vs. Rails seems to be a shining example of how to properly have a friendly rivalry in our industry without it devolving to personal attacks and boring pedantic debates over stuff that is ultimately not that important. But it’s certainly possible that there has been nasty conflict that I simply haven’t been privy to.

But you’re totally right with the message of your post. I love the line: “Rightness is only determined by what creates tranquility in the person using the tool.” Beautiful. Well-done.

Posted by Jeff Croft on 27 November 2007 @ 10pm

Jeff, first off, thanks for dropping by! It was your post and the subsequent comments about the benefits of CSS frameworks that inspired this post.

You are probably right with Django and Rails not being the greatest examples of feuding camps. I went back and read a few of the posts that I thought were Rails vs Django oriented and upon second reading, it looks like I may have read too much into them. Luckily, the theme of the post is not lost.

vi(m) versus emacs would have been a much better example and one which definitely falls under the category of “ultimately not that important.”

Posted by nolan on 28 November 2007 @ 12am

> vi(m) versus emacs would have been a much better example and one which definitely falls under the category of “ultimately not that important.”

Amen to that. :)

Posted by Jeff Croft on 28 November 2007 @ 1am

Leave a Comment