Introduction to Computer Programming
Intermediate Computer Programming
Introduction to Programming Methods
Introduction to Software Design
Fundamentals of Computer Programming
Introduction to Discrete Mathematics
Introduction to Computer Science Research
Introduction to Digital Logic and Embedded Systems
Computer Language Lab
Student-Taught Topics in Computing
Introduction to Computer Science in Industry
Decidability and Tractability
Data Structures & Parallelism
Introduction to Computing Systems
Algorithms
Computer Science Education in K-14 Settings
Multidisciplinary Systems Engineering
Undergraduate Thesis
Undergraduate Projects in Computer Science
Undergraduate Reading in Computer Science
Special Topics in Computer Science
Seminar in Computer Science
Reading in Computer Science
Causation and Explanation
Graduate Programming Practicum
Bayesian Statistics
Functional Programming
Reasoning about Program Correctness
Computability Theory
Automata-Theoretic Software Analysis
Advanced Digital Systems Design
Advanced digital design as it applies to the design of systems using PLDs and ASICs (in particular, gate arrays and standard cells). The course covers both design and implementation details of various systems and logic device technologies. The emphasis is on the practical aspects of ASIC design, such as timing, testing, and fault grading. Topics include synchronous design, state machine design, ALU and CPU design, application-specific parallel computer design, design for testability, PALs, FPGAs, VHDL, standard cells, timing analysis, fault vectors, and fault grading. Students are expected to design and implement both systems discussed in the class as well as self-proposed systems using a variety of technologies and tools. Given in alternate years; not offered 2021-2022.