I’m in my fourth semester as a teaching assistant for the Intro to Computer Science classes and I absolutely adore doing it. The system for hiring and training undergrad TAs has been changing in the past couple of years because of the wild influx of people taking computer science courses--enrollment in the intro class was upwards of 500 students last year--and as a result the support system has also needed to grow, to support the needs of all those students. Undergraduate TAs hold office hours to help students one-on-one with their projects and homework, explain concepts, teach good debugging strategies, and basically be as helpful as they can be for the students taking the course.
But what does it really mean to be helpful in a CS course? What can a good TA do to make a difference in a student’s ability to learn the material and understand how to apply it to new situations? What is the mission of the TA program as a whole, and how do we go about implementing it?
I don’t think the job of the teaching assistant is to help the student get a good grade. That slips far too easily into the world of academic dishonesty and laziness--where a TA decides to just write the four lines of code because the student clearly isn’t going to get it, or encourages the student to take a certain approach to solving the problem because it’ll be easier. Computer science is a field in which many people have no experience, and it can be hard; not everyone will get an A, and no TA can change that.
I’m of the opinion that the purpose of a teaching assistant is to teach the student how to think. It’s the old teach-a-man-to-fish adage: you can tell a student the answer once, or you can ask them questions about their code and thought process until they arrive at an answer themselves. With enough reinforcement, teaching students how to think about a problem, how to develop a solution, will give them the tools they need to do that independently of a TA.
Most Tufts students have been writing essays since middle school, and there’s a fairly well-defined process for developing one: come up with a thesis statement, write an outline, fill it out with some details for a rough draft, then refine until you’re satisfied. When a new Comp11 student is faced with the problem of creating a C++ program, they don’t have such a process to solve it, and that’s why many struggle. If a teaching assistant can outline an equivalent strategy for developing code, then they’ve done a good thing.
Further, many intro to CS students are not going to continue to be a computer science major. For these kids, learning to program in C++ is a side benefit of the course. The real advantage comes from having a new method to solve problems, one that can be abstracted to other fields, other types of problem, and applied in their preferred discipline.
I can go on for a long time about the philosophy of being a teaching assistant--how it doesn’t matter how smart you are if you don’t understand what the student is asking, and how understanding what they’re thinking can be super hard, but essential to actually getting them to understand what they’re doing and why it will work--but this is a blog post, so I’ll stop.
Does this describe a teaching assistant you’d like to have? Or would you rather be told the answer and figure out the process for yourself? Let me know in the comments!