Skip to content

Computer Science

UNDERGRADUATE COURSES

1. Introduction to Programming and Computation

11F, 12W, 12F, 13W, 13S: 2

This course introduces computational concepts that are fundamental to computer science and are useful for the sciences, social sciences, engineering, and digital arts. Students will write their own interactive programs to analyze data, process text, draw graphics, manipulate images, and simulate physical systems. Problem decomposition, program efficiency, and good programming style are emphasized throughout the course. No prior programming experience is assumed. Dist: TLA. Balkcom (fall), Cormen (winter).

2. Programming for Interactive Digital Arts

Not offered every year

This course presents topics related to interactive visual art generated on a computer. Although it briefly covers computer-generated media art, the course focuses on the programming skills required for creating interactive works. Rather than using commercial software, students write their own programs, using the Processing language, to create compositions with which users can interact. The course introduces fundamental concepts of how to represent and manipulate color, two-dimensional shapes, images, motion, and video. Coursework includes short programming assignments to practice the concepts introduced during lectures and projects to explore visual compositions. The course assumes no prior knowledge of programming.

This course is not open to students who have passed Computer Science 1 or Engineering Sciences 20 or who have received credit for one of these courses via the Advanced Placement exam or the local placement exam. Dist: TLA.

3. Computational Thinking

Not offered every year

This course enables a student from another discipline to approach that discipline from a computational perspective—formulating computational problems, identifying suitable representations and approaches for solving them, and developing and implementing efficient solutions. The course assumes no computational background, and it introduces the fundamental computational skills that are useful in many disciplines. A series of laboratory exercises employ discrete, numerical, and statistical approaches to solve problems from a variety of disciplines. Solutions are developed in a high-level, interactive programming language that helps students learn and use the fundamental representations and techniques.

Prerequisite: Mathematics 8. Open to students who have taken Computer Science 1. Dist: TLA.

4. Concepts in Computing

Not offered every year

This course provides an overview of computing and computer science, including such topics as the history of computers, computer applications, introductory concepts in digital electronics and computer architecture, computer languages, theory of computation, artificial intelligence, and the impact that computers have had on society and are likely to have in the future. Students will be introduced to computing through appropriate high-level software, such as World Wide Web, hypertext, and scripting languages. For example, in recent offerings students learned HTML and Javascript, and wrote significant HTML projects.

This course is intended for students who plan to take only one course in computer science, although students who take this course are welcome to take Computer Science 1 later. This course is not open to students who have passed Computer Science 1 or Engineering Sciences 20 or who have received credit for one of these courses via the Advanced Placement exam or the local placement exam. Dist: TAS.

7. First-Year Seminar in Computer Science

Consult special listings

8. Problem Solving with Computer Science

11F: 10

Motivated by applications in the arts, sciences, social sciences, and computer systems, this course develops skills in solving problems computationally. Topics covered include representation (how to capture computationally the objects and processes of a problem), abstraction (how to build high-level, multi-purpose toolkits for manipulating representations), recursion and modularity (how to break problems into subproblems and combine solutions), reasoning (how to understand what a computation is doing), and concurrency (how to deal with multiple simultaneous processes). These concepts are taught within a functional programming language that supports them well; they are applied in a series of programming labs solving application problems.

Prerequisite: Computer Science 1 or placement through the Advanced Placement exam or the local placement exam. Dist: TLA. Drysdale.

10. Problem Solving via Object-Oriented Programming

12W: 10 12S: 2 12F, 13W: 10 13S: 2

Motivated by problems that arise in a variety of disciplines, this course examines concepts and develops skills in solving computational problems. Topics covered include abstraction (how to hide details), modularity (how to decompose problems), data structures (how to efficiently organize data), and algorithms (procedures for solving problems). Laboratory assignments are implemented using object-oriented programming techniques.

Prerequisite: Computer Science 1, Engineering Sciences 20, or placement through the Advanced Placement exam or the local placement exam. Dist: TLA. Drysdale (winter), Jayanti (spring).

