“A whole week to learn if-else statements!” I told my colleague in dismay while I was preparing to teach my first course on “intro to programming in python”. I took the syllabus from the professor who taught the course many times before and started getting anxious when I saw a whole lecture dedicated to variables. I imagined I would address students: “friends, x=1; that’s a variable.” That would take 5 seconds. What should I do to fill the remaining 64 minutes and 55 seconds?
At the same time, I knew that an intro to python class should be structured this way, and learning the basic concepts of programming would take time. The main problem I had is that I was not able to put myself in the students’ shoes. I do not remember my experience learning programming (which was also shocking to me.) I was also introduced to programming prior to going to college, which removed me further from the experience of students exposed to programming for the first time in the formal setting of a college course.
This created a problem. I was not able to reason about what students need and what the best approach and material were for their learning process. Worst, I was afraid that I would be so unsympathetic that I would belittle their struggles and problems through the course (which, unfortunately, is something many instructors fall victim to.) We hear of many cases of professors telling students that “computer science is not your cup of tea” because these professors did not relate to the struggles and experiences of a newcomer student.
So, that led me to start embarking on a quest to understand these struggles. And found that the best way for me to remind myself of these struggles is to learn something new myself! And I am not saying something new as, oh, I am going to read a research paper on programming languages instead of data management. I mean TOTALLY new. I started taking beginner lessons and reflecting on these experiences as well as recent past experience of me learning something totally new. I will talk more about one of these experiences that affected my teaching the most: learning to paint.
Until recently, I couldn’t even draw a normal-looking stickman. When someone saw my drawings accidentally, they would mistake it for my then three-year-old child. So, it was perfect for my mission. I signed up for lessons. We started by learning basic shapes and working our way through understanding lighting/shadows to drawing more complex objects. I was surprised by the many analogies I found with the experience of beginning students in programming and computer science. Here are some of these analogies.
1. Analogy 1: The 10-year old who is taking the beginner class with me
In some of the painting lessons, I was joined by a 10-year old. She was also taking the beginner class, but she was not the same kind of beginner I am. She has been drawing as a hobby since she was a small child and could paint beautifully, picking up what the instructor is teaching swiftly and perfectly. Compared to her, I was struggling! For each task, I spent a much longer time, and couldn’t do it right half the time! I felt embarrassed and couldn’t help but wonder what she thinks of this struggling adult many times her age. I questioned that maybe this is not my place and I should just leave. And it hit me! This is what our students feel when they see the “star” student who is answering all questions perfectly and jumping ahead to topics they would not see until their senior year. They feel out of place; as if they do not have what it takes to be in this program, just because someone else had different circumstances and experiences of getting a headstart.
2. Analogy 2: It is fine to make mistakes, just debug it and fix it!
It turns out that the painting process involves a lot of “debugging”. My naive self thought that a painter would just do their magic with no mistakes! I immediately remembered my frustration when I and the TAs found that students were not comfortable making mistakes and debugging/fixing them and that it was not natural to them. But, I found myself doing the same thing. Working extremely slowly on drawing a sphere, extremely afraid of pressing too hard, or drawing a disproportionate line. And when the instructor would say “do not be afraid of getting mistakes”, well, I was still afraid and clueless. I did not even know how to go about fixing the problem. I only started getting it when I saw the instructor “debug” their drawing in front of me and after doing it a countless number of times. I realized that debugging itself is a skill that is not obvious for students and requires a lot of practice even for the simplest tasks.
3. Analogy 3: the milestones that keep you going
After a few painting lessons, I got really stressed with my progress and felt completely lost. I am not getting the shapes right, and the shadows look as if they came from an alien world where the laws of physics do not hold. No matter how much I try to focus and try to attend to each detail in the process, I could not make it work. That was another moment where I thought that I should just give up. But something happened! Out of that frustration, I was able to draw my first object that had correct proportions and shadows! That moment created a boost that made me able to go on. Getting such a boost (and sense of accomplishment) was surprising as it was just a sphere! This realization of the importance of these milestones where the student feels that something clicked and started making progress was revealing. Students would often feel frustrated with not being able to get a concept. But, this frustration is a sign that they are now learning something completely new. This shows the importance of being with the students and making them aware that this frustration is a normal part of learning rather than a signal to leave.
There were a lot of other small analogies and experiences that really helped me relate to students starting to learn programming and computer science. Learning a new concept is an isolating (stressful) experience with results that a newcomer cannot expect. One important realization is that the instructor should provide the time and space for students to work on their learning process while providing the support, encouragement, and perspective of what is coming next. And critical to our field, we should create a safe environment with the assumption that everyone is here to learn; we are not only catering to the top performers. Relative learning differences, in the beginning, should not discourage students from continuing and enjoying the journey.