Learn to Love Frustration
programming is frustrating. If you disagree, email me. It should be frustrating, it means it’s challenging – frustration oriented programming transcends language and time. It should be taught and encouraged.
Just the other day I copied a dependency to a new location, changed all the files linking to it, but then edited the old file, confused why the changes weren’t being applied, finally realizing my error after thirty painful minutes (I was learning a new configuration language in my defense). Of course, I felt like an idiot, but I already knew I was an idiot so I just kept going. That’s the thing, I don’t get frustrated by programming, I almost seek the inevitable frustration of learning new languages and libraries and practices – I learned how to program during high school by myself on a caffeine binge at 4 in the morning on a school night debugging segmentation faults (I realize I sound really cool right now). It was painful. But I learned valuable lessons – check the most obvious problems first, compartmentalize potential failures, and eventually just use the debugger, it is there for a reason. I’m glad I did it though, because, sure, I didn’t know any better and was just messing around, but now it takes a lot to frustrate me, I dare you to try. I own undocumented APIs, null pointers and all things horrible because I’ve chased much dumber problems and wasted my time doing stupider things.
It’s frustration that makes programming a mystic and almost legendary profession. People wonder how programmers began, as if they woke up one morning and wrote the linux kernel, how I imagine others find their professions. Most other people will immediately throw their hands in the air and ask for help when encountering an unfamiliar problem (think parents and computers), but the programmer doesn’t – they have an uncanny ability to stare frustration down the throat and continue on. That’s how I started programming; debugging my computer problems turned into linux turned into bash turned into C. I was not magic. I just put in a lot of work and learned a lot – a lot about how I deal with frustration. I’m lucky, I deal marvelously with frustration – programmers need to.
This ability should be taught not just as a byproduct of computer science – frustration lies at the heart of all programming and in this imperfect science I believe it always will. No code is perfect, everything is broken, and it all fails spectacularly in the most surprising of ways. Students need to be taught how to cope with, seek, and love frustration, immunize themselves to it or else they will never be able to sustain a lifetime of learning as a programmer. If ever someone stops becoming frustrated, they probably aren’t challenging themselves, learning anything new, and they most definitely aren’t advancing computer science.
Ways to deal with frustration should be taught in schools. Not everything is magic, sometimes failure is necessary, especially in programming. But it’s not just in programming – I surmise that frustration is one of the root problems of America’s lack of budding scientists (but this calls for another post and actual research). No one wants to learn science because science has clear cut failure that frustrates students who aren’t used to coping. The failure and frustration in the sciences makes it hard and unapproachable. Students should be taught to deal with frustration productively, challenged to fail early on, and I hope it won’t be alone at 4 in the morning with a cup of coffee. Frustration is everywhere, learn to love it.