15-749: Engineering Distributed Systems

Spring 2014

Professor Mahadev Satyanarayanan & Jan Harkes



Computing has changed beyond recognition in half a century, from the room-filling mainframes of the 1960s to today's smartphones and wearable devices.  Networks have also changed dramatically: from the 300-baud dialup modems of the early networking era to gigabit LANs, Wi-Fi and 4G today.    Who knows what changes are in store for us over the next half century?  Astonishingly, in spite of this tremendous change in hardware technology over time,  a small core set of techniques for building distributed systems has emerged and remained surprisingly stable and applicable across many system layers.    Many flavors of these  techniques exist, and they continously evolve over time to reflect changing trade-offs in the design space.  What are these core techniques, and how can we leverage them in creating distributed systems today and in the future?     That is the central question addressed by this course.  Students will acquire the knowledge base, intellectual tools, hands-on skills and modes of thought needed to build well-engineered distributed systems that withstand the test of time, growth in scale, and stresses of live use. Strong design and implementation skills are expected of all students.  The course assumes a high level of proficiency in all aspects of operating system design and implementation.  A substantial project component is an integral part of the course.




Policy on Academic Integrity

The Carnegie Mellon University Policy on Academic Integrity applies to this course.    All students are expected to carefully review this policy and to adhere to it for all aspects of this course.  Additional information can be found at this helpful CMU web site that explains why academic integrity is so important. 

Last updated  02/14/2014  by Satya