Rice UniversityWebsiteAcademic Catalog
Computer ScienceDepartment Website
BS Degree in Computer Sciencesource 1source 2source 3
CS Courses
- Computational ThinkingCOMP 140 (4)introCOMP 140: Computational Thinking
An introduction to computational problem solving designed to give an overview of computer science using real-world problems across a broad range of disciplines. Students learn how to think about these problems and how to structure effective solutions to them using computation. No programming knowledge is required or expected; students learn how to implement their solutions in Python. If you register for fully online section, you must have a webcam and you must take the exams in person.
- Algorithmic ThinkingCOMP 182 (4)algsCOMP 182: Algorithmic Thinking
Algorithms are the engines of a great majority of systems, natural and artificial alike. This course introduces algorithmic thinking as a discipline for reasoning about systems, taming their complexities, and elucidating their properties. Algorithmic techniques, along with their correctness and efficiency, will be taught through reasoning about systems of interactions, such as markets, that are ubiquitous in our highly connected world.
- Introduction to Program DesignCOMP 215 (4)introCOMP 215: Introduction to Program Design
This course covers the principles of programming and program design. The course is organized around a number of individual programming assignments that fit together to complete a significant, real-world application. Each assignment emphasizes one or more of the basic principles of software design, including: encapsulation, abstraction, test-driven development, and functional and object-oriented programming. The Java programming language will be used. An introduction to the basics of the Java language itself (including Java syntax and semantics) will be provided.
- Intro to Computer OrganizationCOMP 222 (4)sysCOMP 222: Intro to Computer Organization
This course introduces students to the organization of computer systems in order that they gain an understanding of how a computer system executes their programs. Students will learn how to write small-scale programs in C, how to read the translation of those programs into assembly language, and how those programs are executed at the machine level. Specific topics covered will include data representation at the machine level, static versus dynamic memory allocation, instruction set architecture and the encoding of instructions in memory, linking relocatable object files to create executable files, pipelining within the processor, and caching within the memory system.
- Computer EthicsCOMP 301 (3)impactCOMP 301: Computer Ethics
Given their growing power in the twenty-first century, computer scientists have duties both to society and their own profession to wield that power wisely and responsibly. In this discussion-and reflection-oriented course students will apply fundamentals of moral philosophy and social responsibility to current issues in computer science.
- Intro to Programming LanguagesCOMP 312 (3)plsCOMP 312: Intro to Programming Languages
This course explores the design landscape of programming languages and compilers, with the primary goal of giving students skills and knowledge that will help them as practitioners. After completing the course, students should be able to evaluate the tradeoffs between different programming languages, choose the language that is best-suited to a given task, write code using the functional programming paradigm, and learn new languages more quickly. Specific topics covered include lexical and syntactic analysis, type systems, variable scopes and bindings, control flow structures, and functional programming. Case studies from modern programming languages will be used to illustrate a range of abstractions and design choices.
- Concurrent Program DesignCOMP 318 (4)softengCOMP 318: Concurrent Program Design
Modern software systems are typically complex, event-driven, and require coordination across multiple components. Such systems require careful design to ensure that they uphold best practices in software design while supporting concurrency. This course will introduce principles of designing large-scale concurrent software and give students practice implementing these principles in the context of large-scale, highly concurrent software systems. Topics covered will include concurrency vs. parallelism, concurrency concepts and mechanisms, and principles of software design including encapsulation, composition, decoupling, and accessibility.
- Introduction to Computer SystemsCOMP 321 (4)sysCOMP 321: Introduction to Computer Systems
This course introduces computer systems from the programmer's perspective. Topics include data representation, the compilation process, and system-level programming concepts such as interrupts and concurrency. Formerly COMP 221.
- Reasoning About AlgorithmsCOMP 382 (4)algsCOMP 382: Reasoning About Algorithms
Writing algorithms is fun, but how are you sure that the algorithm you wrote is flawless? Are there computing tasks for which it is impossible to produce an efficient algorithm, or, for that matter, any algorithm? To answer these questions, you have to learn to perform mathematical reasoning about algorithmic problems and solutions COMP 382 is an introduction to such reasoning techniques. Topics covered would include elementary logic, analysis of the correctness and efficiency of algorithms, and formal computational models like finite automata and Turning machines. On the way, you are also going to learn some new algorithm design techniques.
- Breadth Elective: TheoryAdvanced Logic in Computer ScienceororCOMP 409 (3)mathCOMP 409: Advanced Logic in Computer Science
Logic has been called 'the calculus of computer science'. The argument is that logic plays a fundamental role in computer science, similar to that played by calculus in the physical sciences and traditional engineering disciplines. Indeed, logic plays an important role in areas of Computer Science as disparate as artificial intelligence (automated reasoning), architecture (logic gates), software engineering (specification and verification), programming languages (semantics, logic programming), databases (relational algebra and SQL), algorithms (complexity and expressiveness), and theory of computation (general notions of computability).
Optimization: Algorithms, Complexity and ApproximationsorCOMP 414 (3)algsCOMP 414: Optimization: Algorithms, Complexity and ApproximationsThe main focus of the course will be on smooth optimization techniques, with applications in machine learning and artificial intelligence. The course will introduce the basics of algorithms on continuous optimization, starting from the classical gradient descent algorithm in convex optimization, towards more sophisticated approaches in non-convex scenarios. The course will explore the fundamental theory, algorithms, complexity and approximations in nonlinear optimization.
Genome-Scale Algorithms and Data StructuresorCOMP 416 (3)algsCOMP 416: Genome-Scale Algorithms and Data StructuresSince the advent of Sanger Sequencing in 1977, computer scientists have devised algorithms and software tools to interpret and analyze DNA sequences. The field of bioinformatics focuses on computational approaches to solving biological questions. This course serves both as an introduction to widely used algorithms in bioinformatics and a software design course. The class involves a semester-long software design and implementation project, emphasizing design patterns and high-performance computing. No prior knowledge of biology is assumed nor required.
Intro to Math CryptographyorCOMP 423 (3)mathCOMP 423: Intro to Math CryptographyThe course introduces students to modern cryptographic techniques, focusing mainly on mathematical tools. The course covers topics such as Diffie-Hellman key exchange, the ElGamal public key crypto system, integer factorization and RSA, and elliptic curves and lattices in cryptography.
Concrete MathematicsororCOMP 448 (3)mathCOMP 448: Concrete MathematicsConcrete mathematics is a blend of continuous and discrete mathematics. Major topics include sums, recurrences, integer functions, elementary number theory, binomial coefficients, generating functions, discrete probability and asymptotic methods.
Probabilistic Algorithms and Data StructureorCOMP 480 (4)algsCOMP 480: Probabilistic Algorithms and Data StructureThis course will be ideal for someone wanting to build a strong foundation in the theory and practice of algorithms for processing Big-Data. We will discuss advanced data structures and algorithms going beyond deterministic setting and emphasize the role of randomness in getting significant, often exponential, improvements in computations and memory.
Automata, Formal Languages, and ComputabilityCOMP 481 (3)theoryCOMP 481: Automata, Formal Languages, and ComputabilityFinite automata, regular expressions, regular languages, pushdown automata, context-free languages, Turing machines, recursive languages, computability, and solvability. It is strongly recommended that students complete three semesters of Mathematics before enrolling in this course.
- Breadth Elective: SystemsorOperating Systems and Concurrent ProgrammingorCOMP 421 (4)sysCOMP 421: Operating Systems and Concurrent Programming
Introduction to the design, construction, and analysis of concurrent programs with an emphasis on operating systems, including filing systems, schedulers, and memory allocators. Specific attention is devoted to process synchronization and communication within concurrent programs.
Parallel ComputingororCOMP 422 (4)sysCOMP 422: Parallel ComputingCOMP 422 is an undergraduate version of this course. COMP 422 students will have four programming assignments. COMP 534 students will have five. As part of their assignments, both COMP 422 and COMP 534 students will analyze the scalability and parallel efficiency of parallel programs they write. COMP 534 students will additionally use tools to qualify the root causes of scaling losses in their programs and document their findings.
Introduction to Computer NetworksorCOMP 429 (4)sysCOMP 429: Introduction to Computer NetworksNetwork architectures, algorithms, and protocols. Local- and Wide-area networking. Intra- and inter-domain routing. Transmission reliability. Flow and congestion control. TCP/IP. Multicast. Quality of Service. Network Security - Networked applications.
Database System ImplementationorCOMP 432 (3-4)sysCOMP 432: Database System ImplementationThis course covers database management system architecture, query processing and optimization, transaction processing, concurrent control and recover, storage, indexing structures and related topics. Students will build a database system from the ground up. Students who have not had an introductory database course should enroll for 4 credits: all others should enroll for 3 credits.
Secure and Cloud ComputingorCOMP 436 (3)sysCOMP 436: Secure and Cloud ComputingWhat is “cloud computing?” How do we build cloud-scale systems and components that are secure against malicious attacks, and scale to millions of users? Many of today’s services run inside the cloud – a set of geographically distributed data centers running heterogeneous software stacks.
Quantum Computing AlgorithmsCOMP 458 (3)algsCOMP 458: Quantum Computing AlgorithmsQuantum computing is an emerging field with the potential to revolutionize various industries, including cryptography, scientific computation, optimization, and machine learning. Quantum Computing Algorithms is a course designed to introduce students to the foundations and practical algorithms of quantum computing from a systems perspective to equip them for the evolving technological landscape. The course will first refresh students on required mathematical concepts in linear algebra, probabilities, and statistics. Students will also learn about fundamental quantum principles, including superposition, entanglement, reversibility, interference, and circuits. The course will then delve into advanced quantum algorithms, especially variational and parameterized codes, including search, optimization, machine learning, and quantum simulation. Students will gain hands-on experience with Python-based quantum programming languages, Cirq and Tensorflow Quantum, to program current quantum computers.
- Breadth Elective: Application DomainsIoT Programming And Data AnalysisorCOMP 418 (4)sysCOMP 418: IoT Programming And Data Analysis
This course is an introduction to the Internet of Things (IoT). It will present the tools and techniques needed to develop complex IoT applications that encompass interaction with the physical world and data analysis across the IoT computing infrastructure. The topics range from programming microcontrollers (e.g., Arduino) and single-board computers (e.g., Raspberry Pi) to IoT automation and the efficient analysis of real-time IoT data.
Web DevelopmentorCOMP 431 (3)sysCOMP 431: Web DevelopmentIn this project-based course, students create multi-user Web applications involving all aspects of application development from front-end and back-end programming to interfacing client-server communications technologies. Class time includes discussions of topics in Web development, structural frameworks, test driven development, and time for students to develop their Web applications.
Artificial IntelligenceorCOMP 440 (4)aiCOMP 440: Artificial IntelligenceThis is a foundational course in artificial intelligence, the discipline of designing intelligent agents. The course will cover the design and analysis of agents that do the right thing in the face of limited information and computational resources. The course revolves around two main questions: how agents decide what to do, and how they learn from experience. Tools from computer science, probability theory, and game theory will be used. Interesting examples of intelligent agents will be covered, including poker playing programs, bots for various games (e.g. WoW), DS1 -- the spacecraft that performed an autonomous flyby of Comet Borrely in 2001, Stanley -- the Stanford robot car that won the Darpa Grand Challenge, Google Maps and how it calculates driving directions, face and handwriting recognizers, Fedex package delivery planners, airline fare prediction sites, and fraud detectors in financial transactions.
Reinforcement LearningorCOMP 442 (3)aiCOMP 442: Reinforcement LearningThis course introduces students to reinforcement learning (RL), a general and impactful machine learning paradigm for solving sequential decision-making problems and designing autonomous agents. The course will cover both classical and recent algorithms for reinforcement learning (including deep RL) and imitation learning (including inverse RL). Through the assignments and final project, students will get hands-on experience in applying reinforcement learning algorithms to solve problems inspired by real-world applications. The course will conclude with an overview of open problems and ongoing research in reinforcement learning.
Introduction to Computer VisionorCOMP 447 (3)aiCOMP 447: Introduction to Computer VisionAn introduction to the basic concepts, algorithms and applications in computer vision. Topics include: image processing pipelines, low-level vision/image processing methods such as filtering and edge detection, mid-level vision topics such as segmentation and feature detection, and high-level vision tasks such as object recognition and face recognition with neural networks. The course will involve programming and implementing basic computer vision algorithms in Python.
Algorithmic RoboticsorCOMP 450 (4)aiCOMP 450: Algorithmic RoboticsRobots have fascinated people for generations. Today, robots are built for applications as diverse as exploring remote planets, de-mining war zones, cleaning toxic waste, assembling cars, inspecting pipes in industrial plants and mowing lawns. Robots are also interacting with humans in a variety of ways: robots are museum guides, robots assist surgeon sin life threatening operations, and robotic cars can drive us around. The field of robotics studies not only the design of new mechanisms but also the development of artificial intelligence frameworks to make these mechanism useful in the physical world, integrating computer science, engineering, mathematics and more recently biology and sociology, in a unique way. This class will present fundamental algorithmic advances that enable today’s robots to move in real environments and plan their actions. It will also explore fundamentals of the field of Artificial Intelligence through the prism of robotics. The class involves a significant programming project.
Machine Learning with GraphsorCOMP 459 (3)aiCOMP 459: Machine Learning with GraphsThis course will overview both traditional and more recent graph-based machine learning algorithms. Graphs show up in machine learning in many forms. Oftentimes, the input data can be naturally represented as a graph, such as for relational learning tasks applied to social networks and graph kernels applied to chemical data. Other times, graphs are just a framework to express some intrinsic structure in the data, such as for graphical models and non-linear embedding. In both cases, recent advances in representation learning (or graph embedding) and deep learning have generated a renewed interest in machine learning on graphs. At the end of the course, students are expected to be able to: (1) identify the appropriate graph-based machine learning algorithm for a given problem; (2) extend existing algorithms to solve new related problems; and (3) recognize some of the key research challenges in the field. The course will be a mixture of lectures, a research paper presentation, homework assignments (including programming), and a hands-on class project.
Fundamentals of Robotic ManipulationCOMP 462 (3)aiCOMP 462: Fundamentals of Robotic ManipulationRobots, as seen in many different forms, can help people in various application scenarios to improve the efficiency, safety, and quality of task executions. In particular, those robots which can physically interact with the world possess essential skills, called manipulation, to engage themselves more comprehensively in the real-world tasks. This course will introduce both fundamental and the state-of-the-art knowledge that enable robots to manipulate in our world. Topics including robot motions, kinematics, dynamics, simulation and ROS, hand and grasping, prehensile and nonprehensile manipulation, robot control, and interactive estimation, will be covered. Significant programming projects are involved to facilitate converting the textbook knowledge to solid hands-on experiences.
- Senior Design CourseProduction ProgrammingorCOMP 402 (4)softengCOMP 402: Production Programming
This course focuses on the principles and practices of test-driven software development, which have been popularized under the banner of 'Extreme Programming.' To provide students with practical experience, the course engages students in the development of open source production programs written in JAVA or C#. The DRJAVA programming courses was developed by students in this course. Some of the major topics covered in course lectures include design patterns for controlling concurrency and refactoring transformations to improve legacy code.
Software Engineer MethodologyorCOMP 410 (4)softengCOMP 410: Software Engineer MethodologyCOMP 410 is a pure discovery-based learning course designed to give students real-life, hands-on training in a wide variety of software engineering issues that arise in creating large-scale, state-of-the-art software systems. The class forms a small software development 'company' that works to deliver a product to a customer. The topics encountered include and are not limited to, dealing with new technologies (e.g. C#, .NET, distributed computing), advanced object-oriented programming and design, interacting with customers, problem specification and tasking, individual and group communications, human resource management, group leadership, testing, integration and documentation. Traditional development cycle methodologies will be compared to recent, 'agile' techniques.
Distributed Program ConstructionorCOMP 413 (4)sysCOMP 413: Distributed Program ConstructionThis course focuses on modern principles for the construction of distributed programs, with an emphasis on design patterns, modern programming tools, and distributed object systems. The material will be applied in a substantial software design/construction project.
Genome-Scale Algorithms and Data StructuresororCOMP 416 (3)algsCOMP 416: Genome-Scale Algorithms and Data StructuresSince the advent of Sanger Sequencing in 1977, computer scientists have devised algorithms and software tools to interpret and analyze DNA sequences. The field of bioinformatics focuses on computational approaches to solving biological questions. This course serves both as an introduction to widely used algorithms in bioinformatics and a software design course. The class involves a semester-long software design and implementation project, emphasizing design patterns and high-performance computing. No prior knowledge of biology is assumed nor required.
Senior Design in a Robotized WorldCOMP 461 (4)capstoneCOMP 461: Senior Design in a Robotized WorldRobots are now a wide spectrum of various embodiments, e.g., humanoids, dogs, industrial arms, drones, and self-driving cars, and they are rapidly merging themselves into our society. While we are not fully ready to welcome them, yet, we are more than certain that we need to work with them in ways that we did not know before. On the one hand, we are still challenged by many technical problems to enable robots to be more dexterous and robust. On another hand, in a time where resources are connected and networked, we need to design novel systems to manage different robots, share the robots, or even make them autonomously and adaptively build teams. In this senior design course, we will develop team-based projects and will look into a robotized future with our imaginations: we will either solve problems that are technically going to enhance the robot skills, or address problems that will make future robots more useful and more organized in the real world. Background in robotics is not required. In our creative projects, your efforts in developing core robot algorithms, databases, machine learning systems, web applications, mobile apps, LLM models, or anything else that can be useful, will together make this robotized world a better place.
Math/Stat Courses
- oror
- Single Variable Calculus IIorMATH 102 (3)mathMATH 102: Single Variable Calculus II
Continuation of MATH 101. Includes further techniques of integration, as well as infinite sequences and series, Taylor polynomials and Taylor series, parametric equations, arc length, polar coordinates, complex numbers, and Fourier polynomials.
- orHonors Multivariable CalculusMATH 232 (3)mathMATH 232: Honors Multivariable Calculus
Calculus of several variables (partial derivatives and gradients, double and triple integrals, vector fields, line and surface integrals, Green's theorem, Stokes's theorem, Gauss's theorem). Content is similar to that of MATH 212, but MATH 232 will use linear algebra to extend results to R^n. There will also be an emphasis on rigorous mathematical arguments.
- ororHonors Linear AlgebraorMATH 354 (3)mathMATH 354: Honors Linear Algebra
Vector spaces, linear transformations and matrices, theory of systems of linear equations, determinants, eigenvalues and diagonalizability, inner product spaces; and optional material chosen from: dual vector spaces, spectral theorem for self-adjoint operators, Jordan canonical form. Content is similar to that of MATH 355, but with more emphasis on theory. The course will include instruction on how to construct mathematical proofs. This course is appropriate for potential Mathematics majors and others interested in learning how to construct rigorous mathematical arguments.
- Probability and StatisticsorSTAT 310 (3)mathSTAT 310: Probability and Statistics
Probability and the central concepts and methods of statistics including probability, random variables, distributions of random variables, expectation, sampling distributions, estimation, confidence intervals, and hypothesis testing
Honors Probability and Mathematical StatisticsorSTAT 311 (3)mathSTAT 311: Honors Probability and Mathematical StatisticsProbability and the central concepts and methods of statistics including probability, random variables, distributions of random variables, expectation, sampling distributions, estimation, confidence intervals, and hypothesis testing. Advanced topics (not covered in STAT 310 or STAT 315) include the modeling stochastic phenomena and asymptotic statistical theory. Intended for students wishing to understand more rigorous statistical theory and for those contemplating a BS degree in Statistics or graduate school in statistical science.
Prob & Stat for EngineersorSTAT 312 (3)mathSTAT 312: Prob & Stat for EngineersProbability and the central concepts and methods of statistics including probability, distributions of random variables, expectation, sampling distributions, estimation, confidence intervals, and hypothesis testing. Examples are predominantly from civil and environmental engineering.
Statistics for Data ScienceorSTAT 315 (4)mathSTAT 315: Statistics for Data ScienceAn introduction to mathematical statistics and computation for applications to data science. Topics include probability, random variables expectation, sampling distributions, estimation, confidence intervals, hypothesis testing and regression. A weekly lab will cover the statistical package, R, and data projects.
Random Signals in Electrical Engineering SystemsELEC 303 (3)engrELEC 303: Random Signals in Electrical Engineering SystemsAn introduction to probability theory and statistics with applications to electrical engineering problems in signal processing, communications and control; probability spaces, conditional probability, independence, random variables, distribution and density functions, random vectors, signal detection and parameter estimation
Other Courses
- 6 × Free Electives
History of the Major
2024 | Drop COMP 130 and COMP 160 alternatives to COMP 140. Drop ELEC 220 (Fundamentals Of Computer Engineering). Drop COMP 310 (Advanced Object-Oriented Programming). Drop COMP 421 (Operating Systems and Concurrent Programming). Drop DiffEq alternative to Calculus III. Drop PHYS 101 (Mechanics) and PHYS 102 (E&M). Add COMP 222 (Computer Organization). Add COMP 301 (Computer Ethics). Replace COMP 322 (Principles of Parallel Programming) → COMP 318 (Concurrent Program Design). Replace "COMP 411 (Principles of PLs) or COMP 412 (Compiler Construction)" → COMP 312 (Intro to PLs). Replace "3 CS Electives (300+)" → One CS elective from each of 3 breadth lists. Add 3 free electives (smaller major). Add COMP 402 and COMP 461 as Senior Design options. Add STAT 311 alternative for Probability. |
2023 | Add COMP 416 (Genome-Scale Algorithms and Data Structures) as a capstone option. Renumber CAAM 334 (Matrix Analysis for Data Science) → CMOR 302. Renumber CAAM 335 (Matrix Analysis) → CMOR 303. |
2022 | |
2021 | |
2020 | Reduction in university requirements yields 3 Free Electives. |
2019 | Add ELEC 303 (Random Signals In Electrical Engineering Systems) as a Probability alternative. Add CAAM 334 (Matrix Analysis for Data Science) as a Linear Algebra alternative. |
2018 | Add MATH 105 alternative for Calculus I. Add Math 106 alternative for Calculus II. |
2017 |