I have two goals when teaching Computer Science. My first goal is to teach a challenging course that encourages student understanding of deep CS ideas and skills. My second goal is to excite student imagination so that students continue studying CS outside my classroom.

Deep Student Understanding

In the Summer of 2008 I had the opportunity to teach a traditional large lecture course in Computer Science. I adapted the detailed notes of the course’s traditional instructor and took care to include frequent jokes, relevant examples, public coding, and other techniques to keep interest. I noted the usual problems during my lectures – student absences, sleeping, wasting time online during lecture. What worked well in the course was the homework assignments, TA-led active discussion sections, and the time the students put in studying for the exams. All these things were very focused on algorithmic problem solving. In retrospect I think my time in lecture was not as focused; I concentrated on introducing and covering material, rather than on solving problems algorithmically. Time in lecture, without some sort of engagement, is not going to develop the skills and ideas that CS really needs to pass on to its students.

Since then, I have been designing my classes with a mix of lecture (for background) and active learning (for developing skills and reinforcing essential information). In a recent class on databases, for example, rather then lecture on different types of of statements I asked students to begin designing their own queries in class working from a reference. In all the classes where I have tried an active approach, students self-report greater engagement (look here for some example classes and feedback) and learning and I have feedback about whether learning objectives are really being met.

Deep student understanding also needs to be supported by assessment. Very project oriented assessment strategies can encourage students to focus on “getting the job done” at the expense of material discussed in class. Feedback needs to come quickly enough so students can realize they have a problem and correct it before they have to perform in a high-stakes exam. Students should know their exams should focus on solving challenging problems whether programming, drawing circuit diagrams, doing proofs – not simply reciting algorithms or other material learned in lecture. Not only does this make students focus more, but I like it because it makes me think in terms of the skills I’m trying to develop and not just telling students information I find interesting for its own sake.

Excitement

In my opinion, Computer Science becomes more expansive and exciting every year. But enrollment and retention numbers provide evidence that many view Computer Science as boring, irrelevant, or beyond their understanding. My own research interviews with students suggest that, even student well-into a CS major may not really understand what makes many areas of CS interesting. This is not just a problem for recruiting and retention – if a student graduates in Computer Science they need to have the motivation to continue learning on their own or their skills will be forgotten or become outdated. For that reason, I view the development of student excitement to be an essential part of CS education.

Excitement starts from a welcoming classroom environment. I’ve interviewed many students whose experience in CS classrooms made them doubt their abilities to succeed in CS. CS classes often have negative behaviors; for example, experienced students ask lengthy irrelevant questions to prove their own technical skill. I make sure to keep those sorts of questions to office hours or after class – in class students need to feel comfortable asking novice questions without embarrassment. Every class also needs to explain why the material is exciting and useful – motivating examples, jokes, and personal stories connect computer science to a broader world. Finally, students need to connect computer science to their own interests and personal aspirations. Large college classrooms frequently fail at this because no one feels responsible for ensuring that a student has a good plan for their careers in CS. Even a single meeting with the professor or a TA can correct misconceptions about CS and ensure they have a vision that makes sense. If a student feels supported in the CS community, knows about the excitement of the field, and connects that to their personal goals – they should have what they need to develop excitement about Computer Science.

Conclusion

We can’t teach all of computer science in just four years. If a students lack excitement they won’t fully participate and pursue the field on their own. If they lack a foundation of deep ideas, they will be frustrated as they attempt to branch out in new areas. Promoting a deep understanding of computer science while also encouraging student excitement and exploration can be a difficult thing, but both are necessary to produce excellent computer science students. I have concrete ideas that I am looking to put into practice but I’m also hope I can get new directions from the experienced faculty I work with. My goals from my students apply to myself as well – I hope to deepen my understanding of CS Education with new perspectives, while keeping excitement about the field and all it has to offer our students.