Whilst trying to provide an understandable explanation, it struck me that the answer given can help measure the depth of someone's development background and experience.
The answer I gave (and sub-sequent cross-examination I endured) proceeded something like this:
- Child: So why did Vista cost so much to make?
- Developer: Because its a very complex system, that requires lots of (expensive) people to create.
- Child: Why is it so complex?
- Developer: <Sigh - here we go>
Well let's imagine a story. A person (called a customer), tells you a story about what they want the software to do. - Child: Uh-huh
- Developer: Software developers take that story and re-write it in a language that a computer understands.
- Child: What if the story is in French?
- Developer: That doesn't matter - developers use a "software language", like Ruby, which the computer understands and is written in English.
- Child: So what is a software language?
- Developer: Its like a normal language, with two differences: firstly, the language has a very limited vocabulary; secondly, it must be used exactly - no spelling, punctuation or grammar mistakes allowed.
- Child: So what happens if you make a mistake?
- Developer: The computer won't understand what you've told it.
- Child: Wow! Does that mean you have to get the story exactly correct, before the computer can read it?
- Developer: Weeeeell.... kinda.... Its more like the computer will do something different from what we asked it.
- Child: So why did Vista cost so much to make?
- Developer: <Sigh - lets try a different tack>
You remember the story that the developer is translating? - Child: Uh-huh
- Developer: Well, although the story is simple to the customer; to the computer, its hideously complex. So complex that no single person can understand it all. Therefore the story is divided amongst lots of people, who each attempt to understand bits of it. Its about managing complexity.
- Child: Uh-huh. Are we nearly there yet ...