CS 1030: Foundations of Computer Science (formerly CS 1400)

Fa10 | Sp11 | Fa11 | Sp12 | Su12 | Fa12 | Sp13 | Fa13 | Sp14 | Fa16 | Fa18

Gentle introduction to the fundamental concepts of computer science. In particular, students learn problem-solving skills and apply them by writing programs in a visual and fun programming environment that is friendly to beginners. Students also study, simulate, and visualize the inner workings of a simple computer.

CS 1050: Computers in Society (retired course)


Social issues that surround the increasingly pervasive roles that computers play in society.

CS 1060: Explorations in Computer Science (retired course)

Fa08 | Sp09 | Fa09

Introduction to the scientific principles and engineering strategies that are the basis of computing and shows how they make possible such disparate technologies as web search engines, computer-animated movies, computer games, digital music, and artificial intelligence.

CS 1410: Introduction to Object-Oriented Programming

Fa13 | Sp14 | Fa15 | Sp16 | Fa16 | Fa17

Introduction to the engineering and mathematical skills required to effectively program computers.

CS 2000: Introduction to Programming in C (retired course)

Fa05 | Fa06 | Fa07

Introduction to essential programming concepts using C, including the decomposition of programs into functional units, control structures, recursion, and dynamic memory management.

CS 2100: Discrete Structures

Sp17 | Fa18 | Fa19

Introduction to propositional logic, predicate logic, formal logical arguments, finite sets, functions, relations, inductive proofs, recurrence relations, graphs, and their applications to Computer Science.

CS 2420: Introduction to Data Structures and Algorithms

Su06 | Su07 | Su08 | Sp10 | Sp11 | Sp12 | Fa15 | Sp18 | Sp19 | Sp20

Introduction to the problem of engineering computational efficiency into programs. Classical algorithms and data structures. Analysis of program space and time requirements.

CS 3020: Research Forum

Fa09 | Fa10 | Fa11 | Fa12 | Fa13

Seminar about the kinds of problems that remain unsolved in computer science and the research conducted by professors in the School of Computing.

CS 3500: Software Practice


Practical exposure to the process of creating large software systems, including requirements specifications, design, implementation, testing, and maintenance. Emphasis on software process, software tools, software engineering techniques, and team development practice.

CS 3810: Computer Organization

Sp16 | Fa17

In-depth study of computer architecture and design. Topics include RISC and CISC instruction set architectures, CPU organizations, pipelining, and memory systems.

CS 4000: Senior Capstone Project - Design Phase


First semester of the Senior Capstone Project. Seniors work on team formation, project identification, project planning, and completion of a system prototype.

CS 4400: Computer Systems

Fa07 | Fa08 | Fa09 | Fa10 | Fa11 | Fa19

Computer systems from a programmer’s point of view, including machine level representations of programs, measuring and optimizing program performance, memory hierarchy and virtual memory, linking, and exceptional control flow.

CS 4470: Compiler Principles and Techniques (formerly CS 5470)

Sp05 | Sp06 | Sp07 | Sp08 | Sp09 | Sp10 | Sp18 | Sp19

Ideas behind the compilation of programs, including lexical an\ alysis, parsing, symbol tables, runtime environments, and code generation.

CS 4500: Senior Capstone Project


Second semester of the Senior Capstone Project. Seniors develop significant software systems in small teams, with emphasis on applying sound, disciplined software engineering practice.

CS 5040: Teaching Introductory Computer Science

Fa15 | Fa16 | Fa17 | Fa18 | Fa19

Issues confronted by teaching assistants (TAs) of introductory computer science courses, including leading lab sections, conducting office hours, grading assignments, and communicating with students.

CS 5510: Programming Language Concepts


Ideas behind the design and implementation of programming languages, including syntactic description, scope and lifetime of variables, runtime stack organization, parsing and abstract syntax, semantic issues, type systems, and programming paradigms.