20. Motion Study: Using Motion Analysis for Science, Art and Medicine (Formerly Computer Science 12)

Not offered every year

Motion Capture is the process of recording movement in physical space and transforming that information into a digital form that can be analyzed and adapted. Recent technological advances have increased the use of motion capture in movies, cartoon animation, and scientific applications. In this class, students will learn the foundations of this new field from basic anatomical principles of motion to how motions express a variety of human qualities (e.g., status, emotion). Students will work with a motion capture system to record and analyze their own movement to gain a hands-on understanding of how motion capture can enhance art and science. Dist: TAS. Loeb.

22. 3D Digital Modeling

11F, 12F: 3A

This projects-based lab course teaches the principles and practices of 3D modeling. Lectures focus on principles of modeling, materials, shading, and lighting. Students create a fully rigged character model while learning their way around a state-of-the-art 3D animation program. Assignments are given weekly. Students are graded on the successful completion of the projects, along with a midterm examination. Work will be evaluated on a set of technical and aesthetic criteria. Dist: TLA. Loeb.

24. Computer Animation: The State of the Art (Formerly Computer Science 32)

12W, 12S, 13W: 2A

This hands-on course focuses on state-of-the-art computer animation, presenting techniques for traditional animation and how they apply to 3D computer animation, motion capture, and dynamic simulations. Facial and full-body animation are covered through projects, readings, and presentations, including physical simulation, procedural methods, image-based rendering, and machine-learning techniques. Students will create short animations. This course focuses on methods, ideas, and practical applications, rather than on mathematics. Dist: ART. Loeb (winter), Hannaway (spring).

27. Projects in Digital Arts (Formerly Computer Science 42)

12S, 13S: 10A

This is the culminating course for the Digital Arts Minor. Students from Arts and Sciences come together to complete projects in digital arts, including: 3D computer animations; innovative digital installations; creative mobile media; interactive pieces; 2D digital projects. Students work in small teams to complete work of a high production quality or work that incorporates innovations in technology. This course has a required laboratory period.

Prerequisite: Computer Science 24 and one of the following courses: Film Studies 31, 35, 38; Studio Art 16, 29; Theater 30; Computer Science 20, 89; or Psychology 21. Dist: ART. Hannaway.

28. Advanced Projects in Digital Arts (Formerly Computer Science 72)

All terms: Arrange

This independent study course is for students who have completed all the courses in the Digital Arts minor and want to continue working on projects in digital arts. Projects may include computer animations, interactive digital arts, installations, or research projects. Students work alone or in teams. This course may be taken at most twice.

Prerequisite: Computer Science 27 and permission of the instructor is required. Loeb.

30. Discrete Mathematics in Computer Science (Formerly Computer Science 19; Identical to Engineering Sciences 66)

11F, 12W, 12F, 13W: 11

This course integrates discrete mathematics with algorithms and data structures, using computer science applications to motivate the mathematics. It covers logic and proof techniques, induction, set theory, counting, asymptotics, discrete probability, graphs, and trees.

Mathematics 19 is identical to Computer Science 30 and may substitute for it in any requirement.

Prerequisite: Computer Science 1, Engineering Sciences 20, or placement through the Advanced Placement exam or the local placement exam. Dist: QDS. Jayanti (fall), Zomorodian (winter).

31. Algorithms (Formerly Computer Science 25)

11F, 12W, 12F: 10

A survey of fundamental algorithms and algorithmic techniques, including divide-and-conquer algorithms, lower bounds, dynamic programming, greedy algorithms, amortized analysis, and graph algorithms. Presentation, implementation and formal analysis, including space/time complexity and proofs of correctness, are all emphasized.

Prerequisite: Computer Science 10 and Computer Science 30. Students who have not taken Computer Science 30 but have a strong mathematical background may take Computer Science 31 with the instructor’s permission. Dist: QDS. Fleischer (fall), Jayanti (winter).

39. Theory of Computation

12W, 13W: 11

