Introduction to 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
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
A self-paced lab that provides students with extra practice and supervision in transferring their programming skills to a particular programming language. The course can be used for any language of the student's choosing, subject to approval by the instructor. A series of exercises guide students through the pragmatic use of the chosen language, building their familiarity, experience, and style. More advanced students may propose their own programming project as the target demonstration of their new language skills. This course is available for graduate students only. CS 111 may be repeated for credit of up to a total of nine units. Undergraduates should register for CS 11.
Bayesian Statistics
Functional Programming
Reasoning about Program Correctness
Computability Theory
Logic Model Checking for Formal Software Verification
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; Offered 2020-21.