CS Curricula

←All schools

Yale UniversityWebsiteAcademic Catalog

Computer ScienceDepartment Website

Majors

Courses

source 1

CPSC 100: Introduction to Computing and Programming (1) intro

Introduction to the intellectual enterprises of computer science and to the art of programming. Students learn how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web development. Languages include C, Python, SQL, and JavaScript, plus CSS and HTML. Problem sets inspired by real-world domains of biology, cryptography, finance, forensics, and gaming. No previous programming experience required. Open to students of all levels and majors.

CPSC 110: Python Programming for Humanities and Social Sciences (1) intro

Introduction to computer science and Python programming with domain-specific applications. Students learn how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, web development, and statistical tools. Students learn to apply computing techniques in the fields of social sciences & humanities by analyzing data. No previous programming experience is required. This course is intended for students of social sciences & humanities majors.

CPSC 112: Introduction to Programming (1) intro

Development on the computer of programming skills, problem-solving methods, and selected applications. No previous experience with computers necessary.

CPSC 201: Introduction to Computer Science (1) intro

Introduction to the concepts, techniques, and applications of computer science. Topics include computer systems (the design of computers and their languages); theoretical foundations of computing (computability, complexity, algorithm design); and artificial intelligence (the organization of knowledge and its representation for efficient search). Examples stress the importance of different problem-solving methods. After CPSC 112 or equivalent.

CPSC 202: Mathematical Tools for Computer Science (1) math

Introduction to formal methods for reasoning and to mathematical techniques basic to computer science. Topics include propositional logic, discrete mathematics, and linear algebra. Emphasis on applications to computer science: recurrences, sorting, graph traversal, Gaussian elimination.

CPSC 223: Data Structures and Programming Techniques (1) intro

Topics include programming in C; data structures (arrays, stacks, queues, lists, trees, heaps, graphs); sorting and searching; storage allocation and management; data abstraction; programming style; testing and debugging; writing efficient programs. After CPSC 200, 201 or passing an exam based on CPSC 201 content.

CPSC 310: Technology, Power, and Security: Political Challenges of the Computer Age (1) impact

Twenty-first century societies are faced with both threats and opportunities that combine sophisticated computation with politics and international relations in critical ways. Examples include cyber warfare; cyber espionage; cyber crime; the role of social media in democratic self-governance, authoritarian control, and election 'hacking'; cryptocurrencies; and mass surveillance. This course examines the political challenges wrought by massive increases in the power of computational and communication technologies and the potential for citizens and governments to harness those technologies to solve problems.

CPSC 323: Introduction to Systems Programming and Computer Organization (1) sys

Machine architecture and computer organization, systems programming in a high-level language, issues in operating systems, software engineering, prototyping in scripting languages. After CPSC 223.

CPSC 327: Object-Oriented Programming (1) intro

Object-oriented programming as a means to designing and writing efficient, reliable, modular, and reusable code. Covers core concepts and features of object-oriented languages (classes, inheritance, composition, encapsulation, polymorphism, and exceptions) as well as the use of object-oriented design patterns (iterator, decorator, strategy, adapter, observer, etc.).

CPSC 334: Creative Embedded Systems (1) sys

Ubiquitous computing is creating new canvases and opportunities for creative ideas. This class explores the use of microprocessors, distributed sensor networks, IoT, and intermedia systems for the purposes of creative expression.

CPSC 338: Digital Systems (1) sys

Development of engineering skills through the design and analysis of digital logic components and circuits. Introduction to gate-level circuit design, beginning with single gates and building up to complex systems.

CPSC 362: Decisions and Computations across Networks (1) sys

For a long time there has been interest in distributed computation and decision making problems of all types. Among these are consensus and flocking problems, the multi-agent rendezvous problem, distributed averaging, gossiping, localization of sensors in a multi-sensor network, distributed algorithms for solving linear equations, distributed management of multi-agent formations, opinion dynamics, and distributed state estimation.

CPSC 364: Introduction to Blockchains, Cryptocurrencies, Smart Contracts, and Decentralized Applications (1) sys

This course offers an introduction to blockchain technology and its practical applications. The objective is to provide students with a comprehensive overview of the fundamental concepts and hands-on experience in building on actual blockchains.

CPSC 365: Algorithms (1) algs

Paradigms for algorithmic problem solving: greedy algorithms, divide and conquer, dynamic programming, and network flow. NP completeness and approximation algorithms for NP-complete problems.

CPSC 370: Artificial Intelligence (1) ai

How can we enable computers to make rational, intelligent decisions? This course explores fundamental techniques for Artificial Intelligence (AI), covering topics such as search, planning, learning, and reasoning under uncertainty.

CPSC 381: Introduction to Machine Learning (1) ai

This course focuses on fundamental topics in machine learning. We begin with an overview of different components of machine learning and types of learning paradigms.

CPSC 413: Computer System Security (1) sys

Overview of the principles and practice behind analyzing, designing, and implementing secure computer systems. Covers problems that have continued to plague computer systems for years as well as recent events and research in this rapidly evolving field of computer science.

CPSC 416: Lattices and Post-Quantum Cryptography (1) math

This course explores the role of lattices in modern cryptography. In the last decades, novel computational problems, whose hardness is related to lattices, have been instrumental in cryptography by offering: (a) a basis for 'post-quantum' cryptography, (b) cryptographic constructions based on worst-case hard problems, (c) numerous celebrated cryptographic protocols unattainable from other cryptographic assumptions.