This course serves as an introduction to formal models of languages and computation. Topics covered include finite automata, regular languages, context-free languages, pushdown automata, Turing machines, computability, and NP-completeness.

Prerequisite: Computer Science 30 and/or 31. Students who have not taken Computer Science 30 and/or 31, but have a strong mathematical background, may take Computer Science 39 with the instructor’s permission. Dist: QDS. Chakrabarti.

49. Topics in Algorithms and Complexity (Formerly Computer Science 85)

11F: 10A 12W: 2A 12S: 10A

Each year a course in an advanced topic in theoretical computer science is offered. Topics covered in recent years include combinatorial optimization, computational geometry, cryptography, network flows, and distributed algorithms. Students may receive credit for Computer Science 49 more than once.

Prerequisite: Computer Science 31 or permission of instructor required. Recommended prerequisite will vary with term. Consult the instructor for the topic. Dist: QDS. Chakrabarti (fall), Fleischer (winter), Zomorodian (spring).

50. Software Design and Implementation (Formerly Computer Science 23)

12W, 12S, 13W, 13S: 12

Techniques for building large, reliable, maintainable, and understandable software systems. Topics include UNIX tools and filters, programming in C, software testing, debugging, and teamwork in software development. Concepts are reinforced through a small number of medium-scale programs and one team programming project.

Prerequisite: Computer Science 10. Dist: TLA. Palmer (winter), Campbell (spring).

51. Computer Architecture (Formerly Computer Science 37)

12S: 10 12X: 12 12S: 10

The architecture and organization of a simple computer system is studied. Topics covered include how information is represented in memory, machine-language instructions and how they can be implemented at the digital logic level and microcode level, assembly language programming, and input/output operations. Speedup techniques, such as pipelining and caching, are also covered.

Prerequisite: Computer Science 1, Engineering Sciences 20, or placement through the Advanced Placement exam or the local placement exam. Dist: TAS. Smith (spring), Staff (summer).

55. Security and Privacy (Formerly Computer Science 38)

11F: 9L

The migration of important social processes to distributed, electronic systems raises critical security and privacy issues. Precisely defining security and privacy is difficult; designing and deploying systems that provide these properties is even harder. This course examines what security and privacy mean in these settings, the techniques that might help, and how to use these techniques effectively. Our intention is to equip computer professionals with the breadth of knowledge necessary to navigate this emerging area.

Prerequisite: Computer Science 50 and 51, or instructor’s permission. Computer Science 30 is recommended. Dist: TAS. Palmer.

56. Digital Electronics (Formerly Computer Science 47; Identical to, and described under, Engineering Sciences 31)

12S: 12 12X: 9L 13S: 12; Laboratory

Prerequisite: Engineering Sciences 20 or Computer Science 1. Dist: TLA. Taylor (spring), Hansen (summer).

57. Compilers (Formerly Computer Science 48)

Not offered every year

Techniques for automatic translation of programming languages are discussed. The course includes a brief survey of various techniques and formalisms that can be used for describing the syntax and semantics of programming languages, for describing abstract and concrete machine architectures, and for describing program translation and transformation. This course includes a project to construct a compiler that will translate a program written in a high-level language into machine code for a conventional-architecture machine.

Prerequisite: Computer Science 50 and 51. Dist: TAS. Staff.

58. Operating Systems

11F, 12F: 11

This course studies how computer operating systems allocate resources and create virtual machines for the execution of user jobs. Topics covered include storage management, scheduling, concurrent processing, shared access to files, synchronization, and data protection. Both abstract models and actual examples of operating systems will be studied.

Prerequisite: Computer Science 50 and 51. Dist: TAS. Smith.

59. Principles of Programming Languages (Formerly Computer Science 68)

Not offered every year

This course provides a study of the principles of programming languages. The course will focus on the similarities and differences among imperative, functional, logical, and object-oriented programming languages. Topics include formal definitions of languages and tools for automatic program translation, control structures, parameter passing, scoping, types, and functions as first-class objects. For each language category, implementation issues will be discussed, and program development strategies illustrated through programming exercises.

