# How do you explain how programming works to complete non-techies?

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.

I agree with Brian - sales people only need to know what it does and have confidence that it will do it.  You can describe it in detail or use analogies if you find that a good exercise in team building, but the reason I am a good sales person and not a coder is I find one interesting and the other not. I submit software people really do not care about a sales process either.

One analogy I found useful is airline terminals.

Imagine you must:

1. load cargo onto an airplane
2. ship the cargo from city to city, across the continent and back
3. change type of and amount of cargo along the way

At each stop, you have a logic condition such as an if statement. Data is manipulated, then the procedure continues.

To accomplish some goal like processing X tons of steel into rods, the plane may have to make multiple trips (as in a loop) to a factory. Conversely, if you have enough processing centers, you can deploy multiple planes, as in parallel processing.

You can continue from here to describe different crate sizes as different data types. Some can fit in others, some are specially marked or have functionality, etc..

Programming is the art of finding the most efficient use of paths, planes, cargo and time.

You can even say the size of the plane is your RAM, the loading bay represents L1/L2 caches and the warehouse you're pulling from is your disk storage. Networks can also be represented across many terminals, getting into the question, "What do you do if Plane A is at Terminal A, and needs cargo from Plane B at Terminal B"

Imagine how difficult it is to explain basic marketing, law or business concepts to programmers who only hang out with other programmers. I learned programming in college and I never found it interesting.  If you cannot explain what you do then you  should work on your communication skills.  I would think that sales people would have a basic idea of what the website does, not the code that makes it work.

I think you might try using the "user story" format (Agile terminology) as a vehicle to ease the conversation.
Ideally, a user story captures what the user wants (this is actually what the sales rep sees or hears) and how it will be implemented (this is what the techies will do). From following how a user story evolves, both techies and sales reps may connect the dots between the user's business needs and how it is built.

Maybe its a simple as describing a website like  a newspaper / magazine shop
The front entrance is the homepage,each magazine is a menu item, the index of the magazine ,can be a sub menu related to the magazine. Information can be grouped in many ways, author, title, subjects ( all can be keywords ). Every time you open  magazine in your browser, you take up place on your (ram) viewing area.
Open too many magazines and you run out of viewing room. The machine slows down because its busy opening and closing magazines. just as you would be if you tried to open 20 magazines on a 3 foot square table.

I think people who want to know find out.. If they are not interested then it does not matter how you present it.

No, they really don't care as a class.  Trying to explain it to them can be good for practising communications, but don't expect much else from it.

You can start by explaining that computers are a bit like hyper-logical and very strict, but not very smart children.
So, programming is "telling" the computer what to do, by breaking complex tasks down to simple instructions, such as. Initialize a variable to 0, add 2 to it, and do this a 100 times.

The exciting part is designing very complex systems, by organizing these instructions into bigger and bigger, reusable units, and the pride of craftmanship.
A beautifully designed piece of software is a mixture of art and science.

The really exciting part is what you can accomplish by doing all this!
From, building a car that can drive itself, and creating virtual reality, to cool robots, accurate full-planet weather simulation, molecular simulation and AI, to cure cancer and so on.
As a software engineer / programmer, you have nearly god-like powers!
You can create complex, immortal things. You transcend the limitations of your mortal and vulnerable bio-body (wetware).
Your only limitation is what hardware you have access to, at the time, which keeps getting better.

There's no such thing as too much computing power. Only a limited imagination.
- Gabor Nagy

Give me a computer a billion-billion times faster than the top supercomputer, and in a week, I will be complaining that it's too slow.
- Gabor Nagy

Be patient though. Apparently, not everyone is interested in such super-powers, or are unwilling to put in the work.
I used to think that anyone can become at least a decent / good programmer, but recent studies by some university CS professors in the UK, suggests that only about 1/3 of the population can.
Of course, the other 2/3 are better at other things, which is good. Diversity is great.
And, hey, it's job security for the rest of us!
:)