Bad Teachers

I spend much of my work day with tenured and tenure track professors at a Research 1 university. These men and women are expected to acquire and manage research grants, recruit and supervise graduate students, maintain a world class research program, organize conferences, and serve on a number of departmental and college committees. Oh, and they teach one or two classes a year.

Unfortunately, for too many of them the teaching is an afterthought — an extra duty with which they are saddled, to be executed as expeditiously as possible. Teaching is not what they are interested in doing, and it has little or nothing to do with their career advancement.

I know how hard these professors work, and I have great sympathy for the pressures on their time. But this is unacceptable. I also spend a lot of time with students, and I know how disillusioned and frustrated they become with instructors who are uncaring or incompetent.

So I’m calling you out, bad teachers. Some percentage of your salary is paid by these students, and they deserve your best effort. Moreover, for people who are supposed to be long view, big picture thinkers, you seem oblivious to the fact that your students are the future of your department. They will establish your reputation in the community. Your future endowments will come from them. Or not. So stop acting as if they don’t matter. Just stop it.

I’ve heard your excuses, and I am not impressed. I took classes from instructors who were socially inept, under-prepared, English-disadvantaged, and that were still better teachers than many of the professors I know. I don’t buy that your students are too poor to be taught effectively. Flipping through the textbook publisher’s Powerpoint slides in class and then testing students on material you may or may not have discussed is not teaching. It’s a waste of everyone’s time. The worst group of students I ever taught still learned the important things. I made sure of it.

In the end, there are a small number of things that will improve your teaching. And they don’t even take much time. First, care. Just care. About your students. About your topic. About the hour and a half you are spending with them twice a week. Engage the people in the room. Look them in the eye. Ask them questions. Encourage them to ask you questions. Play a game with yourself where you notice when someone gets lost or bored. When all else fails, get them out of their chairs for five minutes. Put them in teams and get them to solve a problem together.

Second, don’t tell them what the book says. Tell them what you have learned. Tell them why you love this subject area. (If you don’t like your chosen specialty, you should consider a career change.) Tell stories. Ask them to investigate questions that come up in class. Have them grade each other’s homework. They will want to focus on grades, because we have taught them that is all that is important. Don’t let them. Return time and again to what’s important, and why.

Last, demand students’ best effort and attention. They have demands on their time, as well, and sometimes assignments will be missed. But if they expect you to grade something, they should be prepared to make it gradable. Don’t be afraid to put a big red ‘X’ across homework that is half-assed (technical term). If you are giving them your best effort, then they should at least have the decency to be ashamed when they don’t reciprocate. Those who don’t try are not worth your effort, and can be ignored without a second thought.

Notice I didn’t say anything about being prepared, or flipping the classroom, guest lecturers, or creating innovative assignments and activities. I do all of those things, and I think they make for a superior learning experience. But they are not necessary to make a class worth taking. Or teaching. All that really matters is that you give of yourself, you respect the time and money that students are investing in your class, and that you give them a glimpse of why you became a professor in the first place.

There, I’ve said. Feel free to tell me all the ways I’m mistaken. That’s how we learn, right?

Using Git in computer science classes

Coming to academia from industry, I am a strong proponent of teaching useful career skills to undergraduates, especially when it can be done in a way that enhances or reinforces core CS concepts. Using a source control system for managing assignments has always been near the top of my wish list in this regard. A few of my like-minded colleagues have used externally hosted websites and Subversion (SVN) for managing classes with some success. I wanted to experiment with a system that would integrate with what our department’s current workflow and technology.

This semester our administrator and I collaborated to create a set of Git repositories for my senior level Interface Design and Technology class. The repositories replaced a set of script files on a department Unix server that have been used for several years to help automate paperless submission of homework and programming assignments. We set up a separate repository for each student in the class, and one for each of the project groups. The directory containing each repository was owned by a  Unix group that consisted of the student (or students, in the case of project group repositories) and myself. Each repository was created “bare” — no working directory — and “shared” to act as an integration point for the student’s work. Each student cloned the  repo for themselves and their group, and I cloned all of them to my workstation.

Students would push each assignment to the shared repo. I would pull the repo, grade the assignment, commit the changes, and push the grades back to the repo.

Despite inevitable problems with permissions, branches, and conflicted merges, I consider the experiment a success. I was able to create simple scripts to automate much of the pulling and pushing, though there are several more I will make next time to support some of the grading tasks.  There are a few important things I learned.

First, notification is important for this environment. We had not set up e-mail notifications, and I ended up sending group messages to the class when grading was complete. It was also not always clear to the students when they had successfully pushed their work to the correct branch in the shared repo.

Using ssh keys for authentication is virtually a necessity for this setup. I typed my password more times than I care to remember over the course of the semester. My dream for our CS program would be to spend the first day of the intro class for majors setting up ssh keys and an individual Git repo. There is an open question whether each class would be better represented by a separate repository or a branch in the student’s master repo, but either way a graduating senior could take all of their school work when they leave, with a complete history of its creation.

As an aside, one of our groups became so interested in some of these issues that they created an application to help beginners master the system and support the functions necessary for our workflow. For their penultimate project, they added automated integration using Buildbot with results (success or failure) integrated into the system.  This is one step toward my long term goal of using test cases to serve as both specification and instant grader for assignments, but that is a discussion for another day.