Prerequisite: Computer Science 10. Computer Science 30 and 51 are recommended. Dist: TAS.

60. Computer Networks (Formerly Computer Science 78)

12S, 13S: 2

This course focuses on the communications protocols used in computer networks: their functionality, specification, verification, implementation, and performance; and how protocols work together to provide more complex services. Aspects of network architectures are also considered. Laboratory projects are an integral part of the course in which networking concepts are explored in depth.

Prerequisite: Computer Science 50 and 51. Computer Science 30 is recommended. Dist: TAS. Campbell.

61. Database Systems (Formerly Computer Science 33)

Not offered every year

This course studies the management of large bodies of data or information. This includes schemes for the representation, manipulation, and storage of complex information structures as well as algorithms for processing these structures efficiently and for retrieving the information they contain. This course will teach the student techniques for storage allocation and deallocation, retrieval (query formulation), and manipulation of large amounts of heterogeneous data. Students are expected to program and become involved in a project in which they study important aspects of a database system: ways to organize a distributed database shared by several computers; transactions that are processed locally and globally; robustness guarantees of the stored data against failure; security and data integrity guarantees from unauthorized access; privacy; object-oriented schemes for multimedia data; indexing, hashing, concurrency control, data mining, data warehousing, mobile databases and storage file structures.

Prerequisite: Computer Science 50 or equivalent, as approved by instructor. Dist: TAS.

63. Programming Parallel Systems (Identical to, and described under, Engineering Sciences 67)

11F: 2A Offered in Alternate Years

Prerequisite: Engineering Sciences 20 or Computer Science 30. Dist: TAS.

69. Topics in Computer Systems (Formerly Computer Science 88)

12W: 11, 2A

Each year a course in an advanced topic in Computer Systems is offered. Topics covered in recent years include robotics, wireless sensor networks, and activity-aware computing. Students may receive credit for Computer Science 69 more than once.

Prerequisite: Computer Science 50 or permission of instructor required. Computer Science 31 and/or Computer Science 51 may be required in certain terms. Recommended prerequisites will vary with term. Consult the instructor for the topic. Dist: TAS. Campbell, Smith.

70. Numerical and Computational Tools for Applied Science (Formerly Computer Science 36)

12W: 10A 13W: Arrange.

This course provides a practical and principled coverage of useful numerical and computational tools of use in many disciplines. The first half of this course provides the mathematical (linear algebra) and computing (Matlab) framework upon which data analysis tools are presented. These tools include data fitting, Fourier analysis, dimensionality reduction, estimation, clustering, and pattern recognition. This course is designed for undergraduate and graduate students across the Sciences and Social Sciences.

Prerequisite: Computer Science 1, Engineering Sciences 20 or equivalent; Mathematics 8 or equivalent; Mathematics 22 or Mathematics 24 or equivalent, as approved by the instructor. Dist: TAS. Johnson.

71. Numerical Methods in Computation (Formerly Computer Science 26; Identical to, and described under, Engineering Sciences 91; also Mathematics 26)

11F, 12F: 12

Prerequisite: Computer Science 1 or Engineering Sciences 20; Engineering Sciences 22 or Mathematics 23, or equivalent. Dist: QDS. Shepherd.

74. Machine Learning and Statistical Data Analysis (Formerly Computer Science 34)

12S, 13S: 10A

This course provides an introduction to statistical modeling and machine learning. Topics include learning theory, supervised and unsupervised machine learning, statistical inference and prediction, and data mining. Applications of these techniques to a wide variety of data sets will be described.

Prerequisites: Computer Science 1, Computer Science 3, or Engineering Sciences 20; Mathematics 22 or 24. Dist: QDS. Torresani.

75. Introduction to Bioinformatics (Formerly Computer Science 43)

12W, 13W: 2A

