As a go-getting engineering student, I chose my first university elective to be Computer Science 101. I didn’t like it. The lectures put me right to sleep – and I’m a lecture lover. The exams were not a problem. But the projects were another story.
The first few were easy. But as they got harder, this was the pattern: I got the code to where I thought it had to be right. My program would compile (be accepted by the computer) but did not produce correct output. I would not be able to figure out why, and unlike other people in the class, chose sleep over debugging. The TA would give me a grade of, say eight out of ten. What seemed really bizarre to me was that I would ask the TA, “well, what’s the bug?” and the TA would shrug, or go tell a long story about legendary bugs, resolved by heroic and somewhat random efforts.
When I told my husband, who’s written vast amounts of code, about this, he said, “eight out of ten? They should have given you zero!” Which I interpreted as one of those “marriage is work” moments.
I’m a lucky duck, though. I’m taking a second whack at writing code, and now it’s different.
How so? First, I wrote little snippets. After some years working hard at creative writing, which always feels mutable, and never feels finished, and teaching, requires patience and acceptance and tolerance and farmer-like ability to reap what is sown, it’s enormously satisfying to write little bits of code that perform long tedious calculations in an instant. Zing! Pow! Like Batman!
Second, debugging is so easy now. At least, the easy parts are easier than ever, with environments that show code and comments in different colors and complain if you don’t indent properly – it’s like using a word processor after writing by hand.
The hard part of debugging is easier now too, for me, because I get it. I get the idea of the art of it – breaking things down into small enough components to chase down the problems, and separating out functionality. What is better than having a debugged section run over and over again, reliably, willingly and without complaint? And then joining parts together to make something many factors more capable?
I might even understand my husband’s zeal to hand out zeroes. Before, I expected computers to work for me, to behave predictably according to my assumptions. They were machines, weren’t they? Isn’t that what machines and robots promise us? Newsflash to self: communication, even with a machine, is a two way street. Significantly, experience has shown that given underrepresented groups experience with technology eases them over the hump of initial frustration.
So now, I come with the awareness that nothing’s perfect and everything has its limitations. We run out of memory and lose track of pointers. My laptop and I exchange winks: who doesn’t? We can still do amazing and powerful things.