So today in my morning computer programming class, one of my students became incredibly frustrated with a bug in his code. I watched as he became increasingly aggravated with the screen full of error messages. At the end of the class, I wished him a good rest of his day and he just stormed out of the class without saying goodbye. This happens every semester, guaranteed. There is always one student whose frustration gets the best of them, and just wants me to fix everything. I never do.
Why wouldn’t I just show him how to fix his mistake(s) you might be wondering? That’s what a teacher is supposed to do, right? I asked the same of my college computer science teachers and I was that same frustrated kid, so I completely understand his perspective. I also understand the value of this discomfort.
The point is that my job isn’t really to teach this student computer programming. I have them all fooled! We have systems, tutorials, programs, websites, YouTube videos, coding bootcamps, online forums and countless other methods of learning how to program available at our finger tips. My real job is to teach these students how to learn computer programming. To do that, they need perseverance, patience in the face of adversity, analytical problem solving skills, tolerance for ambiguity and perhaps above all else, the ability to collaborate effectively with their peers
These are the skills that will help this student be a successful computer programmer, long after I am out of the picture and he embarks off into the great big world coding culture. These are also the skills that he won’t learn from online tutorials or college classes of 100+ students. These are the skills that differentiate the stereotype of the “computer nerd”, locked away somewhere forever toiling away in isolation, from the startup entrepreneur, successfully forging ahead with the next billion dollar digital ideation.
If I can teach a student how to solve their own problems through perseverance, being resourceful, and critically choosing the best digital support tools they can find online, then I feel like I am doing my job effectively. Pointing to an error and saying “do this” to fix it is not an empowering process.
Pairing them with a student whose code is functional and having them meticulously pour through both sets until they find the singular semi-colon that is out of place develops the perseverance and collaboration skills they will require to be successful computer programmers in the future.
Introducing them to Stack Overflow or r/learnprogramming will help them to develop a digital resource toolkit they can fall back on whenever they may need it down the road.
Truth be told, programming is hard! It can be a painstaking process: slow, tiring, and sometimes downright maddening. As much as we would have people believe that all we need is an Hour of Code and that coding can be all fun and games, when we get down to the nitty gritty, the truth is that coding or computer programming is hard work that requires patience, perseverance, and the ability to tolerate frustration and uncertainty.
Focusing on the essential soft skills necessary once they leave school helps students who come through my program find success on the next stage of their computer programming journey. With alumni working for Microsoft, Google, Facebook. IBM, Deep Mind, and Intel to name a few, I think things are working out pretty well!