Bioinformatics is broadly defined as the study of molecular biological information, and this course introduces computational techniques for the analysis of biomolecular sequence, structure, and function. While the course is application-driven, it focuses on the underlying algorithms and information processing techniques, employing approaches from search, optimization, pattern recognition, and so forth. The course is hands-on: programming lab assignments provide the opportunity to implement and study key algorithms.

Prerequisite: Computer Science 10. Computer Science 30 is recommended. Dist. TLA. Grigoryan.

76. Artificial Intelligence (Formerly Computer Science 44; Identical to Cognitive Science 44)

12W, 13W: 2

An introduction to the field of Artificial Intelligence. Topics include games, robotics, motion planning, knowledge representation, logic and theorem proving, probabilistic reasoning over time, understanding of natural languages, and discussions of human intelligence.

Prerequisite: Computer Science 10. Computer Science 30 is recommended. Dist: TAS. Zomorodian.

77. Computer Graphics (Formerly Computer Science 52)

11F, 12F: 2A

This course is about how to mathematically model and computationally render (draw) two- and three-dimensional scenes and images. Two basic modes of rendering studied are (1) fast, interactive, real-time rendering, where realism is sacrificed for speed or (2) photo-realistic rendering, where the primary goal is a realistic image. Topics include two- and three-dimensional primitives, geometrical transformations (e.g., three-dimensional rotations, perspective and parallel projections), curves and surfaces, light, visual perception, visible surface determination, illumination and shading, and ray tracing. Assignments typically consist of a mixture of written work and “hands-on” projects. Knowledge of basic linear algebra is assumed.

Prerequisite: Computer Science 10. Dist: TAS. Denning.

79. Introduction to Computational Neuroscience (Formerly Computer Science 53; Identical to, and described under, Psychological and Brain Sciences 40)

11F, 12F: 2A

Dist: SCI. Granger.

81. Principles of Robot Design and Programming (Formerly Computer Science 54)

12W, 13W: 9L

This course is a hands-on introduction to robotics.  Students will build robots, program robots, and learn to mathematically model and analyze manipulation and locomotion tasks. Topics include kinematics and dynamics of rigid-body motion, motion planning, control, mechanics of friction and contact, grasping, sensing, uncertainty in robotics, and applications of robots.

Prerequisite: Computer Science 10. Dist: TLA. Balkcom.

83. Computer Vision (Formerly Computer Science 64)

Not offered every year

This course provides an introduction to computer vision, the art of teaching computers to see. Topics include image formation, feature detection, segmentation, 3D reconstruction from multiple views, motion estimation, and object recognition.

Prerequisite: Computer Science 1 or Engineering Sciences 20; Computer Science 70 or Mathematics 22. Dist: TAS.

84. Mathematical Optimization and Modeling (Formerly Computer Science 46)

Not offered every year

Planning, scheduling, and design problems in large organizations, economic or engineering systems can often be modeled mathematically using variables satisfying linear equations and inequalities. This course explores these models: the types of problems that can be handled, their formulation, solution, and interpretation. It introduces the theory underlying linear programming, a natural extension of linear algebra that captures these types of models, and also studies the process of modeling concrete problems, the algorithms to solve these models, and the solution and analysis of these problems using a modeling language. It also discusses the relation of linear programming to the more complex frameworks of nonlinear programming and integer programming. These paradigms broaden linear programming to respectively allow for nonlinear equations and inequalities, or for variables to be constrained to be integers.

Prerequisites: Computer Science 1 or 3 or Engineering Sciences 20; Mathematics 22 or 24; or permission of the instructor. Dist: TAS.

89. Topics in Applied Computer Science

11F: 2A 12S: 11, 2A

Dist: TAS. Loeb (fall), Balkcom, Grigoryan (spring).

94. Reading Course (Formerly Computer Science 80)

All terms: Arrange

Advanced undergraduates occasionally arrange with a faculty member a reading course in a subject not occurring in regular courses.

98. EPICS: Engineering Projects in Community Service

11F, 12W, 12S, 12F, 13W, 13S: 10A

