Against Coding (And Life) As Problem-Solving

Lindsay Pierce
8 min readJun 30, 2020

A novice programmer’s perspective on one of programming’s most infamous buzzwords.

A client explains to an analyst why he needs a horse not to ride, but for milking.

Most jobs are about life. I mean that in a profound way; people who succeed in a particular career typically do so because they knowingly or unknowingly tap into the core humanity of what that job requires. This phenomenon, if you will, is sometimes referred to as passion. While I don’t think that’s far off, the truth is, it’s very difficult to be passionate about something you don’t know — really know, not just know about.

I’m only a few months into my programming journey, but my working theory is this: programming is about knowing problems — solving them, yes, but knowing them first.

The Problem With Problem-Solving

Ode To 2000s Education

I was born in May of 2000 and attended private school, which put my grade school years solidly in the emergence of “problem-solving” as the latest education buzzword. No one ever explained exactly what it meant, except that it was the antidote to the dreaded, robotic memorization that was multiple choice. But it was on every report card, every evaluation, every list of learning goals. For years, teachers would give me sheets of “problems” for which I would attempt quick, simple solutions, and collectively, we called that problem-solving.

Then life really started and I encountered much harder problems — problems that “problem-solving” had given me no capacity to handle. I panicked, in fact I short-circuited; there were no solutions to be found and no convenient keywords in the descriptions to follow. But my brain had been trained in “problem-solving,” so it did what it did best: it produced solutions. Big ones, small ones, slow ones, fast ones, ones with deep, emotional, all-encompassing descriptions and conveniently humorous ones that could be conveyed in a light-hearted joke. I always had an answer —I just never knew to what.

Want to read this story later? Save it in Journal.

In school, learning is set up in a particular way. There are instructions, and guides, and keywords to look for in questions to know what to do next. Almost every “problem” you’re presented with on paper has a known solution — you know because there’s someone grading you, and little to nothing is graded on effort alone. And even when it is, there’s still a “right” answer.

Programming, once you get past basic syntax, is nothing like that, or at least it shouldn’t be. If all of programming involved finding a single solution, the market for good programmers would’ve shrunk, not exploded. Something else is happening. What is it? I’m so glad you asked!

Getting Cozy With Your Problems

In addition to being an absolute nerd, I’m also a nosy friend and an insufferable gossip. I love talking about other people’s “problems” (that’s in air quotes because otherwise it sounds kind of mean). Boy drama? I’m all over it. Friend drama? Even better. Wanna talk through it? Take me back to the day you first met and bring me step-by-step to the present.

Blair Waldorf from Gossip Girl shrugs and smiles mischievously up at a classmate.
Blair Waldorf ready to get allll the tea.

Some might say I get a little over-involved.

But it’s not just for fun (although it is entertaining). I’m nosy because if I know a little bit about a problem, I want to know exactly where things went wrong.

This isn’t to say that every problem has a precise or exact root (programming or personal). But even personal problems usually have an underlying cause, which, when discovered, can often explain why things started off the way they did, why particular solutions were explored on the way, and ultimately why none of those solutions worked. Sometimes these underlying problems are found through trial and error. Sometimes it’s the details other people notice that you dismiss as being important or indicative of further issues. Either way, finding a deeper layer to what seemed to be a shallow problem can have lovers, learners, and friends alike looking something like this:

In sequence, the directors, producers, and audience members of a show collectively palm their foreheads.
Yikes

That’s All Very Nice . . . What Does It Have To Do With Programming

Everything, of course!

Think about it! Have you ever gotten a consistent error and tried all kinds of random things until you’re typing random code you don’t know because you saw somebody else do this thing once and you’re deep in a StackOverflow thread from 2015 and . . . oh your coworker checked and it was just a typo. Ugh.

Sometimes you can’t even recall why you did all those things you were trying. Sure it was a shot in the dark, but you just wanted the error to go away. Your brain was doing what some well-meaning but probably crappy educator trained it to do for the SATs: it was problem-solving. Whether the problem solved equated to the one at hand wasn’t part of the equation.

The Anti-Solution Solution

Think Of Your Problems Like Great Murder Mysteries

I know this seems counter to what I said earlier about getting cozy with problems, but like a detective and his cases, you and your bugs are likely going to have an intense love-hate relationship, so you might as well get comfortable now.

For a detective, every detail informs what happened in the case. They talk to witnesses, retrace steps, pick over every scene. Moving clue by ever-elusive clue, they pinpoint connections, pursue leads, and zero in on the target. It’s patient, intense, and methodical. You’d be quite alarmed if the first thing a detective did upon getting a case was flag down a random vehicle and ask if the driver had ever seen this kind of thing before.

