How to Explain Your Job to Other People: Software as Digital Construction

Why, when I tell people I “do” software at a party, do they ask me to build them an app? Do they ask the contractors they meet to build them a house? Do they ask their architect friend to design them one? Why, then, would they ask me, a random person they just met, to build them an app?

My pet theory is that most people see software development as magic, a la Harry Potter. Most think programming is a binary trait: You are born with the computer magic, or you aren’t.

If you’re born with this magic, computers are like an extension of your brain. You cast a spell, and they simply do as you command. It’s fast, easy, and wizard-like, just like in Harry Potter.

Less Like Wizardry, More Like Construction

Yet as a software developer, I think programming is more like construction than like magic. Don’t get me wrong; there are certainly moments where I feel like my coworkers are doing magic. But as a new developer, most of my work is much more like construction: methodical work following predictable patterns.

As I’ve spent more time as a “software person,” I’ve struggled against this assumption that software is “magic.” I’ve tried (and failed) to explain what I do at work to my friends and family. Thus far, they all still feel a mix of fear and awe.

At times, I feel a little like Harry, speaking Parseltongue while everyone looks at me like I’m crazy. This article is an attempt to make what I do simple and accessible, less Parseltongue and more English. Less magic and spells and more hammer and nails.

With this construction analogy in mind, I’m going to use this post to introduce a new way to talk about software development. My hope is that by giving us new words to describe our jobs, we can connect with our friends and family as fellow workers instead of wizards.

The Tools of the Trade

  1. The Text Editor (The Hammer & Nails)
  2. The Terminal (The Workers)
  3. The Language (The Building Code)
  4. The Cloud (Subcontractors)

1. The Text Editor (The Hammer & Nails)

Everyone we know (even Grandma) has used a text editor of some sort. Word, Google Docs, Notion, and even Slack can be used as text editors. The text editor is the hammer and nails of our job. A good text editor makes life easy, just as a good solid hammer makes quick work of nails.

The only difference between the text editors the average person uses and the ones we use is that we have the building codes (the language) built in. Plus, we have fancy features like multi-cursor magic, which is real wizardry.

On top of all these fancy features, we have text editors that include access to the terminal (the workers) as well. In construction terms, an IDE is like a workshop, where all the tools you could imagine needing are right there on hand.

VSCode with project-wide type-checking
VS Code, my text editor / IDE of choice.

 

So, just as nearly everyone has used a hammer and nails, all your friends and family have used a text editor. The difference between our text editor and theirs is like the difference between a nail gun and a hammer. One is fancier and easier to break, but it makes the job faster if you know how to use it.

Examples for the Curious Friends and Family:

2. The Terminal (The Workers)

If the text editor is the hammer and nails, the terminal is the workers that put everything together. On a building site, if you have no workers, all you’ve got is a bunch of wood and metal. On a computer, without your terminal, all your code is nothing but a glorified Word document.

Just like workers in construction, our terminal does dangerous work. That said, with great responsibility comes great power. If there is any part of our work that seems truly magical to friends and family, it’s what we can do on the terminal.

A terminal on a Raspberry Pi.
A good old-fashioned terminal. This one is on a Raspberry Pi.

3. The Language (The Building Codes)

Just as construction is limited by building codes, we are limited by the language we write in. Each programming language comes with its pros and cons.

Some languages, like C, let you have fine-grained control over every little detail at the cost of dealing with all those details. Others, like Python, let you get off the ground quickly but offer little fine-grained control. If you want a quick primer to show friends and family, check out this article.

Part of the pros and cons of a language is the community surrounding it. Just like building codes, programming languages are created by communities and are “living” — they change over time. New features are added and bugs are worked out. The more active the community, the more help available and the better the language will be in the future.

The logo for the programming language, Typescript.
Typescript, the language that I love.

Unlike building codes, programming languages can give you automatic updates about our compliance. This is one of the advantages of an integrated development environment over a text editor. IDEs often check to see if your code follows the “building code” of your language, which I suppose is a bit magical.

4. The Cloud (Subcontractors)

Clouds in front of a blue sky.
The real clouds are much more complicated than their computer counterpart.

One of the most confusing concepts out there in the computer science world is the cloud. From the outside, the cloud seems like the height of wizardry. You can cast spells from anywhere. What magic!

Yet, like all our previous examples, the cloud is not as fancy as it appears. If we take the cloud out from behind the shiny curtain, we find subcontractors.

The cloud takes work your terminal would normally do itself and has other terminals do it instead. When your dad uploads a Word document to the cloud in Google Drive, his computer sends it to Google, which puts it on their computers instead.

The magic of the cloud that your friends and family don’t see is the terminals spread across the world. All these terminals at our fingertips are like having hundreds of subcontractors on demand everywhere we go. It’s not magic, but it is powerful. You can build whatever you want wherever you are!

A Better Metaphor

The Tools of the Trade

  1. The Text Editor (The Hammer & Nails)
  2. The Terminal (The Workers)
  3. The Language (The Building Code)
  4. The Cloud (Subcontractors)

Software development is not online wizardry (as much as we’d like everyone to think it is). It is more like digital construction. We use many of the same tools our friends and family do every day. We use souped-up text editors to write our code, terminal workers to make it run, and languages to tell us what is and isn’t ok to build. If we are feeling extra fancy, we subcontract all the work out to The Cloud.