Lessons learned while teaching.

I may have only done three classes, but already I’ve rediscovered that there is one principal to working efficiently: automate and systematize whatever you can. Practicing this mantra allows a course to run much smoother, reducing headaches and prepratory time. I’ve compiled a short list of tips, each of which I learned the hard way:

Make sure, at the beginning, that you have a way of broadcasting messages to all students.
According to Murphy’s Law, you will regret not figuring this out just at the moment that you have to notify all students of some inevitable emergency. More realistically, you simply forgot to mention some time sensitive information during the regular class session, but it would be too late to wait for the next one.
Separate work and personal email.
Make up a new Gmail or Yahoo address for each class that you teach. The accounts are free and the separation reduces the chance that you will accidentally miss a student email (say, because they forgot to put the ‘CS 101’ tag in the subject line). It also means that you don’t reveal your personal email to the troublesome students that you hope to never see again. The very few students that are worth keeping in touch with on a more personal level, will feel among a priveledged elite when you grant them knowledge of your personal email.
Have a well defined late-work policy.
In every class that I have taught, someone always had some issue that prevented them from doing their homework that week. I expect that every class I ever do will follow this pattern. Build some flexibility into your policy. If you don’t have to provide immediate feedback, allow a one-time only, no questions asked, 2 day late submission. If you do have to provide immediate feedback, consider -20% for each day late.
Have a course web page.
The webpage should contain: schedule, contact info, assistance info, grading policies/rubric, tip/hint section for homeworks, project guidelines. Make it clean and stylish. If you don’t know html, go with Google Pages. Having a tips/hints page for each project was of enormous help in reducing email assistance load for the last compilers class. When student runs into a tricky part of the assignment and sends you a question in email, you can post your response on the tips page. If you get the same question, reply with a link to the page so that you get them used to checking it before sending email.
Learn them how to learn.
For each project they run into, help them to build a problem solving process. Give pointers to time management strategies, debugging strategies, study strategies, etc. Each difficulty on each assignment should be discussed as a learning opportunity. Review what approaches didn’t work, and why; for the reasons are more informative than the results.
Automate grading.
As much as is possible: write a script that downloads, unpack, unit tests each submission. Even better, if they can submit to an auto-testing website before they turn it in to you. Then, they have feedback during development, and they don’t get the little things wrong (like “I forgot my makefile”). Write a script that automatically sends out email to individuals of their score. Have assignments with clear rubrics, so that grading becomes a quick series of checking off boxes.