Your clues are your errors; your witness is your code. Think back to the last place your tests were working perfectly; what’s changed since then? Go back there and retrace your steps slowly, thinking through what you did when and how it was supposed to work. File by file, method by method, go on until you narrow down to the line (or lines) of code that aren’t working. Then consult your notes and try to piece together what went wrong. This is also the time to go ask other “detectives” if you’re stumped — now you’ve got a detailed set of notes to pour over together and your coworkers won’t look at you like you’ve lost your mind.

Now your cases can be exciting! Sure, some are annoying and mundane, but some are teeth-clenching, heart-wrenching, mind-bending thrillers that might get on your last nerve, but ultimately let you flex your programming muscles; they’re the war stories you’ll tell your kids at the dinner table. Assuming your kids know the joy of finally nailing the cookie-session handling in your user interface.

An employee finally submits a tough project to applause and support from his coworkers
You did it buddy!

This Is Cute And All, But I’ll Probably Still Just Use Google

As is your right! And you’re probably fine if it’s some pesky routing error and you’re not sure about syntax. But let’s think ~big picture~.

You’re starting your first “real” project, an application designed for the iPhone. Your app is going to help individual users sort through access to healthcare. You’ve spent months working on it. You release . . . and nobody downloads. I’m talking zero. Not even the developers (your company kindly covers health insurance).

Tell me, what is the problem?

Sure, you could Google it. Do some more research on what consumers are saying about other healthcare apps, the healthcare market, etc. But if you’re a halfway-decent developer then your team did all that research upfront, before any code was actually typed. In fact, you probably tested the product with some users already. So where did things go wrong?

Sherlock Holmes holds a magnifying glass over a sample in a science lab
Hehe. Get it

This is our spine-tingling murder mystery. What features were your test subjects most excited about? What changed? Was there an update to a competing app that incorporated those features? What were the key differences between that prototype and the final site?

Or, taking it back a step further, what kinds of people did you test the product on? Were they actually your target market? Where do they differ from your ideal user? What demographics were you testing? And which ones did you leave out? (*stares in black woman* — a topic for another day).

Whatever the “answer” to this admittedly fake scenario may be, any possible solution lies in identifying the unique characteristics of this specific problem — one that relies on the characteristics of other, larger problems, like the general state of the healthcare market and the strengths and weaknesses of the particular framework you chose. As a skilled programmer, you likely know the way to find a solution, but to save your app (and possibly your job), you must find the solution that most closely solves the unique set of problems your team has been presented with.

Ok Maybe . . . But What’s This Got To Do With Life

I could write a very long list of the films, books, and television shows about solution-oriented people discovering life isn’t always about having the right answer (see any rom-com about a hard-hitting businessman falling for a small-town girl with big dreams). Rather than do that, I’m just gonna talk about therapy.

Anyone that’s ever been to a traditional therapist (i.e. lie down on the beige couch) will tell you that the first few sessions — in most cases the first few years — are rarely about coming up with solutions. In reality, most people end up in therapy because they’ve been forced to confront the fact that they don’t know what their problem is. And I mean that in the kindest way possible; as you may have noticed, I have a great deal of love for problems of all sorts. I was Team Damon and Team Jacob, if that tells you anything.

Therapy is the process of confronting the source of your problems; fear of commitment, failure, abandonment, lack of financial or emotional security, lack of faith in the goodness of the world, a really toxic relationship in your 20s, indoctrination into a world that judges you primarily by the color of your skin . . . just some random ideas. Not everyone can afford to go to therapy, of course, but making space for self-knowledge and self-exploration is something we can all do a little bit, even if it’s just for five minutes in the morning.

And therapy takes a long time to “work.” In fact, sometimes being in therapy makes life feel even more overwhelming and stressful because you’re noticing all the ways that your behavior patterns might be indicative of those deep underlying issues. But you don’t heal a gunshot wound with a bandaid (or in some cases, smothering it in bandages so that hopefully no one notices). Your life — and your programs — deserve a kind, patient, and understanding therapist-like approach. Trust me when I say you’ll be amazed by the results.

📝 Save this story in Journal.

👩‍💻 Wake up every Sunday morning to the week’s most noteworthy stories in Tech waiting in your inbox. Read the Noteworthy in Tech newsletter.

--

--

Lindsay Pierce

Black Woman Loading . . . | Investigating the craft of story