Ramblings of a CS educator
Published: 2020-09-20 17:30:37

The 4th week of the 16 week long semester just ended (for those who want precision in the calculation - it's a 15 week semester but there are some holidays in between to push past a 15-week span) and it's as good a time as any to record observations else I will forget it until next semester :) I am teaching data structures class, the 3rd CS class in the series (prior 2 courses are on learning programming techniques). Data structure continues to be a challenge to teach, I continue to delve into pondering over why. To set the tone of these observations I want to point out that generally there is a wide range of levels in the class, so the observations don't apply to the whole class. It is by no means a reflection of any particular student performance, but rather my surprise that some things that *seem* obvious are actually not.

I'm on my 3rd year of teaching data structures class, I am starting to notice common patterns in student behavior. I haven't thought about this long enough to pick apart and think of solutions, wanted to write down thoughts relating to particularly exasperating moments to revisit at a later time. My perspective is one who is coming from industry, especially one that is of high intensity *"get things done (yesterday)",* not sure how common that is but it provides a stark contrast to the academic environment. I don't claim to know what's the *right way* to educate CS, I am learning, and certainly my experiences could not be generalized across all towns, universities, programs, nor industries. I am aiming to point out the moments of interesting conflicts in expectations between students and myself. 

1. When there seems to be a fearful attitude towards coding amongst students. It seems that coding holds a certain mystique. I noticed this because it can be one of several ways: (a) when they think there is *only* one perfect answer, (b) when they lack the instinct to look at documentation but expect to be spoonfed the answer, or (c) they forget coding should be done after thinking through the problem and pseudo-coding. If anything, coding is more like being a legal practitioner, of knowing how to navigate a bunch of rules for various scenarios. 
2. Lack of what I call a "defensive coding"
stance (I borrow the term from defensive driving). Some time ago in industry I learned of test driven development (TDD) and it's changed my life in being conscious while coding. That is, think about expectations of input and output with each line written. Keep code that spark joy. I've been noticing a lack of principled technique while debugging code where (a) students aren't thinking to check that file inputs are as they expect before jamming it through their code, (b) they aren't checking the type expected from one line to the next (Java code, so there is a need to consider type strictness). 
3. There is also a lack of systems thinking for constructing a 'pipeline' of functions.. my exposure to terminal commands and functional programming over the years must've helped with visualize a pipeline stream of conversion steps. Students will stare at their code for hours instead of thinking to print output for debugging and think about how one step can be transitioned to the next step.
4. Not realizing they are authors of source code that is meant for humans to read. They're still at the stage of being hyper-focused in, *"I need the machine to compile this"*.. so much that even when I assign points to homework for documentation and comments specifically they seemingly still forget to add comments 😆  Many these my students could be great accountants with how much they care about points, so that's interesting. Curious if they write comments, would that help with tackling problems directly, swiftly?
5. Relating to the mystique of CS, a growth mindset may be lacking. Some students have a fixed mindset, they lack of feeling empowered to see that any self-actions can lead to rewarding outcomes. CS educators often talk about breaking larger problems down to manageable tasks and this can immediately apply to a semester of learning. Some students will think as they see the course contents, *"I cannot do this, I don't have a Ph.D.,"* instead of realizing that a journey begins with a single step. That is, they may not know everything yet (sure, the semester just started) but something like 5 minutes to glance at 3 slides that were designed like a picture book can probably answer a few basic questions.  

As I write this, I realize I have more thoughts but I will do the healthy thing of taking a break and resuming the musings later because there is still the rest of the weekend to enjoy before the week starts! Ciao.