CPSC 417: Advanced Topics in Cryptography: Cryptography and Computation (1) math

Traditional cryptography is mostly concerned with studying the foundations of securing communication via, for example, encryption and message authentication codes. This class studies the applications of cryptography in securing computation.

CPSC 420: Computer Architecture (1) sys

This course offers a treatment of computer architectures for high-performance and power/energy-efficient computer systems. Topics include the foundations of general-purpose computing, including instruction set architectures, pipelines, superscalar and out-of-order execution, speculation, support for precise exceptions, and simultaneous multi-threading.

CPSC 421: Compilers and Interpreters (1) pls

Compiler organization and implementation: lexical analysis, formal syntax specification, parsing techniques, execution environment, storage management, code generation and optimization, procedure linkage and address binding.

CPSC 426: Building Distributed Systems (1) sys

Ubiquitous services such as Google, Facebook, and Amazon run on the back of massive distributed systems. This course covers the fundamental principles, abstractions, and mechanisms that inform the design of such systems, as well as the practical details of real-world implementations.

CPSC 427: C++ Programming for Stability, Security, and Speed (1) sys

Computer programming involves both abstraction and practice. Lower-level programming courses focus on learning how to correctly implement algorithms for carrying out a task.

CPSC 429: Principles of Computer System Design (1) sys

Humans are stupid; computers are limited. Yet a collaboration of humans and computers has led to ever more powerful and complex computer systems.

CPSC 431: Computer Music: Algorithmic and Heuristic Composition (1)

Study of the theoretical and practical fundamentals of computer-generated music, with a focus on high-level representations of music, algorithmic and heuristic composition, and programming languages for computer music generation.

CPSC 437: Database Systems (1) sys

Introduction to database systems. Data modeling. The relational model and the SQL query language. Relational database design, integrity constraints, functional dependencies, and normal forms.

CPSC 439: Software Engineering (1) softeng

Introduction to fundamental concepts in software engineering and to the development and maintenance of large, robust software systems.

CPSC 446: Data and Information Visualization (1) graphics

Visualization is a powerful tool for understanding data and concepts. This course provides an introduction to the concepts needed to build new visualization systems, rather than to use existing visualization software.

CPSC 447: Introduction to Quantum Computing (1)

This course introduces the fundamental concepts in the theory and practice of quantum computation.

CPSC 448: Silicon Compilation (1) pls

An upper-level course on compiling computations into digital circuits using asynchronous design techniques.

CPSC 450: Sustainable Computing (1) impact

This course covers topics at the intersection of technology and sustainability.

CPSC 454: Software Analysis and Verification (1) softeng

Introduction to concepts, tools, and techniques used in the formal verification of software.

CPSC 455: Economics and Computation (1) theory

A mathematically rigorous investigation of the interplay of economic theory and computer science, with an emphasis on the relationship of incentive-compatibility and algorithmic efficiency.

CPSC 468: Computational Complexity (1) theory

Introduction to the theory of computational complexity.

CPSC 474: Computational Intelligence for Games (1) ai

Introduction to techniques used for creating computer players for games, particularly board games.

CPSC 475: Computational Vision and Biological Perception (1) ai

An overview of computational vision with a biological emphasis.

CPSC 478: Computer Graphics (1) graphics

Introduction to the basic concepts of two- and three-dimensional computer graphics.

CPSC 483: Deep Learning on Graph-Structured Data (1) ai

Graph structure emerges in many important domain applications, including but not limited to computer vision, natural sciences, social networks, languages and knowledge graphs.

CPSC 490: Senior Project (1) capstone

Individual research intended to fulfill the senior requirement. Requires a faculty supervisor and the permission of the director of undergraduate studies. The student must submit a written report about the results of the project.

MATH 120: Calculus of Functions of Several Variables (1) math

Analytic geometry in three dimensions, using vectors. Real-valued functions of two and three variables, partial derivatives, gradient and directional derivatives, level curves and surfaces, maxima and minima. Parametrized curves in space, motion in space, line integrals; applications. Multiple integrals, with applications. Divergence and curl. The theorems of Green, Stokes, and Gauss.

MATH 225: Linear Algebra (1) math

An introduction to the theory of vector spaces, matrix theory and linear transformations, determinants, eigenvalues, inner product spaces, spectral theorem. The course focuses on conceptual understanding and serves as an introduction to writing mathematical proofs. For an approach focused on applications rather than proofs, consider MATH 222. Students with a strong mathematical background or interest are encouraged to consider MATH 226.

MATH 226: Linear Algebra (Intensive) (1) math

A fast-paced introduction to the theory of vector spaces, matrix theory and linear transformations, determinants, eigenvalues, inner product spaces, spectral theorem. Topics are covered at a deeper level than in MATH 225, and additional topics may be covered, for example canonical forms or the classical groups. The course focuses on conceptual understanding. Familiarity with writing mathematical proofs is recommended. For a less intensive course, consider MATH 225. For an approach focused on applications, consider MATH 222.

MATH 244: Discrete Mathematics (1) math

Basic concepts and results in discrete mathematics: graphs, trees, connectivity, Ramsey theorem, enumeration, binomial coefficients, Stirling numbers. Properties of finite set systems.

MATH 475: Senior Essay (1) math

Interested students may write a senior essay under the guidance of a faculty member, and give an oral report to the department. Students wishing to write a senior essay should consult the director of undergraduate studies at least one semester in advance of the semester in which they plan to write the essay.