• Course Number: 01:198:417
  • Course Type: Undergraduate
  • Semester 1: Fall
  • Semester 2: Spring
  • Credits: 4
  • Description:

    Provides an introduction to design principles and concepts of distributed computer systems. The course covers a broad spectrum of topics encompassing system architecture, software abstractions, distributed algorithms, and issues pertaining to distributed environments such as security and fault tolerance.

    Topics will range from the theoretical to the practical with a strong emphasis on the practical, such as client-server programming, remote procedure/method calls, multicasting, firewall design, distributed file systems, machine virtualization, clustering, cryptography, and authentication protocols.

  • Syllabus: https://www.cs.rutgers.edu/~pxk/417/syllabus.html
  • Prerequisite Information:


    - A grade below a "C" in a prerequisite course will not satisfy that prerequisite requirement.

  • Course Links: 01:198:416 - Operating Systems Design
  • Topics:

    Core concepts covered will include data networking, group communication, distributed deadlocks, clock synchronization algorithms, distributed transactions, distributed shared memory and memory consistency models. 

  • Expected Work: Homework and programming assignments. Homeworks will be written assignments. Programming assignments involve writing a distributed program or a service to demonstrate functionality and or performance.
  • Exams: Three exams and a final examination
  • Learning Goals:

    Computer Science majors ...

    • will be prepared to contribute to a rapidly changing field by acquiring a thorough grounding in the core principles and foundations of computer science (e.g., techniques of program design, creation, and testing; key aspects of computer hardware; algorithmic principles).
    • will acquire a deeper understanding on (elective) topics of more specialized interest, and be able to critically review, assess, and communicate current developments in the field.
    • will be prepared for the next step in their careers, for example, by having done a research project (for those headed to graduate school), a programming project (for those going into the software industry), or some sort of business plan (for those going into startups).