Mark Brehob
Kurt Metzger Collegiate Lecturer
Electrical Engineering and Computer Science (EECS)


"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 Peter Chen's 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.

  • EECS 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.

Teaching Philosophy

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 perceive them.
  • 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.