Participation in a software engineering group project in the context of on-going partnerships with community service agencies. Group members are responsible for all aspects of a software system, including iterative requirements analysis, design, implementation, testing, and maintenance. The course also stresses customer interactions, documentation, process, and teamwork. The result is a software product of significant scope and significant benefit to the community.

Prerequisite: Computer Science 31, 50, and 51, or permission of instructor. Cormen.

99. Honors Thesis Research (Formerly Computer Science 97)

All terms: Arrange

Open only to students who are officially registered in the Honors Program. Permission of the Undergraduate Advisor and thesis advisor required. This course does not serve for distributive credit, and may be taken at most twice.

GRADUATE COURSES

Graduate students wishing to take a graduate course who have not passed the listed Dartmouth prerequisite courses with a grade at least as good as the median grade in the course must get written permission from the instructor in order to enroll in the graduate course. Any undergraduate enrolling in a graduate course must have the written permission of the instructor.

Some advanced undergraduate courses may be taken for graduate credit when supplemented by work not required of undergraduates. The web contains information about these courses.

149. Topics in Algorithms and Complexity (Formerly Computer Science 185)

11F: 10A Chakrabarti. 12W: 10A Zomorodian. 12W: 2A Fleischer.

169. Topics in Computer Systems (Formerly Computer Science 188)

12W: 11 Smith. 2A Campbell.

170. Numerical and Computational Tools for Applied Science (Formerly Computer Science 136; Described under Computer Science 70)

12W: 10A Johnson. 13W: Arrange.

174. Machine Learning and Statistical Data Analysis (Formerly Computer Science 134; Described under Computer Science 74)

12S, 13S: 10A Torresani.

175. Introduction to Bioinformatics (Formerly Computer Science 143; Described under Computer Science 75)

12W: 2A Grigoryan. 13W: 2A

179. Introduction to Computational Neuroscience (Formerly Computer Science 153; Identical to, and described under, Psychological and Brain Sciences 140).

11F, 12F: 2A Granger.

183. Computer Vision (Formerly Computer Science 164; Described under Computer Science 64)

Not offered every year.

184. Mathematical Optimization and Modeling (Formerly Computer Science 146; Described under Computer Science 84)

Not offered every year.

189. Topics in Applied Computer Science

11F: 2A Loeb. 12S: 11 Balkcom. 2A Grigoryan.

191. Writing, Presenting, and Evaluating Technical Papers in Computer Science (Formerly Computer Science 110)

Not offered every year

Students will learn how to write technical papers in computer science, how to present technical papers in a conference-talk setting, and how program committees and journal editors evaluate technical papers. Writing topics include the proper use of technical typesetting software, organization of technical papers, and English usage. Students will write technical papers, produce official course notes, and give oral presentations.

Prerequisite: Each student must submit a short expository piece to be evaluated by the instructor at the start of the course; only those students meeting a required level of competence will be permitted to take the course for a grade. Students should also have a Computer Science background sufficient to understand research papers.

Enrollment limited.

210. Computer Science Colloquium

219. Special Topics (Formerly Computer Science 181)

231. Advanced Algorithms (Formerly Computer Science 105)

12S, 13S: Arrange

This course provides an introduction to algorithms and algorithm design techniques at a level more advanced than a typical undergraduate course in algorithms, yet basic enough to be applicable widely across the many subfields of computer science. There is a strong emphasis on rigorously proving the correctness of and running time bounds on the algorithms studied. Typical techniques covered include, but are not limited to, randomization, amortized analysis, linear programming and approximation. Typical problems include, but are not limited to, splay trees, perfect hashing, skip lists, fast randomized algorithms for minimum cuts and minimum spanning trees, maximum matching, pattern matching, and some simple approximation algorithms: both combinatorial and based on linear programming relaxation.

Prerequisites: A grade of B+ or better in Computer Science 31, or passing an examination administered by the department to demonstrate competency in the material of Computer Science 31. Drysdale.

239. Computational Complexity (Formerly Computer Science 109)

12F: 2A 13F: Arrange

