UCLA CS 130: Software Engineering (Spring 2024)
Table of contents
- Course description
- Important links
- Instructors
- Lectures
- Discussions / TAs
- Prerequisites
- Textbook and Readings
- Class project
- Exams
- Grading
- Academic Honesty
- Class Schedule
Course description
Principles relevant to creating large-scale software projects as opposed to small one-person efforts. The class emphasizes scalable software engineering practices, teamwork, processes, and tools. The core of this class is a team project to implement and deploy a web server in C++.
Important links
- Code Review (Git/Gerrit)
- https://code.cs130.org
- Piazza discussions
- https://piazza.com/ucla/spring2024/cs130
- E-mail instructors
- ucla-cs130-admin@googlegroups.com
Instructors
- Michael Burns
- mbx@g.ucla.edu
- Eric Hennigan
- eric.hennigan@gmail.com
- Alex Monroe
- alexrmonroe@gmail.com
- Philo Juang
- pjuang@google.com
Lectures
- Class
- Mondays and Wednesdays
4pm - 5:50pm
Young Hall CS76 - Office hours
- Book on calendar or e-mail instructors to schedule.
Discussions / TAs
- TA
- Belle Lerdworatawee bellelee@g.ucla.edu
- Lab 1A1
- F 12pm-12:50pm Renee and David Kaplan Hall 135
- Lab 1A2
- F 1pm-1:50pm Renee and David Kaplan Hall 135
- TA
- Yifan Qiao yifanqiao@g.ucla.edu
- Lab 1B1
- F 2pm-2:50pm Renee and David Kaplan Hall 135
- Lab 1B2
- F 3pm-3:50pm Renee and David Kaplan Hall 135
- TA
- Haoran Ma haoranma@g.ucla.edu
- Lab 1C1
- F 12pm-12:50pm Franz Hall 1178
- Lab 1C2
- F 1pm-1:50pm Franz Hall 1178
Prerequisites
- CS111: Operating Systems
- CS131: Programming Languages
- (Suggested) CS118: Networking
Textbook and Readings
- (Suggested) Kernighan and Pike, The Practice of Programming
- Additional readings on the web
Class project
During this course you will join a team of other students and complete a project in which you will jointly develop a configurable, scalable server and deploy it for public access on Google Cloud with appropriate logging and monitoring. The goal of this is to learn and practice sound development practices including thoughtful API design, maintainable coding style, automated testing, and peer code review.
Assignments will be posted on this website each Monday after noon for specific milestones of the project, and will be due the following Monday morning by 11:59PM, submitted via online form. Students will be graded on their individual contributions for each assignment, as well as the health of the project and the functionality of the server.
Assignment topics include:
- Repository setup, Unit tests, Code reviews (individual assignment)
- Simple echo server, Deployment
- Continuous build, Test coverage, Web server testing
- Serving static files
- API proposal and presentation (no late work accepted)
- Refactoring
- Reverse proxy, Threading
- Self and peer evaluations (individual assignment)
Exams
Exam questions will be drawn from lectures, readings, and assignments. Exam structure is TBD due to remote teaching.
Grading
Course grade breakdown:
- Assignments
- 70%
- Midterm
- 15%
- Final
- 15%
Work and exams will be graded on an absolute scale.
A curve may be applied, but only to students’ benefit (your grade will never decrease as a result of a curve)
Academic Honesty
For exams, presentations, and written work (other than code), normal standards of academic honesty apply, as outlined in the UCLA Student Conduct Code.
For computer code, reading and adapting publically available code is encouraged, and in some cases may be necessary. You must cite your source in a comment, in the form of a URL.
Class Schedule
Date | Lecture | Topics | Reading |
---|---|---|---|
April 1 | 1 | Course overview Development environments Source control |
|
April 3 | 2 | Testing | |
April 8 | 3 | Code Reviews Tools for web server development |
|
April 10 | 4 | Build systems Deployment |
|
April 15 | 5 | Testing, refactoring, and debugging a web server | |
April 17 | 6 | Testability Integration testing Mocks Dependency Injection |
|
April 22 | 7 | Static analysis Instructor Q&A |
|
April 24 | 8 | Logging and exception handling | |
April 29 | 9 | APIs | |
May 1 | 12 | Threading and Concurrency | |
May 6 | 10 | Class API standardization | |
May 8 | 11 | Writing Readable Code | |
May 13 | 13 | Web server & Distributed system architecture Anti-patterns |
|
May 15 | - | Midterm | |
May 20 | 14 | Performance Capacity planning Profiling |
|
May 22 | 15 | Invariant testing Monitoring |
|
May 27 | - | Memorial Day | |
May 29 | 16 | Documentation Team structure Postmortems |
|
June 3 | 17 | Deployments Experiments Launches UX Design Guest |
|
June 5 | 18 | Team overviews | |
June 13 | - | Final, 11:30am-1:30pm |