Computer Science Complete Course List

CS102 Problem Solving with Computers (Staff)

An introduction to the uses of computers as problem-solving tools. Topics include: the synthesis, analysis, and visualization of information; the construction of models of real-world systems and organizational activities; the history of computing; the impact of computers on society. A variety of applications programs (spreadsheets, database management systems, etc.) will be introduced. This course is not intended for students with a major or minor in Computer Science or Mathematics. This course may not be taken for credit after receiving credit for any course numbered CS110 or above. F, S.

CS110 Introductory CS and Programming (Staff)

An introduction to the fundamental concepts and abstractions of computer science, using a study of algorithms and computer programming as a vehicle. Topics include: the design, implementation, and application of algorithms; the uses of abstraction; the modeling and representation of values and entities; control flow and modularity. A high-level programming language is introduced and used. F, S.

CS250 Intermediate CS and Data Structures (Zaring)

A continuation of the study of abstraction, algorithms, and computer programs. Concepts related to the design, analysis, and implementation of more advanced data types (lists, stacks, queues, trees, graphs, etc.) are covered in detail. Prerequisite: CS110. S.

CS255 Computer Organization (Zaring)

The organization and inner-workings of computers are covered in some detail, with an emphasis on the relationships among the various levels of hardware and software found in such systems. Attention is focused on both general concepts and on case studies of specific systems. Assembly language programming is introduced. Prerequisite: CS110 and CS250 or consent of instructor. F.

CS270 Paradigms of Computation (Zaring)

An introduction to the fundamental and emergent paradigms, both formal and pragmatic, of algorithms and computation. Topics include basic automata theory, functional programming, object-oriented design, and concurrent/parallel programming. The Scheme programming language is introduced. Prerequisite: CS250, CS255, MATH250. S.

CS310 Database Systems (Zaring)

A study of the foundations, design, and implementation of database systems. Topics include data models, database design, query languages, database architectures, implementation issues, and case studies. Projects involving implementations of or use of database systems are required. Prerequisite: CS250, CS270 or consent of instructor, MATH250.

CS320 Computer Systems and Architecture (Zaring)

A detailed discussion of computer architecture of computer systems, including studies of data- and control-paths, memory systems, and parallel/distributed systems. Programming and digital-circuit design projects may be required. Prerequisite: CS255, CS250, MATH250.

CS340 Artificial Intelligence (Zaring)

An introduction to issues surrounding machine intelligence. General topics include knowledge representation, searching, reasoning, learning, and planning. Specific problems drawn from areas including computer game playing, theorem proving, natural language processing, expert systems, and robotics will be addressed. Programming projects in LISP, Scheme, Prolog, or related languages are required. Prerequisite: CS250, CS270, MATH250.

CS350 Operating Systems (Wiebe)

The fundamental concepts of resource allocation in operating systems. This includes process management, storage management, device management, and networking issues. Case studies of actual operating systems will be presented. Prerequisite: CS255.

CS360 Algorithm Analysis and Design (Nunemacher)

A continuation of the study of data structures begun in CS250 with emphasis on the design and analysis of algorithms. Also an introduction to questions of efficiency and NP completeness. Prerequisite: CS250, MATH111, MATH250.

CS370 Programming Languages (Zaring)

A systematic study of programming language design, analysis, and implementation. Relationships among languages, language properties and features, and formal notions of language semantics are considered. Major language paradigms (imperative, functional, object-oriented, logic programming, and others) are studied. Prerequisite: CS250, CS270, MATH250.

CS380 Theory of Computation (Nunemacher)

A study of the formal theories underlying computer science. Topics include Turing machines, automata theory, recursive functions, computability, and formal languages. Prerequisite: CS270 or consent of instructor, MATH250. F.

CS390 Special Topics in Computer Science (Staff)

A course of varying content reflecting the needs and interests of students.

CS410 Compiler Theory and Design (Zaring)

An investigation of compiler theory, design, and construction. Formal and practical issues in lexical analysis, syntactic analysis, semantic analysis (including type-checking and optimization), and code generation are covered. Substantial projects concerning implementations of working compilers are required. Prerequisite: CS250, CS255, CS270, CS380. S.

CS490 Independent Study (Staff)

Independent study of a topic in advanced computer science under the guidance of a faculty member. Individually arranged.

CS491 Directed Readings (Staff)

Reading in advanced computer science under the guidance of a faculty member. Individually arranged.

CS499 Seminar (Staff)

Intensive study of a topic selected by the faculty member in charge with presentations by students.