If this page looks abnormally plain, you should consider upgrading to a standards-compliant browser.
Links to other sections of this site appear at the bottom of the page.
I love to teach. There's something very satisfying about helping others learn.
The catalog description for CS 70 reads
Abstract data types including priority queues, dynamic dictionaries, and disjoint sets. Efficient data structures for these data types, including heaps, self-balancing trees, and hash tables. Analysis of data structures including worst-case, average-case, and amortized analysis. Storage allocation and reclamation. Secondary storage considerations. Extensive practice in implementing these data structures for a variety of applications.
but that doesn't really give you the whole picture. It doesn't mention that CS 70 teaches you just about everything worth knowing about C++, including the culture of C++ programming.
CS 70 is in many ways a right of passage. Not in a negative way (“If you can handle the CS 70 workload, you'll survive the major”), but in a positive way. For many students, they enter the course feeling uncertain of their programming skills and leave knowing that they can indeed digest a specification and write a program, from scratch, that meets it.
This course provides a thorough examination of issues and features in language design and implementation. The course covers both the theory underlying programming languages and mechanisms for their implementation. The material was very familiar to me as issues in programming languages have been part of my past research and I continue to be interested in the area.
This course covered theoretical and practical issues and problems in operating system design. The course concentrated on the principles behind the design of all operating systems, but students also learned how these principles are applied in real operating systems.
The course used an operating system simulator known as OS/161 which provides an excellent hardware simulation and a realistic operating system on which to build. In assignments, working in pairs, students built synchronization primitives, process abstractions, I/O system calls, schedulers, etc.
This course draws on ideas from psychology, egonomics, graphic design, and a variety of other areas, to educate students about issues in software design. As well as learning in the classroom, students had to do assignments using the rapid prototyping facilities of Mac OS X, and develop a working UI prototype.
I actually had to do a fair amount of research to teach this
course, because it lies outside my main research area. However, it
wasn't a chore, but an opportunity to properly research into matters
I'd long been interested in.