"Tell me and I forget. Show me and I remember. Have me do and I understand."
I really enjoy teaching, though I find it to be a lot of work. I'm thankful
to be at Michigan and have the opportunity to teach and work with such good
and motivated students.
I've taught a fairly wide variety of classes, though recently the
focus has been on hardware design classes. See my vita for a list
of which semesters I've taught each of these courses.
- Engineering 100 -- I've had the joy of teaching
version of this class, Microprocessors and Music.
Easily the best designed class I've ever taught and one of
the most enjoyable. Due to high demand we're trying to
figure out if we can add a section in the Fall which would
let me teach it on a regular basis.
- Engineering 101: Introductory Programming for Engineers --
I've taught this once (two sections, 350 students). It was
fun, but I'd put in more engineering and a lot less computer science if I were to do it again.
- EECS 203: Discrete Mathematics -- When I first got here, I taught this a couple of times. Fun, but too theory-based for many students. I've been teaching this in the Spring recently and rather like it.
- EECS 270: Digital Logic -- Another class I taught a lot
"back in the day" but less so recently. I wrote all the labs
when we moved from ABLE to Verilog, and then reworked them when we
moved from Xilinx to Altera.
281/380: Data Structures and Algorithms -- I've taught this
class a couple of times. I honestly like the theory side better than
the programming (it's just more interesting) but both are fun. The
version of the class I've linked to was from the first time I taught it
(with Igor Markov) and it had a heavy emphasis on the STL.
- EECS 370: Computer Organization -- I used to teach this a lot, but these days everyone wants to teach it. One of the best classes in the department. Another class originally organized by Peter Chen but with lots of work put in by the rest of the faculty.
- EECS 373: Introduction to Microprocessor-Based Systems. Very fun class that I've taught a lot. The student projects are always amazing and the most fun part of the class for me (and the students). Matt Smith runs the lab and does an outstanding job with the students. In Winter 2016 all of the student groups created videos for their projects. They are worth looking at. (In previous semesters some groups had made videos. A search for eecs 373 on youtube will turn up a number of those.)
- EECS 452: Digital Signal Processing Lab. This is the signal processing major design/capstone class where the students design and create a signal processing project using and FPGA and a DSP. I'm teaching this for the second time in Winter 2010 and it's a bit of a stretch for me. It combines digital logic, digital signal processing, and programming into one very dense and very interesting package. Without the way-beyond-the-call-of-duty work by Emeritus faculty member Kurt Metzger the class wouldn't have a chance of working.
- EECS 470: Computer Architecture. Another major
design/capstone class. Thomas
Wenisch and I have been rotating semesters on this
class. The students create a synthiziable out-of-order
processor in Verilog. I have really enjoyed teaching this
class. It's a lot of work for the students and teaching
staff, but it's worth it.
- EECS 473: Advanced Embedded Systems. This is a follow-on to EECS 373 and is the other major design class I've taught and the only one I've created. The students learn to design a PCB and program it, focusing on size, cost and (especially) power issues. Lab covers rapid-prototyping, RTOSes, Linux device drivers, and PCB design. I don't typically have student groups make videos for this class, but one group made a very nice video in 2015. The GSIs and staff have been heavily involved in the development of this. In particular Jeremy Nash, Matt Smith, Jason Shintani, and Yitian Chen did a lot of work, but others were also involved quite a bit.
Pretty simple really.
- Keep the students engaged. No matter how great your lectures are, they
aren't valuable if no one is listening. In-class exercises are generally
the best at this, but just doing whatever you need to do to keep people
awake and attentive is worth considering.
- Know how well the students are understanding what you're saying. It's
really easy to go too fast (I often do) or too slow (I've done that on
occasion too though my students might find that hard to believe). Ask them
if they get it. Do in class exercises and see what they come up with.
Sadly, students seem to be getting less willing to share if the get the
material or not in the last few years. Generally speaking, there will be a
few students who will let you know how they are faring during class and you
can use them to help figure out where everyone else is. Non-traditional
students (i.e. older) will tend to provide the best feedback in my
experience. Perhaps because they are less worried about how their peers
- Be organized and prompt. That includes showing up to lectures before
the lecture starts, being very comfortable with the plan for that day, and
having the material prepared in a way that will make sense to the students.
It also includes returning their work in a timely way. I find this to be
the most difficult to actually accomplish, but it is very important. The
students really appreciate it.
- Be friendly and welcoming.
- Know what you're talking about.