Building on the material covered in a standard undergraduate course, this course studies aspects of both computability and complexity. The study of computability includes reductions, Rice’s theorems, Post Correspondence Problem, valid computations, Kleene hierarchy, and the Recursion Theorem. The study of complexity covers some results on space complexity (Savitch’s Theorem, Immerman’s Theorem, PSPACE), Cook-Levin Theorem, and the hardness of approximation. Additional topics are covered if time permits.

Prerequisite: A grade of B+ or better in Computer Science 39, or passing an examination administered by the department to demonstrate competency in the material of Computer Science 39. Chakrabarti.

240. Numerical Linear Algebra (Formerly Computer Science 106; Identical to Engineering Sciences 106 and Mathematics 116)

Not offered every year

The course examines in the context of modern computational practice algorithms for solving linear systems Ax = b and Az = λx. Matrix decomposition algorithms, matrix inversion, and eigenvector expansions are studied. Algorithms for special matrix classes are featured, including symmetric positive definite matrices, banded matrices, and sparse matrices. Error analysis and complexity analysis of the algorithms are covered. The algorithms are implemented for selected examples chosen from elimination methods (linear systems), least squares (filters), linear programming, incidence matrixes (networks and graphics), diagonalization (convolution), sparse matrices (partial differential equations).

Prerequisite: Computer Science 71, Mathematics 26, or Engineering Sciences 91. Students are to be familiar with approximation theory, error analysis, direct and iterative techniques for solving linear systems, and discretization of continuous problems to the level normally encountered in an undergraduate course in numerical analysis.

251. Computer Architecture (Formerly Computer Science 107; Identical to, and described under, Engineering Sciences 116)

11F, 12F: 10

Prerequisite: Engineering Sciences 31 and Computer Science 51. Computer Science 57, 58, or equivalent is recommended. Berk.

258. Advanced Operating Systems (Formerly Computer Science 108)

12W: 12 13W: Arrange

This course covers advanced topics in operating systems, including issues such as the hardware/software interface, operating-system structure, CPU scheduling, concurrency, virtual memory, interprocess communication, file systems, protection, security, fault tolerance, and transaction processing. The course also considers many of these topics in the context of distributed systems.

Prerequisite: A grade of B+ or better in Computer Science 58, or passing an examination administered by the department to demonstrate competency in the material of Computer Science 58. Bratus.

259. Programming Languages (Formerly Computer Science 118)

Not offered every year

This course covers fundamental and advanced topics in the design, implementation and use of imperative, functional, logical and object-oriented programming languages. Topics covered include formal definitions of languages, tools for automatic program translation, parameter passing, scoping, type systems, control structures and automatic memory management. For each language category, implementation issues will be discussed, and program development strategies illustrated through programming exercises.

Prerequisite: Computer Science 59. An undergraduate course in compilers (Computer Science 57) is recommended.

276. Advanced Artificial Intelligence (Formerly Computer Science 104)

Not offered every year.

This course is a graduate-level survey of artificial intelligence. It covers the basic principles underlying artificial intelligence (search methods, knowledge representation and ‘expert systems,’ planning, learning, etc.) and examples of particular artificial intelligence applications areas (natural language understanding, vision, robotics).

Prerequisite: Computer Science 76.

294. Reading Course (Formerly Computer Science 180)

295. Practical Training

Student participates in off-campus Curricular Practical Training, which is an integral part of the established curriculum. This course does not count toward the number of courses required for any degree. Permission of the departmental advisor to Master’s students required.

296. Supervised Undergraduate Teaching (Formerly Computer Science 257)

May be taken multiple times for credit. One course equivalent.

297. Graduate Research

Student participates in research under the supervision of a faculty member. May be taken multiple times for credit. One course equivalent. Permission required.

298. Thesis Research

Student participates in research under the supervision of a faculty member. May be taken multiple times for credit. Two course equivalents. Permission required.

299. Full-Time Thesis Research

Student participates in research under the supervision of a faculty member. May be taken multiple times for credit. Three course equivalents. Permission required.