Yesterday, in a rare break from my head-down approach to being in the office, I ended up talking with several of my colleagues about our introductory Python programming sequence. We covered a lot of topics, but one of them was the difficulty in getting students to put sufficient energy in their homework assignments. I, and other Python instructors, find that it’s difficult to convince students to work long and hard enough on homework problems to solve them. Short on time or patience, many of them turn to friends, tutors, or the Internet to get solutions, which leads to Academic Integrity issues. We concluded by agreeing that failure is an important part of being a computer scientist, but helping students to see that point is tough.

I’ve written about the difficulties of learning and the challenge in trying to convey that to students. What I didn’t include in that post was the importance of embracing mistakes and failure, something I was reminded of when my mother sent me a link to a TED talk entitled Trial, Error, and the God Complex. In that talk, Ted Harford discusses how trial-and-error approaches can more quickly and easily lead to fruitful solutions for complex problems. He also suggests that moving past the notion that we understand everything is crucial for innovation, and at the same time, something that people find very hard to do. We all like the idea that we, or someone else, are/is an authority figure who can give us the right answer to tough problems.

After the conversation with my colleagues and watching that talk I’m even more stumped about how to convey to students interested in computing that failure is a crucial part of the discipline they’re studying. Programs don’t work as intended. Servers crash. Problems are too complex to be modeled in any feasible way. A computer scientist has to have the determination to push through those failures and try to understand the problem, the code, the machine in a better way, so that next time there will be fewer, or perhaps only different, failures. But I recognize that requires a certain self-confidence. A person has to believe that the failure isn’t a reflection of them, but instead a part of the process. And it’s an unusual introductory programming student who has sufficient confidence to fail repeatedly and keep pushing at the problem anyway, trying to produce new, and better, failures. I guess this whole issue gives me a tough problem for which my solutions thus far have failed. I need to embrace the failure so that I can find new approaches.