Sunday, April 15, 2012

A New Syllabus: Alternate Approach to CS1 and CS2

Executive Summary: I'm considering a complete rework of my syllabus and teaching methodology. The result will be pretty much no lecturing during class times. It would also do away with pencil and paper tests and quizzes. Those would be replaced with electronic exercises, oral exams, and other different formats for assessment.

I've mentioned a few times earlier that I am considering making some very significant changes to my teaching style for next year. Some of this is prompted by the fact that having the book and making the videos for it automatically opens some new doors. Other influences come from things like KhanAcademy and various other things I have seen, heard, and read related to delivery of content as well as my own thoughts on pedagogy. Let's be honest, the goal of teaching is to get things into the student's heads. Those things are a combination of knowledge and tools to deal with the knowledge. I really think that technology is opening new doors in this area. That has given me some thoughts, and I wanted to jot some down here with the hope of getting a critique from current and former students as well as anyone else who has an interest.

The reality is that the general form of my syllabus for most of my programming based courses has changed little in the last 11 years. The details of numbers of assignments have changed and I introduced the "Interclass Problem" a few years back (which I think works really well), but a student who took my courses in 2001 would not notice a significant difference between what they were handed on the first day of their course and what we look at online at the beginning of my current courses. For Fall 2012 I am seriously considering blowing that all up.

Change Can Be Scary
One of the reasons I haven't changed my syllabus much is that change is scary. The general structure has served me well. I've tried some different experiments in courses, including expecting students to read and understand before showing up. That one failed miserably. However, it was something I could easily alter mid-flow because the syllabus hadn't been altered significantly. The syllabus is a contract with students. Once laid out, it needs to be followed. Making serious changes to it isn't something a teacher does lightly.

Of course, change isn't optional. We have to do things to adapt to the new realities of the world around us. I feel like the time has come to make some serious changes to every aspect of my teaching, changes that are substantive enough that it will also alter my syllabus. I want to rework not only how material is presented and interacted with, but how evaluation happens.

No More Lectures
The change I have been considering for a while is to stop lecturing in class. I enjoy lecturing. I think I'm fairly good at it. I've come to realize that it is not the most efficient medium for content delivery, and that technology is providing alternatives. As such, I plan to switch to an inverted lecture where students watch videos and read, then show up to class and code to solve problems. This is similar to my earlier, failed experiment with reading before class. I'm hoping the video lectures can make it successful this time. The real goal here is to spend more time in class having students do things and giving me the ability to critique what they are doing.

An End of Paper Quizzes and Tests
This fall I got rid of the paper "Minute Essays" because Google Forms gave me a better way to do them. I said I would love to get rid of paper quizzes and tests as well, but I didn't feel I could. Lots of my quizzes and tests involve students drawing things out like trees and lists. Even when they aren't required, they are helpful for partial credit. I am starting to think that it is time to look at other ways of assessment and to break free of paper. The goal here isn't really getting rid of paper. That is just a nice side effect. The goal is to improve learning and assessment while making life easier on me as well. Putting all of those together makes things more efficient. As I argued in my last post, I think that education really needs to drive for this goal, less we become the next market to be dramatically disrupted.

Getting rid of quizzes and tests in their current form is going to require some more interesting technology. In this case, Google isn't going to write it for me. Thankfully, I'm a CS professor who loves to code, so I just need a good idea of what the software needs to do and I can write it myself. I don't want to go the route of multiple choice tests. I tried using Moodle style quizzes for Astronomy to "verify" that students were reading. I need something that goes well beyond that. Mainly, I need something that is specific to CS and coding.

I see two main aspects to this software. First, it needs to evaluate code. Evaluating the functionality of code is fairly easy and has been done by a lot of tools before. I don't know of one that currently exists for Scala, but I don't see that as a big problem, I can certainly write one. The other thing that has to be addressed is the drawing. What hit me today is that I can certainly set up an environment that has the types of tools needed for drawing the things I expect students to draw, along with the ability to record not only the final drawing, but the steps in between, so I can replay their steps. For me, that makes this potentially more useful and informative than just paper.

What is more, the same system can inevitably be augmented for exercises and might even be able to do automatic checking of correct vs. incorrect procedure. That would allow me to take the time to focus more on things that are incorrect and work with those students to fix the problems. Again, this is an overall benefit. It makes me more efficient and hopefully improves student learning at the same time.

