Distributed Systems
UB Catalog information for CSE 486
This information is advisory only. The authoritative course description and requirements for a given semester are defined by the course syllabus.
Overview
This course is an undergraduate course titled Distributed Systems. It is a project-heavy course.
Offerings
Spring 2024, Spring 2025Current Offering: Spring 2025
Lecture | 000: MWF 11:00-11:50, Knox 110 |
---|---|
Office Hours | TBD |
TA Office Hours | (See Piazza) |
Prerequisites
All students are expected to have a thorough understanding of data structures and fundamental algorithms, as well as meaningful familiarity with the Internet architecture and networking (including the TCP/IP protocol suite) and operating systems concepts. In addition, students are expected to have done some systems programming (e.g., using threads and sockets). Students must either have some experience in the Go programming language or be capable of picking it up rapidly.
Students must have completed CSE 220 and CSE 250 (or equivalent courses at another institution with appropriate articulation).
Text
The required text for this course is Distributed Computing: Principles, Algorithms, and Systems by Ajay D. Kshemkalyani and Mukesh Singhal, ISBN 978-0-521-18984-2. It is available to all UB students in digital form from the UB libraries.
Policies
The ultimate authority for course policies is the course syllabus. However, my general academic integrity policy can be found here and my list of policies is here.
Course Structure
This is a project-heavy course. Students will be expected to implement several non-trivial applications in the Go programming language. Projects will make up about half of the final course grade, with the remainder being quizzes and exams.
There will be one midterm examination and one final examination.
There are no graded homeworks for this course. Homeworks may be assigned to help students understand the material, and any material covered in homeworks may appear on exams or quizzes.
Programming Assignments
All programming assignments for this course will be in Go. The version of Go used for evaluation this semester is 19. Go is a systems programming language with a flavor not dissimilar to C, but providing much higher-level support for strings, buffers, message passing, and concurrency.
All projects in this course must compile and run correctly in the grading environment used for this course, which is Ubuntu 22.04 LTS. Students may use a virtual machine to provide an appropriate development environment if they do not have an otherwise suitable system. Note that while students typically find success developing on Linux and macOS, students using Windows (even in WSL2) frequently experience difficulty and performance problems.
Students considering this course or wishing to do some preparation before the semester begins may wish to complete A Tour of Go to get a feel for the Go language and the programming that will be required in this course.
Preparing for This Course
Students wishing to prepare for this course may wish to review this advice for succeeding in CSE 486/586. In particular, undergraduate students who have not yet taken several 3xx/4xx courses and graduate students who do not have a strong practical background in systems programming or implementation will find extra resources to review prior to the semester there.
Students unfamiliar with the Go language who do nothing else will wish to do A Tour of Go before the semester begins.