CS 103.    Exploring Computer Science (Staff)
A survey of the many sub-fields of computer science, which will provide an introduction to what computer science is and what computer scientists do. Topics will range from the theoretical (mathematical foundations of computing, design algorithms) to the practical (components of the computer, how the Internet works). No credit will be given for this course if a student has previous credit for CS 110 or any computer science course with a higher number than 110. F, S. (Group II, Quantitative)

CS 110.    Introduction to Computer Science 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. (Group II, Quantitative)

CS 210.    Intermediate Computer Science and Data Structures (Zaring)
A continuation of the study of abstraction, algorithms, and computer science. Concepts related to the design, analysis, and implementation of more advanced abstract data types (lists, stacks, queues, trees, graphs, etc.) are covered in detail. Prerequisite: CS 110. S. (Group II, Quantitative)

CS 255.    Computer Organization (McCulloch)
The organization and inner-workings of computer systems 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 both on general concepts and on case studies of specific systems. Assembly language programming is introduced. Prerequisites: CS 110 and CS 210 or consent of instructor. F. (Group II)

CS 270.    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. This course cannot be taken for credit after receiving credit for CS 380. Prerequisites: CS 210, CS 255, MATH 250. S. (Group II)

CS 310.    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. Prerequisites: CS 210, CS 270 or consent of instructor, MATH 250. (Group II)

CS 320.    Computer Systems and Architecture (McCulloch)
A detailed discussion of the 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. Prerequisites: CS 210, CS 255, MATH 250. (Group II)

CS 340.    Artificial Intelligence (McCulloch)
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. Prerequisites: CS 210, CS 270, MATH 250. (Group II)

CS 350.    Operating Systems (Wiebe)
The fundamental concepts of resource management in operating systems. This includes process management, storage management, device management, and networking issues. Case studies of actual operating systems will be presented. Prerequisites: CS 210, CS 255, MATH 250. (Group II)

CS 355.    Computer Networking and Communications (Wiebe)
Practical and theoretical aspects of computer networking and communications are covered (using the Open Systems Interconnection Reference Model as a unifying framework), with reference to actual implementations of network protocols (e.g., TCP/IP and Ethernet). Network security and other topics of current interest are discussed. Prerequisites: CS 210, CS 255, MATH 250. (Group II)

CS 360.    Algorithm Analysis and Design (McCulloch)
A continuation of the study of data structures begun in CS 250 with emphasis on the design and analysis of algorithms. Also an introduction to questions of efficiency and NP completeness. Prerequisites: CS 210, CS 270, MATH 111, 250. (Group II)

CS 370.    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. Prerequisites: CS 210, CS 270, MATH 250. (Group II)

CS 380.    Theory of Computation (Zaring)
A study of the formal theories underlying computer science. Topics include Turing machines, automata theory, recursive functions, computability, and formal languages. Prerequisites: CS 270 or consent, MATH 250. F. (Group II)

CS 390.    Special Topics in Computer Science
A course of varying content reflecting the needs and interests of students. (Group II)

CS 410.    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 implementation of working compilers are required. Prerequisites: CS 210, CS 255, CS 270, CS 380. S. (Group II)

CS 490.    Independent Study (Staff)
Independent study of a topic in advanced computer science under the guidance of a faculty member. Individually arranged.

CS 491.    Directed Readings (Staff)
Readings in advanced computer science under the guidance of a faculty member. Individually arranged.

CS 499.    Seminar (Staff)
Intensive study of a topic selected by the faculty member in charge with presentation by students.