The goal of the Computer Systems concentration is to give students a broad background in the practical understanding of designing and building systems. Students who complete this concentration are expected to be able to both pursue topics at the Ph.D. level at top programs, as well as industry work, either applying these concepts or directly working within the areas of kernel development, compiler improvements, designing distributed systems, et cetera.
The concentration is designed to be flexible in covering the wide area of systems topics. Two courses from the Computer Science major’s “systems” constrained elective are required (List A below). The other courses come from a larger list of related courses (List B below). A limited amount of research credit can count toward the requirements.
Typically, systems courses include three aspects:
- A systems course educates students about how a class of computer systems works, both at a conceptual level and in practice. This includes the study of concrete problems faced in building a particular class of systems and successful solutions to these problems.
- Systems courses address how properties of modern hardware (e.g., processors, net- works, storage hierarchies) influence the design and implementation of a class of soft- ware systems. This typically includes reasoning about concurrency, and understanding and measuring performance.
- To solidify the key systems organization principles, there is a significant project/system implementation aspect to the course, both to reinforce understanding of how these systems work, and to learn system building skills (i.e., not just programming, but also design, debugging, testing, etc.). The size of the programming tasks is course dependent, but a significant fraction of the course grade (e.g., at least 40%) is derived from project work.
Students completing this concentration will be able to demonstrate the following skills and learning:
- Students will be able to design, develop and deploy large computer systems and justify their design decisions.
- Students will synthesize the interaction and tradeoffs between different layers and components in computer systems.
- Students will demonstrate debugging expertise on complex and diverse bugs and issues during software development.
- Students will recognize diverse granularities of parallelism, apply them toward solving problems, and implement solutions that achieve correct execution while accounting for reliability, fault tolerance, performance, security, and scalability.
All students will start the concentration after having finished 15-213 (or its cross-listed equivalents) with a B or better, as 15-213 is a prerequisite either directly or indirectly for all courses in the concentration.
The curriculum will consist of two courses from List A and at least two elective courses from List B. The courses taken from list A and B must sum to at least 51 units, where each course must be passed with a C or better. The courses in List A will follow the Systems constrained elective list as part of the degree requirements for a B.S. in Computer Science. The elective courses on List B may vary from year to year, with a plan to review these requirements every three years.
- Operating System Design and Implementation (15-410)
- Compiler Design (15-411)
- Parallel Computer Architecture and Programming (15-418)
- Distributed Systems (15-440)
- Computer Networks (15-441)
- Database Systems (15-445)
List B (“electives”):
- Anything from List A
- Cloud Computing (15-319/-619)
- Embedded Systems (15-348)
- Introduction to Computer Security (15-/18-330, was 15-/18-487)
- Operating System Practicum (15-412)
- Database Applications (15-415)
- Advanced Operating Systems and Distributed Systems (15-712)
- Advanced Cloud Computing (15-719)
- Advanced Database Systems (15-721)
- Computer Architecture (15-740)
- Computer Networks (15-744)
- Optimizing Compilers for Modern Archiectures (15-745)
- Storage Systems (15-/18-746)
- Mobile and Pervasive Computing (15-821)
- Building User Focused Sensing Systems (17-422, was 08-735)
- Logic Design and Verification (18-341)
- Introduction to Embedded Systems (18-349)
- Introduction to Computer Architecture (18-447)
Students can also apply a senior thesis (or other significant research for credit) in a topic related to Systems, as approved by the concentration advisor, as one of the elective courses for List B. Any significant research credit will include an identifible output, such as paper or technical report. Any research course counts for at most 12 units, and can be done once.
The present course offering plan has the elective courses each offered at least once per year, and the required courses offered both Fall and Spring.
The concentration will require that 3 courses (at least 27 units) are not double counted with any other requirements of any major, minor, or other concentration.
The faculty advisor for the Computer Systems concentration is Brian Railing. The courses on the list of electives will be approved yearly by the concentration advisor through consultation with the Systems group (to help evaluate the relevance of the courses) and the Assistant Dean for undergraduate studies (to help flag any logistical issues). Any special requests by a student for counting a course out of the list will go to the concentration advisor. The concentration advisor will also approve any research units.