While my wife was in business school I often found myself the only software engineer at cocktail parties. It was 1996 and most of her classmates used their laptops as Microsoft Office terminals.
“I just don’t understand how you do what you do. It’s like magic to me. Impressive and important, clearly. But inscrutable.”
“Um, thanks? I just give the computer instructions.” I mumbled. “I move pixels around…”
“But how does it work? Can you explain it to me?” He honestly wanted to know. I tried to tell him more but I don’t think I had much of an impact.
We spend all day talking to computers, telling them what to do. And they do it. We move pixels. We persist data. We have computers ask other computers questions and they respond. Often we tell computers to do something that wasn’t exactly what we meant, so we tell them again, but in a different way. We spend time refining how we tell them so that the code is more efficient or maintainable.
It has been nearly twenty years – we are long past computers becoming common. Software is a large part of the economy. The are plenty of headlines describing nutty financial success. More people want to learn programming. Closer to home, I have two kids who (may) want to consider software as a career. So how do we explain programming to those who don’t?
A few years later I was on a business trip with co-workers and the topic came up again. One of the non-programmers in the group asked, “What is it you guys do all day that makes our product?”
I tried again. I talked about programming – logic, languages, libraries, etc. – trying to explain that we just told the computer what to do. Then I listed the other programs in a computer that work together: windowing systems, mouse and keyboard drivers, and the graphics libraries that draw shapes and fonts. “With this foundation, we are able to write a program that gives our users features that don’t yet exist.”
She looked a bit puzzled. So I tried a new tactic: “Tell me about your morning routine? The whole thing.”
She wrinkled her brow and started listing: “I don’t know. I guess I turn off my alarm, make my bed, shower, get dressed, have breakfast, brush my teeth and then go to work.”
We broke down the entire 40 minutes or so into even smaller, discrete steps. She wasn’t too particular when it came to making the bed, but she had a specific way she bushed her teeth. She kept her keys, purse and shoes in designated places near the door. She laid out clothes the night before. This was a process she had refined over the years, adjusting the steps when she got a new job or moved into a new apartment.
I summed up: “You repeat the same steps every morning and get to work in as little time as possible. You’re able to do these steps without thinking much – it ‘just happens’ most days. To an outsider this is a deliberate routine. Doesn’t that sound a little bit like a program?”
She smiled when the light bulb turned on in her head.
We’re all programmers. Some of us also program computers.