I didn't realize just how hard this was until my company had an offsite yesterday where they let the sales people and the engineers play together. I guess I normally hang out with people who have at least been forced to do Java or Matlab programming or something in college, but a lot of paradigms I thought of as common knowledge aren't.
The best example we came up with (for explaining how a large web site works) was an Excel spreadsheet analogy. Imagine a spreadsheet that has a bunch of graphs constructed from the data. The spreadsheet is our database of all of our data, and each graph is a different web page view.
Programming is pretty interesting, and I think non-programmers would really enjoy knowing what's going on. Too often though, I think explanations go right over their heads, and they've learned to not even bother asking.
The basic one I like to use when describing programming in general is that programs are kind of like player pianos.
Someone comes to the programmer and says "Hey, I want a piano that plays a song that sounds like this" and the programmer goes and gets the paper that the player pianos use and he starts punching holes in it.
When he wants to hear how it sounds, he has to play it through his piano a few times. If he's done it a bunch, he probably can get a lot of it done without listening to it once.
Then when he's done programming the song and it sounds exactly like what the user described, he takes it back to the user and the user says he actually wanted a hamburger, not a player piano song.