I focus on the theoretical side of the curriculum, commonly teaching courses on discrete mathematics and programming languages.
- CSCI-1323: Discrete Structures, a course on discrete mathematics, introducing proof writing, formal logic, set theory, induction, and graph theory with an emphasis on active learning, communicating mathematics, and developing new methods of problem solving. Required for majors and C2M. No prerequisites, required for CSCI-3320. Offered every Spring, usually taken in the second semester.
- CSCI-2322: Principles of Functional Languages, a course using functional programming to focus on recursive thinking and algorithmic decomposition. A problem-driven approach to individual and group projects introduces the beginnings of program design. Taught in Haskell, using the excellent Learn You a Haskell book. Requires for majors. C2M students can count one of CSCI-2322 or CSCI-2321 (Computer Architecture) towards the degree. No prerequisites, but some programming experience is strongly encouraged, and CSCI-1323 is useful. Required for CSCI-3368. Offered every Fall, usually taken in the third semester.
- CSCI-3396: Compilers, an upper-division course on the practical issues the arise in compiling from a low-level, systems-oriented, view. Topics include parsing, representation, register allocation, and the basics of code optimization for assembly-level code. Programming intensive, with four substantial projects focusing on different components of compiler construction. Using C++, and is by far my most applied course. Upper-division elective, fulfilling the systems requirement for majors. Requires CSCI-2321 as a prerequisite. Usually offered every other Fall.
- CSCI-3368: Principles of Programming Languages, an upper-division course exploring programming languages from a high level, theoretical, view. The course covers parsing, representation, and semantics for imperative, functional, and object-oriented languages. Programming intensive, requiring students to implement an interpreter for a growing mongrel language incorporating each style. Uses Haskell as the host language. Upper-division elective. Requires CSCI-2322 and CSCI-2320 as prerequisites. Usually offered every other Spring.