What About Tests?
I'm still a bit up in the air on the tests. I could certainly use the software just described for that type of evaluation. However, there is a part of me that really wants to do oral exams. I have never done them before, because they don't scale well. That part won't change. However, I picture them happening outside of class time. Imagine setting up appointments for them during the semester whenever you are ready to display mastery of a certain set of skills. I'd also like to find ways to possibly do take-home exams that works well. This is an area I'd love feedback on if anyone has ideas.

Variable Pace: Students Running Ahead?
In an earlier post I mentioned the idea of open ended courses. I think the format described here lends itself to that. If quizzes and tests aren't done in class on specific days, students have a lot more control over when things are completed. I can image some students, especially those with background knowledge, finishing all material early. I can also see students who struggle with one or two areas taking more time on those.

On the whole, I see these as positives. However, there is one thing that I worry about, what becomes the value of attending class? The shared class time has to follow a certain schedule. That would be my expected pace for the course. I would be throwing out problems following that pace. Students who get further ahead typically won't have a need to come to class. (Though their presence could be helpful in having them help teach others.) Those who fall too far behind won't be able to do what we are doing. Maybe that isn't so different from how things work now, other than the fact that now the assessment happens in class and is locked to the normal pace. What would be the implications of reducing the strength of that bond?

If you have any thoughts, please comment. If I am going to jump off into a completely new course format, I want to have lots of input and try to be as prepared as possible for what might happen.


  1. I wrote a webapp ( that I used for two courses and several programming contests. It's very easy to make it support Scala. But, the security is more of the "if you do it you'll likely get caught" variety rather than "you can't do it". (This is the price for easily supporting pretty much any programming language.)

    Let me know if you want details.

  2. This comment has been removed by the author.

  3. "The real goal here is to spend more time in class having students do things and giving me the ability to critique what they are doing."

    For most students, I'd expect a lot of the problem set work gets done in "optional but not really" evening lab sessions, which would make this effectively a swap of lab and lecture.

    Also, If you do change things, it will be interesting to compare the final coding projects of the new format's students with those of your current students. I'd expect them to be at least as good.

    (I wrote a longer comment, but then Blogger blew up and I accidentally removed it.)

  4. It seems like this has the potential to be the cruelest double-edged sword (more or less to the end you sum up in the conclusion of the article). Have you read about the Moore method? While not identical to what you've described here, it has the same flavor of 'at your own pace' learning. The real problem I think you'll run into is that there is only one of you. You will have to enlist (and rely on) the more successful students to help others during your 'lab time', because otherwise not everyone will get enough help.

    Also, I disagree with this approach on a fundamental level. You are eschewing class in exchange for what is an online course with what is, at most universities, a lab section. In fact, the 'class time' you are describing flows exactly like the IU introductory CS 'lab sessions'. While helpful to the students, it is no substitute for a good lecture. And simply providing video lectures means that you've just layered on an extra half-hour of homework for every class meeting.

    To be honest, the single largest flaw with the curriculum at IU is that it lacks exactly what you're trying to get rid of: your live coding sessions. In my first two semesters at Trinity, one of the things that helped me most as a programmer was watching you write code in class - demonstrating how an expert programmer works through and solves problems were as much a growing experience as doing it myself. I urge you to at least maintain this component.

  5. Cameron, would it change your opinion to know that my videos are almost exclusively live coding? What I find in practice is that I have very limited time to both cover the material and do live coding during the allotted meeting times. What is worse, I have no ability to force students to code in that time. The IcPs help there, but they only go so far.

    On thinking of this more, I realized that I might finish off class meetings with a few minutes where I motivate the next topic.

    In class I will go with pair programming. There won't be any really experienced programmers. Out of class, the ACM has set up tutoring times M-R afternoons. I think that has been very helpful in giving students times to come talk to a more advanced programmer even when I am not available. Granted, that doesn't always lead to great code as those programmers are still undergraduates and not uniformly skilled in Scala. Some of the latter problem will be fixed as time moves forward and a larger fraction of the students have started off in Scala.

  6. Cameron, I looked at the Moore method. I don't see this as much at all like that. I am providing a textbook and videos. The idea is that full instruction is pretty much available outside of class time. As you note, I am adding extra out-of-class work. (My wife noted that as well.) The goal is to be able to use in-class time better on things I can't do out of class. Lecturing is no longer part of that set. Neither is live-coding.

    My hope would be that the extra practice involved in this makes students more efficient when they do sit down to do real assignment. Right now most students spend inordinate amounts of time banging their heads against various walls because they don't really understand things. Maybe they thought they got something in lecture, but they didn't really and they don't try to apply it until something is due. The result is that they spend huge amounts of time doing projects that should be fairly simple. This approach is more to force them to do simple things so they actually understand it and then save time overall by reducing "head against wall" time.