My Courses

What I Generally Teach


Image from K.D. Rausin's blog.

ENGR 100.

CSCI 203 Introduction to Computer Science II. Taught in Python.

CSCI 204 Introduction to Computer Science II. Freshman or sophmore level course. Introductory data structures including Lists, Stacks, Queues, and Trees. Basic Big-O worst case analysis. Searching and sorting. Taught in Python. This is a project based course. Pre-requirement of CSCI 203 or Instructor permission. There is a required lab with this course.

CSCI 208 Programming Language Design. Sophmore or Junior level course. Study of modern programming language paradigms (procedural, functional, logic, object-oriented). Introduction to the design of programming languages including syntax, semantics, data types and structures, control structures, and run-time environments. Students learn a scripting language (Bash), an object oriented language (C++), a functional language (Haskell), and a logic language (Prolog). Additionally, students apply the course material to learning one more language that they select. Pre-requirement of CSCI 205 or Instructor permission. (Students need to have 2 or more languages already and we assume Python and Java). There is a required lab with this course.

CSCI 331 Compiler Optimization. Junior or Senior level course. Strict pre-requirement of CSCI 208 (Programming Languages). Does not assume prior knowledge of compilers. Basic introduction to compilers. Focus is on optimization. This is a project based course. Students have some choice which programming langues they use. This course involves heavy programming, understanding and editing code written by someone else, problem solving, and a few presentations on your project. This course does not include a large writing component and does not have a lab.