So I’m through my first term at the University of Waterloo as a Computer Engineering undergraduate and I’ve noticed some worrying trends when it comes to problem solving in our programming courses. Programming is a skill that I’ve worked on since early grade school, making things in Scratch, Python, then Visual Basic and Java. C++, the language for our course, is not a language I’ve had much experience with, but my knowledge in others has more than compensated to be able to quickly complete assignments. I totally understand that others do not have this experience – programming experience is not a requirement to enter the program, after all – and need more time and more help doing projects.
I’d like to think I’ve been a generally helpful person in the class. On class discussion boards and communication platforms, I frequently answer questions, often before an instructor has a chance to comment on it. I’m happy to test out other people’s code, and I go out of my way to explain more complex concepts like a program’s stack and heap to friends. However, there are some questions that leave me feeling disappointed and frustrated, not because I cannot answer them or because they are particularly trivial, but because of a lack of effort from the asker.
Lots of questions can be answered by just looking at previous questions on our discussion board. There’s a handy search feature that quickly finds questions with similar content. Lecture notes and examples are also common references which I point out to people, and even the course syllabus (which everyone is expected to read and instructors go over at the start of the course) gets regular linking to.
Others will ask a question about how to implement a complex function and I’ll describe an overall approach without going into exact details. They’ll proceed to implement a single loop condition before asking if it’s correct.
Situations like these are common in technical circles. They are the source of acronyms like RTFM and terms like help vampire. I feel like a lot of these boil down to being afraid to test, but I’m not sure why. Programming, to me, is the easiest domain in which to test solutions. It’s literally a compile away! In projects with provided examples, you don’t even need to perform any manual data entry as you might in mathematics. Yet still, people refuse to just run their code.
In some ways it’s easy for me to blame the person asking, and I think some of that blame is fair. University students should be expected to research solutions to their problems, see if anyone has asked a similar question on discussion boards, review lecture notes and examples, and test their code. If you’re going to ask a question, make sure to put some effort behind it.
But I also think some of the blame goes to the instructors and teaching assistants helping out students. On numerous occasions, I have seen support provided by writing code for students or telling them exactly what is wrong and how to fix it, instead of providing test cases and debugging suggestions. Not only does this instill poor habits in students, but it takes inordinate amounts of time which could be better utilized to help more students. In rare occasions I’ve even seen incorrect answers being provided instead of a simple “I don’t know” which sidetracked students for some time, only for them to return again later.
I would wager that this kind of over-compassionate response does two things: it deprives the challenging part of learning that’s vital to building better problem solving skills, and it reinforces fixed mindsets which lead to worse resilience.1 Years back, a high school computer science teacher often replied to questions with a phrase similar to “Read. Read it again. Then, read it one more time.” (referring to problem descriptions or lesson notes). As harsh and frustrating as this answer felt in the moment, I think such a response — phrased with a tad more encouragement — has its merits and ultimately builds students’ resilience.
Of course, all of this extends to far more than just programming courses or even education. This area is just my own experience in it. When I wrote the first draft of this post, exams were around the corner and, as the first few paragraphs may indicate, I was starting to get mildly annoyed with last minute questions. Revisiting my writing in the new year has proven to be quite fruitful. I’ve expanded on my ideas and did more research into this topic.
I think asking good questions and providing good answers are important skills to think about, whether as a friend and classmate, a partner, teacher, or parent. We often have the tools to solve our problems, so put them to use and see what happens. When you reach a roadblock, ask for help and demonstrate the effort you’ve already put in. When you’re offering help, do so with warm encouragement and a confident push in the right direction, not by solving the issue yourself.
This post was written a few months ago, but I hesitated publishing it because I wanted to do more thinking and research about how people learn and why the situations I describe happen. I still plan on doing so, but I figured I may as well publish this as is, if for no other reason that to have a record of my thoughts at the time.
If you have thoughts on the matter, please get in touch. I’m interested in others’ perspectives.
Yeager, D. S., & Dweck, C. S. (2012). Mindsets That Promote Resilience: When Students Believe That Personal Characteristics Can Be Developed. Educational Psychologist, 47(4), 302–314. doi:10.1080/00461520.2012.722805 ↩︎