Rice UniversityWebsiteAcademic Catalog
Computer ScienceDepartment Website
BA Degree in Computer Sciencesource 1source 2
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.
- 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
- 9 × 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. 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). Add Senior Design requirement. Add 1 free elective (smaller major). Add STAT 311 alternative for Probability. |
2023 | Renumber CAAM 334 (Matrix Analysis for Data Science) → CMOR 302. Renumber CAAM 335 (Matrix Analysis) → CMOR 303. |
2022 | |
2021 | |
2020 | Reduction in university requirements adds 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. |