Carnegie Mellon UniversityWebsiteAcademic Catalog
Computer ScienceDepartment Website
BS Degree in Computer Sciencesource 1source 2
CS Courses
- Fundamentals of Programming and Computer Science15-112 (12)intro15-112: Fundamentals of Programming and Computer Science
A technical introduction to the fundamentals of programming with an emphasis on producing clear, robust, and reasonably efficient code using top-down design, informal analysis, and effective testing and debugging. Starting from first principles, we will cover a large subset of the Python programming language, including its standard libraries and programming paradigms. We will also target numerous deployment scenarios, including standalone programs, shell scripts, and web-based applications. This course assumes no prior programming experience. Even so, it is a fast-paced and rigorous preparation for 15-122. Students seeking a more gentle introduction to computer science should consider first taking 15-110. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course.
- Principles of Imperative Computation15-122 (12)intro15-122: Principles of Imperative Computation
For students with a basic understanding of programming (variables, expressions, loops, arrays, functions). Teaches imperative programming and methods for ensuring the correctness of programs. Students will learn the process and concepts needed to go from high-level descriptions of algorithms to correct imperative implementations, with specific application to basic data structures and algorithms. Much of the course will be conducted in a subset of C amenable to verification, with a transition to full C near the end. This course prepares students for 15-213 and 15-210. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course.
- Principles of Functional Programming15-150 (12)intro15-150: Principles of Functional Programming
An introduction to programming based on a 'functional' model of computation. The functional model is a natural generalization of algebra in which programs are formulas that describe the output of a computation in terms of its inputs and #8212;-that is, as a function. But instead of being confined to real- or complex-valued functions, the functional model extends the algebraic view to a very rich class of data types, including not only aggregates built up from other types, but also functions themselves as values. This course is an introduction to programming that is focused on the central concepts of function and type. One major theme is the interplay between inductive types, which are built up incrementally; recursive functions, which compute over inductive types by decomposition; and proof by structural induction, which is used to prove the correctness and time complexity of a recursive function. Another major theme is the role of types in structuring large programs into separate modules, and the integration of imperative programming through the introduction of data types whose values may be altered during computation. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course.
- Parallel and Sequential Data Structures and Algorithms15-210 (12)intro15-210: Parallel and Sequential Data Structures and Algorithms
Teaches students about how to design, analyze, and program algorithms and data structures. The course emphasizes parallel algorithms and analysis, and how sequential algorithms can be considered a special case. The course goes into more theoretical content on algorithm analysis than 15-122 and 15-150 while still including a significant programming component and covering a variety of practical applications such as problems in data analysis, graphics, text processing, and the computational sciences. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course. Register for Lecture 1. All students will be waitlisted for Lecture 2 until Lecture 1 is full.
- Introduction to Computer Systems15-213 (12)intro15-213: Introduction to Computer Systems
This course provides a programmer's view of how computer systems execute programs, store information, and communicate. It enables students to become more effective programmers, especially in dealing with issues of performance, portability and robustness. It also serves as a foundation for courses on compilers, networks, operating systems, and computer architecture, where a deeper understanding of systems-level issues is required. Topics covered include: machine-level code and its generation by optimizing compilers, performance evaluation and optimization, computer arithmetic, memory organization and management, networking technology and protocols, and supporting concurrent computation. NOTE FOR GRADUATE STUDENTS: This course is not open to graduate students beginning Spring 2015. Graduate students must register for 15-513 instead.
- Great Ideas in Theoretical Computer Science15-251 (12)theory15-251: Great Ideas in Theoretical Computer Science
This course is about how to use theoretical ideas to formulate and solve problems in computer science. It integrates mathematical material with general problem solving techniques and computer science applications. Examples are drawn from algorithms, complexity theory, game theory, probability theory, graph theory, automata theory, algebra, cryptography, and combinatorics. Assignments involve both mathematical proofs and programming. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course.
- Algorithm Design and Analysis15-451 (12)algs15-451: Algorithm Design and Analysis
This course is about the design and analysis of algorithms. We study specific algorithms for a variety of problems, as well as general design and analysis techniques. Specific topics include searching, sorting, algorithms for graph problems, efficient data structures, lower bounds and NP-completeness. A variety of other topics may be covered at the discretion of the instructor. These include parallel algorithms, randomized algorithms, geometric algorithms, low level techniques for efficient programming, cryptography, and cryptographic protocols.
- AI ElectiveArtificial Intelligence: Representation and Problem Solvingor15-281 (12)ai15-281: Artificial Intelligence: Representation and Problem Solving
This course is about the theory and practice of Artificial Intelligence. We will study modern techniques for computers to represent task-relevant information and make intelligent (i.e. satisficing or optimal) decisions towards the achievement of goals. The search and problem solving methods are applicable throughout a large range of industrial, civil, medical, financial, robotic, and information systems. We will investigate questions about AI systems such as: how to represent knowledge, how to effectively generate appropriate sequences of actions and how to search among alternatives to find optimal or near-optimal solutions. We will also explore how to deal with uncertainty in the world, how to learn from experience, and how to learn decision rules from data. We expect that by the end of the course students will have a thorough understanding of the algorithmic foundations of AI, how probability and AI are closely interrelated, and how automated agents learn. We also expect students to acquire a strong appreciation of the big-picture aspects of developing fully autonomous intelligent agents. Other lectures will introduce additional aspects of AI, including natural language processing, web-based search engines, industrial applications, autonomous robotics, and economic/game-theoretic decision making.
Introduction to Machine Learningor10-315 (12)ai10-315: Introduction to Machine LearningMachine learning is subfield of computer science with the goal of exploring, studying, and developing learning systems, methods, and algorithms that can improve their performance with learning from data. This course is designed to give undergraduate students a one-semester-long introduction to the main principles, algorithms, and applications of machine learning and is specifically designed for the SCS undergrad majors. The topics of this course will be in part parallel with those covered in the graduate machine learning courses (10-715, 10-701, 10-601), but with a greater emphasis on applications and case studies in machine learning. After completing the course, students will be able to: *select and apply an appropriate supervised learning algorithm for classification problems (e.g., naive Bayes, perceptron, support vector machine, logistic regression). *select and apply an appropriate supervised learning algorithm for regression problems (e.g., linear regression, ridge regression). *recognize different types of unsupervised learning problems, and select and apply appropriate algorithms (e.g., clustering, linear and nonlinear dimensionality reduction). *work with probabilities (Bayes rule, conditioning, expectations, independence), linear algebra (vector and matrix operations, eigenvectors, SVD), and calculus (gradients, Jacobians) to derive machine learning methods such as linear regression, naive Bayes, and principal components analysis. *understand machine learning principles such as model selection, overfitting, and underfitting, and techniques such as cross-validation and regularization. *implement machine learning algorithms such as logistic regression via stochastic gradient descent, linear regression (using a linear algebra toolbox), perceptron, or k-means clustering. *run appropriate supervised and unsupervised learning algorithms on real and synthetic data sets and interpret the results.
Robot Kinematics and Dynamicsor16-384 (12)ai16-384: Robot Kinematics and DynamicsFoundations and principles of robotic kinematics. Topics include transformations, forward kinematics, inverse kinematics, differential kinematics (Jacobians), manipulability, and basic equations of motion. Course also include programming on robot arms.
Computer Visionor16-385 (12)ai16-385: Computer VisionThis course provides a comprehensive introduction to computer vision. Major topics include image processing, detection and recognition, geometry-based and physics-based vision, sensing and perception, and video analysis. Students will learn basic concepts of computer vision as well as hands on experience to solve real-life vision problems. This course is for undergraduate students only.
Neural Computationor15-386 (9)ai15-386: Neural ComputationComputational neuroscience is an interdisciplinary science that seeks to understand how the brain computes to achieve natural intelligence. It seeks to understand the computational principles and mechanisms of intelligent behaviors and mental abilities and #8212; such as perception, language, motor control, and learning and #8212; by building artificial systems and computational models with the same capabilities. This course explores how neurons encode and process information, adapt and learn, communicate, cooperate, compete and compute at the individual level as well as at the levels of networks and systems. It will introduce basic concepts in computational modeling, information theory, signal processing, system analysis, statistical and probabilistic inference. Concrete examples will be drawn from the visual system and the motor systems, and studied from computational, psychological and biological perspectives. Students will learn to perform computational experiments using Matlab and quantitative studies of neurons and neuronal networks.
Natural Language Processingor11-411 (12)ai11-411: Natural Language ProcessingThis course is about a variety of ways to represent human languages (like English and Chinese) as computational systems, and how to exploit those representations to write programs that do neat stuff with text and speech data, like translation, summarization, extracting information, question answering, natural interfaces to databases, and conversational agents. This field is called Natural Language Processing or Computational Linguistics, and it is extremely multidisciplinary. This course will therefore include some ideas central to Machine Learning and to Linguistics. We'll cover computational treatments of words, sounds, sentences, meanings, and conversations. We'll see how probabilities and real-world text data can help. We'll see how different levels interact in state-of-the-art approaches to applications like translation and information extraction. From a software engineering perspective, there will be an emphasis on rapid prototyping, a useful skill in many other areas of Computer Science.
Introduction to Deep Learning11-485 (9)ai11-485: Introduction to Deep LearningNeural networks have increasingly taken over various AI tasks, and currently produce the state of the art in many AI tasks ranging from computer vision and planning for self-driving cars to playing computer games. Basic knowledge of NNs, known currently in the popular literature as 'deep learning', familiarity with various formalisms, and knowledge of tools, is now an essential requirement for any researcher or developer in most AI and NLP fields. This course is a broad introduction to the field of neural networks and their 'deep' learning formalisms. The course traces some of the development of neural network theory and design through time, leading quickly to a discussion of various network formalisms, including simple feedforward, convolutional, recurrent, and probabilistic formalisms, the rationale behind their development, and challenges behind learning such networks and various proposed solutions. We subsequently cover various extensions and models that enable their application to various tasks such as computer vision, speech recognition, machine translation and playing games. Instruction Unlike prior editions of 11-785, the instruction will primarily be through instructor lectures, and the occasional guest lecture. Evaluation Students will be evaluated based on weekly continuous-evaluation tests, and their performance in assignments and a final course project. There will be six hands-on assignments, requiring both low-level coding and toolkit-based implementation of neural networks, covering basic MLP, convolutional and recurrent formalisms, as well as one or more advanced tasks, in addition to the final project.
- Technical Communication ElectiveEthics and Policy Issues in Computingor17-200 (9)impact17-200: Ethics and Policy Issues in Computing
Should autonomous robots make life and death decisions on their own? Should we allow them to select a target and launch weapons? To diagnose injuries and perform surgery when human doctors are not around? Who should be permitted to observe you, find out who your friends are, what you do and say with them, what you buy, and where you go? Do social media and personalized search restrict our intellectual horizons? Do we live in polarizing information bubbles, just hearing echoes of what we already know and believe? As computing technology becomes ever more pervasive and sophisticated, we are presented with an escalating barrage of decisions about who, how, when, and for what purposes technology should be used. This course will provide an intellectual framework for discussing these pressing issues of our time, as we shape the technologies that in turn shape us. We will seek insight through reading, discussion, guest lectures, and debates. Students will also undertake an analysis of a relevant issue of their choice, developing their own position, and acquiring the research skills needed to lend depth to their thinking. The course will enhance students' ability to think clearly about contentious technology choices, formulate smart positions, and support their views with winning arguments.
Research and Innovation in Computer Scienceor07-300 (9)impact07-300: Research and Innovation in Computer ScienceThis Fall course is the first part of a two-course sequence that is designed to help prepare students to invent the future state-of-the-art in the field of computer science. Course topics will include the following: an overview of important things to know about how research and innovation works in the field of computer science; a survey of the current cutting- edge of computer science research, both here at Carnegie Mellon and elsewhere; critical thinking skills when reading research publications that disagree with each other; strategies for coping with open-ended problems; and technical communication skills for computer scientists. Students will also match up with a faculty mentor for a potential Technology Innovation Project (to be performed in the Spring), put together a detailed plan of attack for that project, and start to get up to speed (including background reading, etc.). This course can be used to satisfy the Technical Communications requirement for the CS major.
Writing for the Professions76-270 (9)communication76-270: Writing for the ProfessionsWriting in the Professions is a writing course specifically designed for mainly sophomores and juniors (although it is relevant for some freshmen and seniors) in all majors other than English. The course is appropriate for upper-level students in all CMU colleges and assumes that you may not have had much college-level writing instruction past your first year. The basic idea of the course is to give you experience in developing the writing skills you will be expected to have as you make the transition from student to professional. The course will cover some foundational principles of designing multimodal writing and communication within a variety of tasks including resume and cover letter writing, proposal writing and writing instructions. Students will discern the difference between writing for general and specific audiences, and analysis of visual aids in various texts. The course requires that students work both independently and in groups.
- Logic/Languages ElectiveFoundations of Programming Languagesor15-312 (12)pls15-312: Foundations of Programming Languages
This course discusses in depth many of the concepts underlying the design, definition, implementation, and use of modern programming languages. Formal approaches to defining the syntax and semantics are used to describe the fundamental concepts underlying programming languages. A variety of programming paradigms are covered such as imperative, functional, logic, and concurrent programming. In addition to the formal studies, experience with programming in the languages is used to illustrate how different design goals can lead to radically different languages and models of computation.
Programming Language Semanticsoror15-314 (12)pls15-314: Programming Language SemanticsThis lecture course introduces the foundational concepts and techniques of programming language semantics. The aim is to demonstrate the utility of a scientific approach, based on mathematics and logic, with applications to program analysis, language design, and compiler correctness. We focus on the most widely applicable frameworks for semantic description: denotational, operational, and axiomatic semantics. We use semantics to analyze program behavior, guide the development of correct programs, prove correctness of a compiler, validate logics for program correctness, and derive general laws of program equivalence. We will discuss imperative and functional languages, sequential and parallel, as time permits.
Constructive Logicor15-317 (9)math15-317: Constructive LogicThis multidisciplinary junior-level course is designed to provide a thorough introduction to modern constructive logic, its roots in philosophy, its numerous applications in computer science, and its mathematical properties. Some of the topics to be covered are intuitionistic logic, inductive definitions, functional programming, type theory, realizability, connections between classical and constructive logic, decidable classes.
Program Analysisor17-355 (12)pls17-355: Program AnalysisThis course covers both foundations and practical aspects of the automated analysis of programs, which is becoming increasingly critical to find software errors and assure program correctness. The theory of abstract interpretation captures the essence of a broad range of program analyses and supports reasoning about their correctness. Building on this foundation, the course will describe program representations, data flow analysis, alias analysis, interprocedural analysis, dynamic analysis, Hoare Logic and verification, program synthesis and repair, model checking, and symbolic execution. Through assignments and projects, students will design and implement practical analysis tools that find bugs and verify properties of software. This course satisfies the Logic and Languages constrained elective category of the Computer Science major, the Theoretical Foundations requirement of the Computer Science master's degree, and the Technical Software Engineering requirement for the Software Engineering minor.
Programming Language Pragmaticsororor17-363 (12)pls17-363: Programming Language PragmaticsThis course provides a broad and pragmatic foundation in the most basic tool of the programmer: programming languages. It starts with the fundamentals of syntax, parsing, and binding, the core structural concepts in programming languages. The course will then cover program semantics and type systems, and students will learn to relate them with a type soundness theorem. Finally, a coverage of intermediate optimization and code generation offers the opportunity to discuss both producing efficient code and reasoning about the correctness of program transformations. Assignments involve a combination of tool-assisted formal reasoning and proofs about programming languages, and implementing these language constructs in a compiler. This course fulfills the Logic and Languages constrained elective of the B.S. in Computer Science. Students with substantial math and programming experience who have not satisfied the specific prerequisites can contact the instructor for permission to enroll.
Category Theory80-413 (9)math80-413: Category TheoryCategory theory is a formal framework devoted to studying the structural relationships between mathematical objects. Developed in the mid-20th century to attack geometrical problems, subsequent progress has revealed deep connections to algebra and logic, as well as to mathematical physics and computer science. The course emphasizes two perspectives. On one hand, we develop the basic theory of categories, regarded as mathematical structures in their own right. At the same time, we will consider the application of these results to concrete examples from logic and algebra. Some familiarity with abstract algebra or logic required.
- Domains ElectiveFoundations of Software Engineeringoror17-313 (12)softeng17-313: Foundations of Software Engineering
Students gain exposure to the fundamental principles of software engineering. This includes both core CS technical knowledge and the means by which this knowledge can be applied in the practical engineering of complex software in real-world settings. Topics related to software artifacts include coding, software architecture, measurement, and quality assurance of various qualities (e.g., robustness, security, performance, maintainability) with static and dynamic analysis, testing, code review, and inspection. Topics related to software process include requirements engineering, process models and evaluation, personal and team development, and supply chain issues including outsourcing and open source. This course has a strong technical focus, a strong focus on developing team skills, and will include both written and programming assignments. Students will get experience with the latest software engineering tools and practices.
Human Language for Artificial Intelligenceor11-324 (12)ai11-324: Human Language for Artificial IntelligenceAn enduring aspect of the quest to build intelligent machines is the challenge of human language. This course introduces students with a background in computer science and a research interest in artificial intelligence fields to the structure of natural language, from sound to society. It covers phonetics (the physical aspects of speech), phonology (the sound-structure of language), morphology (the structure of words), morphosyntax (the use of word and phrase structure to encode meaning), syntactic formalisms (using finite sets of production rules to characterize infinite configurations of structure), discourse analysis and pragmatics (language in discourse and communicative context), and sociolinguistics (language in social context and social meaning). Evaluation is based on seven homework assignments, a midterm examination, and a final examination.
Introduction to Computer Securityor15-330 (12)sys15-330: Introduction to Computer SecuritySecurity is becoming one of the core requirements in the design of critical systems. This course will introduce students to the intro-level fundamental knowledge of computer security and applied cryptography. Students will learn the basic concepts in computer security including software vulnerability analysis and defense, networking and wireless security, and applied cryptography. Students will also learn the fundamental methodology for how to design and analyze security critical systems.
Designing Human Centered Softwareor05-391 (12)humans05-391: Designing Human Centered SoftwareWhy are things so hard to use these days? Why doesn't this thing I just bought work? Why is this web site so hard to use? These are frustrations that we have all faced from systems not designed with people in mind. The question this course will focus on is: how can we design human-centered systems that people find useful and usable? This course is a broad introduction to designing, prototyping, and evaluating user interfaces. If you take only one course in Human-Computer Interaction, this is the course for you. We will cover theory as well as practical application of ideas from Human-Computer Interaction. Coursework includes lectures, class discussion, homework, class presentations, and group projects. This class is open to all undergrads and grad students, with either technical or non-technical majors. However, there is a programming prerequisite.
Undergraduate Complexity Theoryor15-455 (9)theory15-455: Undergraduate Complexity TheoryComplexity theory is the study of how much of a resource (such as time, space, parallelism, or randomness) is required to perform some of the computations that interest us the most. In a standard algorithms course, one concentrates on giving resource efficient methods to solve interesting problems. In this course, we concentrate on techniques that prove or suggest that there are no efficient methods to solve many important problems. We will develop the theory of various complexity classes, such as P, NP, co-NP, PH, #P, PSPACE, NC, AC, L, NL, UP, RP, BPP, IP, and PCP. We will study techniques to classify problems according to our available taxonomy. By developing a subtle pattern of reductions between classes we will suggest an (as yet unproven!) picture of how by using limited amounts of various resources, we limit our computational power.
Computer Graphicsor15-462 (12)graphics15-462: Computer GraphicsThis course provides a comprehensive introduction to computer graphics modeling, animation, and rendering. Topics covered include basic image processing, geometric transformations, geometric modeling of curves and surfaces, animation, 3-D viewing, visibility algorithms, shading, and ray tracing.
Great Ideas in Computational Biology02-251 (12)sci02-251: Great Ideas in Computational BiologyThis 12-unit course provides an introduction to many of the great ideas that have formed the foundation for the recent transformation of life sciences into a fully-fledged computational discipline. Extracting biological understanding from both large and small data sets now requires the use and design of novel algorithms, developed in the field of computational biology. This gateway course is intended as a first exposure to computational biology for first-year undergraduates in the School of Computer Science, although it is open to other computationally minded 6students who are interested in exploring the field. Students will learn fundamental algorithmic and machine learning techniques that are used in modern biological investigations, including algorithms to process string, graph, and image data. They will use these techniques to answer questions such as "How do we reconstruct the sequence of a genome?", "How do we infer evolutionary relationships among many species?", and "How can we predict each gene's biological role?" on biological data. Previous exposure to molecular biology is not required, as the instructors will provide introductory materials as needed. After completion of the course, students will be well equipped to tackle advanced computational challenges in biology.
- Software Systems ElectiveOperating System Design and Implementationor15-410 (15)sys15-410: Operating System Design and Implementation
Operating System Design and Implementation is a rigorous hands-on introduction to the principles and practice of operating systems. The core experience is writing a small Unix-inspired OS kernel, in C with some x86 assembly language, which runs on a PC hardware simulator (and on actual PC hardware if you wish). Work is done in two-person teams, and 'team programming' skills (source control, modularity, documentation) are emphasized. The size and scope of the programming assignments typically result in students significantly developing their design, implementation, and debugging abilities. Core concepts include the process model, virtual memory, threads, synchronization, and deadlock; the course also surveys higher-level OS topics including file systems, interprocess communication, networking, and security. Students, especially graduate students, who have not satisfied the prerequisite at Carnegie Mellon are strongly cautioned - to enter the class you must be able to write a storage allocator in C, use a debugger, understand 2's-complement arithmetic, and translate between C and x86 assembly language. The instructor may require you to complete a skills assessment exercise before the first week of the semester in order to remain registered in the class. Auditing: this course is usually full, and we generally receive many more requests to audit than we can accept. If you wish to audit, please have your advisor contact us before the semester begins to discuss your educational goals.
Compiler Designor15-411 (15)pls15-411: Compiler DesignThis course covers the design and implementation of compiler and run-time systems for high-level languages, and examines the interaction between language design, compiler design, and run-time organization. Topics covered include syntactic and lexical analysis, handling of user-defined types and type-checking, context analysis, code generation and optimization, and memory management and run-time organization.
Parallel Computer Architecture and Programmingor15-418 (12)sys15-418: Parallel Computer Architecture and ProgrammingThe fundamental principles and engineering tradeoffs involved in designing modern parallel computers, as well as the programming techniques to effectively utilize these machines. Topics include naming shared data, synchronizing threads, and the latency and bandwidth associated with communication. Case studies on shared-memory, message-passing, data-parallel and dataflow machines will be used to illustrate these techniques and tradeoffs. Programming assignments will be performed on one or more commercial multiprocessors, and there will be a significant course project.
Distributed Systemsor15-440 (12)sys15-440: Distributed SystemsThe goals of this course are twofold: First, for students to gain an understanding of the principles and techniques behind the design of distributed systems, such as locking, concurrency, scheduling, and communication across the network. Second, for students to gain practical experience designing, implementing, and debugging real distributed systems. The major themes this course will teach include scarcity, scheduling, concurrency and concurrent programming, naming, abstraction and modularity, imperfect communication and other types of failure, protection from accidental and malicious harm, optimism, and the use of instrumentation and monitoring and debugging tools in problem solving. As the creation and management of software systems is a fundamental goal of any undergraduate systems course, students will design, implement, and debug large programming projects. As a consequence, competency in both the C and Java programming languages is required.
Networking and the Internetor15-441 (12)sys15-441: Networking and the InternetThe emphasis in this course will be on the basic performance and engineering trade-offs in the design and implementation of computer networks. To make the issues more concrete, the class includes several multi-week projects requiring significant design and implementation. The goal is for students to learn not only what computer networks are and how they work today, but also why they are designed the way they are and how they are likely to evolve in the future. We will draw examples primarily from the Internet. Topics to be covered include: network architecture, routing, congestion/flow/error control, naming and addressing, peer-to-peer and the web, internetworking, and network security.
Database Systems15-445 (12)sys15-445: Database SystemsThis course is on the design and implementation of database management systems. Topics include data models (relational, document, key/value), storage models (n-ary, decomposition), query languages (SQL, stored procedures), storage architectures (heaps, log-structured), indexing (order preserving trees, hash tables), transaction processing (ACID, concurrency control), recovery (logging, checkpoints), query processing (joins, sorting, aggregation, optimization), and parallel architectures (multi-core, distributed). Case studies on open-source and commercial database systems will be used to illustrate these techniques and trade-offs. The course is appropriate for students with strong systems programming skills.
Math/Stat Courses
- Differential and Integral Calculus21-120 (10)math21-120: Differential and Integral Calculus
Functions, limits, derivatives, logarithmic, exponential, and trigonometric functions, inverse functions; L'Hospital's Rule, curve sketching, Mean Value Theorem, related rates, linear and approximations, maximum-minimum problems, inverse functions, definite and indefinite integrals; integration by substitution and by parts. Applications of integration, as time permits. (Three 50 minute lectures, two 50 minute recitations)
- Integration and Approximation21-122 (10)math21-122: Integration and Approximation
Integration by trigonometric substitution and partial fractions; arclength; improper integrals; Simpson's and Trapezoidal Rules for numerical integration; separable differential equations, Newton's method, Euler's method, Taylor's Theorem, including a discussion of the remainder, sequences, series, power series. Parametric curves, polar coordinates, vectors, dot product. (Three 50 minute lectures, two 50 minute recitations)
- Mathematical Foundations for Computer Science15-151 (12)math15-151: Mathematical Foundations for Computer Science
*CS majors only* This course is offered to incoming Computer Science freshmen and focuses on the fundamental concepts in Mathematics that are of particular interest to Computer Science such as logic, sets,induction, functions, and combinatorics. These topics are used as a context in which students learn to formalize arguments using the methods of mathematical proof. This course uses experimentation and collaboration as ways to gain better understanding of the material. Open to CS freshmen only. NOTE: students must achieve a C or better
- Matrices and Linear Transformationsor21-241 (11)math21-241: Matrices and Linear Transformations
A first course in linear algebra intended for scientists, engineers, mathematicians and computer scientists. Students will be required to write some straightforward proofs. Topics to be covered: complex numbers, real and complex vectors and matrices, rowspace and columnspace of a matrix, rank and nullity, solving linear systems by row reduction of a matrix, inverse matrices and determinants, change of basis, linear transformations, inner product of vectors, orthonormal bases and the Gram-Schmidt process, eigenvectors and eigenvalues, diagonalization of a matrix, symmetric and orthogonal matrices.
Matrix Theory21-242 (11)math21-242: Matrix TheoryA component of the honors program, 21-242 is a more demanding version of 21-241 (Matrix Algebra and Linear Transformations), of greater scope, with increased emphasis placed on rigorous proofs. Topics to be covered: complex numbers, real and complex vectors and matrices, rowspace and columnspace of a matrix, rank and nullity, solving linear systems by row reduction of a matrix, inverse matrices and determinants, change of basis, linear transformations, inner product of vectors, orthonormal bases and the Gram-Schmidt process, eigenvectors and eigenvalues, diagonalization of a matrix, symmetric and orthogonal matrices, hermitian and unitary matrices, quadratic forms.
- Calculus in Three Dimensionsor21-259 (10)math21-259: Calculus in Three Dimensions
Vectors, lines, planes, quadratic surfaces, polar, cylindrical and spherical coordinates, partial derivatives, directional derivatives, gradient, divergence, curl, chain rule, maximum-minimum problems, multiple integrals, parametric surfaces and curves, line integrals, surface integrals, Green-Gauss theorems. (Three 50 minute lectures, two 50 minute recitations)
Vector Calculus for Computer Scientistsor21-266 (10)math21-266: Vector Calculus for Computer ScientistsThis course is an introduction to vector calculus making use of techniques from linear algebra. Topics covered include scalar-valued and vector-valued functions, conic sections and quadric surfaces, new coordinate systems, partial derivatives, tangent planes, the Jacobian matrix, the chain rule, gradient, divergence, curl, the Hessian matrix, linear and quadratic approximation, local and global extrema, Lagrange multipliers, multiple integration, parametrised curves, line integrals, conservative vector fields, parametrised surfaces, surface integrals, Green's theorem, Stokes's theorem and Gauss's theorem. (Three 50 minute lectures, one 50 minute recitation)
Multidimensional Calculusor21-268 (11)math21-268: Multidimensional CalculusA serious introduction to multidimensional calculus that makes use of matrices and linear transformations. Results will be stated carefully and rigorously. Students will be expected to write some proofs; however, some of the deeper results will be presented without proofs. Topics to be covered include functions of several variables, limits, and continuity, partial derivatives, differentiability, chain rule, inverse and implicit functions, higher derivatives, Taylor's theorem, optimization, multiple integrals and change of variables, line integrals, surface integrals, divergence theorem and Stokes's theorem. (Three 50 minute lectures, one 50 minute recitation)
Vector Analysis21-269 (10)math21-269: Vector AnalysisA component of the honors program, 21-269 is a more demanding version of 21-268 of greater scope, with greater emphasis placed on rigorous proofs. Topics to be covered typically include: the real field, sups, infs, and completeness; geometry and topology of metric spaces; limits, continuity, and derivatives of maps between normed spaces; inverse and implicit function theorems, higher derivatives, Taylor's theorem, extremal calculus, and Lagrange multipliers. Integration. Iterated integration and change of variables. (Three 50 minute lectures, one 50 minute recitation)
- Probability and Computingor15-259 (12)math15-259: Probability and Computing
Probability theory is indispensable in computer science today. In areas such as artificial intelligence and computer science theory, probabilistic reasoning and randomization are central. Within networks and systems, probability is used to model uncertainty and queuing latency. This course gives an introduction to probability as it is used in computer science theory and practice, drawing on applications and current research developments as motivation. The course has 3 parts: Part I is an introduction to probability, including discrete and continuous random variables, heavy tails, simulation, Laplace transforms, z-transforms, and applications of generating functions. Part II is an in-depth coverage of concentration inequalities, like the Chernoff bound and SLLN bounds, as well as their use in randomized algorithms. Part III covers Markov chains (both discrete-time and continuous-time) and stochastic processes and their application to queuing systems performance modeling. This is a fast-paced class which will cover more material than the other probability options and will cover it in greater depth.
Probability Theory for Computer Scientistsor36-218 (9)math36-218: Probability Theory for Computer ScientistsProbability theory is the mathematical foundation for the study of both statistics and of random systems. This course is an intensive introduction to probability,from the foundations and mechanics to its application in statistical methods and modeling of random processes. Special topics and many examples are drawn from areas and problems that are of interest to computer scientists and that should prepare computer science students for the probabilistic and statistical ideas they encounter in downstream courses and research. A grade of C or better is required in order to use this course as a pre-requisite for 36-226, 36-326, and 36-410. If you hold a Statistics primary/additional major or minor you will be required to complete 36-226. For those who do not have a major or minor in Statistics, and receive at least a B in 36-218, you will be eligible to move directly onto 36-401.
orIntroduction to Probability Theory36-225 (9)math36-225: Introduction to Probability TheoryThis course is the first half of a year-long course which provides an introduction to probability and mathematical statistics for students in the data sciences. Topics include elementary probability theory, conditional probability and independence, random variables, distribution functions, joint and conditional distributions, law of large numbers, and the central limit theorem.
Introduction to Statistical Inference36-226 (9)math36-226: Introduction to Statistical InferenceThis course is the second half of a year long course in probability and mathematical statistics. Topics include maximum likelihood estimation, confidence intervals, hypothesis testing, and properties of estimators, such as unbiasedness and consistency. If time permits there will also be a discussion of linear regression and the analysis of variance.
Probability21-325 (9)math21-325: ProbabilityThis course focuses on the understanding of basic concepts in probability theory and illustrates how these concepts can be applied to develop and analyze a variety of models arising in computational biology, finance, engineering and computer science. The firm grounding in the fundamentals is aimed at providing students the flexibility to build and analyze models from diverse applications as well as preparing the interested student for advanced work in these areas. The course will cover core concepts such as probability spaces, random variables, random vectors, multivariate densities, distributions, expectations, sampling and simulation; independence, conditioning, conditional distributions and expectations; limit theorems such as the strong law of large numbers and the central limit theorem; as well as additional topics such as large deviations, random walks and Markov chains, as time permits. (Three 50 minute lectures)
Science Courses
Other Courses
- First Year Immigration Course07-128 (3)communication07-128: First Year Immigration Course
The First Year Immigration Course is taken by first-semester School of Computer Science students on the Pittsburgh campus. The course is designed to acquaint incoming students with computer science at CMU. Talks range from historical perspectives in the field to descriptions of the cutting edge research being conducted in the School of Computer Science. Enrollment is limited to SCS First Year students ONLY.
- Free Elective
Goals
Students in the B.S. program in Computer Science are expected to acquire the following skills upon graduation:
- Identify, use, design, develop and analyze appropriate abstractions and algorithms to solve problems while being able to prove the algorithm’s performance and correctness across a variety of metrics (e.g., time, space, parallel vs. sequential implementation, computability)
- Implement solutions to problems in domains such as artificial intelligence, graphics and sound, software engineering, and human-computer interaction, by applying the fundamentals of those areas to create solutions to current problems while being exposed to research developments that will enable them to adapt as the technology changes
- Reason about and implement programs in various programming languages and paradigms
- Describe, specify, and develop large-scale, open-ended software systems subject to constraints such as performance and/or resource issues
- Communicate technical material effectively to technical and non-technical audiences
- Work both individually and in teams
- Recognize the social impact of computing and the attendant responsibility to consider the legal, moral and ethical implications of computing technologies
History of the Major
2023 | Increase 15-122 (Principles of Imperative Computation) and 15-150 (Principles of Functional Programming) from 10 units → 12. Increase 07-128 (First Year Immigration Course) from 1 unit → 3. Make 21-120 (Differential and Integral Calculus) prerequisite an explicit requirement. Reduce free electives accordingly. |
2022 | Add alternatives to 21-259 (Calculus in Three Dimensions). |
2021 | Increase 15-151 (Mathematical Foundations for Computer Science) from 10 units → 12. |
2020 | Rename 07-128 (Freshman Immigration Course → First Year Immigration Course). |
2019 | Add 21-259 (Calculus in Three Dimensions). Add 15-314 (Programming Language Semantics) and 17-355 (Program Analysis) to Logic-Elective options. Renumber 10-401 (Introduction to Machine Learning) → 10-315. Renumber 15-381 (Artificial Intelligence: Representation and Problem Solving) → 15-281. Make 21-120 (Differential and Integral Calculus) an implicit requirement. |
2018 | Drop required Algorithms/Complexity elective. Replace required Applications elective → required AI Elective + required Domains elective. Renumber 15-128 (Freshman Immigration Course) → 07-128. Drop 15-314 (Programming Language Semantics) from Logic-elective options. Add 15-445 (Database Systems) to Systems-Elective options. Adjust options for required Probability course. Renumber 08-200 (Ethics and Policy Issues in Computing) → 17-200. |
2017 |