We rely on cloud computing---i.e., the practice of developing and using software services that run on top of rented, remotely-located software and hardware---in almost every aspect of society. We depend on it when shopping (e.g., Amazon), when conducting financial transactions (e.g., online brokers), when traveling (e.g., flight-booking software), when entertaining ourselves (e.g., Netflix), when collaborating at work (e.g., Google Docs), when getting medical diagnoses (e.g., radiology scans in the cloud), and even when playing games (e.g., Fortnite).
As a result, it is important that all members of society have a basic understanding of cloud computing. For example, Software developers must understand this because almost all modern software is developed for cloud-computing environments (e.g., to be portable across cloud providers, such as Google and AWS, who rent out equipment). Policy makers must understand it so that so that they can make informed decisions about cloud providers (e.g., who should be given access to users' data stored in the cloud providers' datacenters?) The general public must be aware of it so that they can evaluate policy decisions, make informed decisions about which clouds to use for their data, and have a sense of how the software and services they use in their everyday lives work.
This course will cover foundational aspects of cloud computing. We will discuss: 1) Why cloud computing has emerged as the dominant paradigm for developing and using software, 2) The software and hardware infrastructure that makes cloud computing possible, 3) How to program for cloud environments, and 4) emerging trends in cloud computing.
After completing this course, students will be able to:
- Articulate 1) why cloud computing has emerged as the dominant paradigm for computing in the 21st century, 2) current concerns and limitations with cloud computing, and 3) emerging trends in cloud computing.
- Understand, contrast, and evaluate the software and hardware technologies that form the basis of most cloud-computing environments. Examples of such technologies include: virtualization, distributed storage, databases, and cloud-specific debugging tools.
- Use various technologies for developing and running software in the cloud. These include: 1) Infrastructure-as-a-service tools to allow developers to launch virtual machines or containers, 2) Platform-as-a-service frameworks to allow developers to create applications using higher-level building blocks sold by the cloud providers , and 3) Frameworks for deploying distributed applications in the cloud, such as ISTIO.
The following are non-goals of this class:
- Do a lot of onerous problem sets
- Memorize tons of material
- Conduct original research in the cloud computing field.
- For undergraduates: COMP 40 (Machine Structure & Assembly Language Programming). Though not required, having taken COMP 111 (Operating Systems), COMP 112 (Networking), or COMP 117 (Internet-scale distributed systems) will help significantly.
- For PhD students and master's students: a graduate or undergraduate course in computer systems, networking, or distributed systems taken at any university.
- If you are not sure you have the background needed for this class, please email one of the instructors! We will meet with you to discuss your background, and, if necessary, the skills you should independently acquire to do well in this class. Our hope is that everyone in this class excels and is in a position to do so.
Evaluation goals & structure
The final course grade will be calculated as follows:
|Item||Percentage of final grade|
|Projects & assignments||30%|
|Extra credit / instructor discretion||5%|
Students will be assigned the following grades based on the percentages above.
|A||90 - 100%|
|B||80 - 89.9%|
|C||70 - 79.9%|
|D||65 - 65.9%|
I may make these grade intervals more generous, but I will not adjust them to be less so. I will likely use +/- grading.
Where should I look for important information?
- Course website: This website contains invaluable resources to help you with your project and paper critiques. It is also a living document that will be updated regularly throughout the semester.
- Piazza: All course announcements will be posted to the course discussion board on Piazza. Please check this board frequently and subscribe to new notifications.
Raja holds office hours from 4-5 pm on Mondays at Halligan Hall 211; Hifza holds office hours from 11 am-12 pm on Thursdays at Halligan Hall 209. You can also book an appointment via an email to meet with us.
Please come to office hours so that we can get to know every one of you. Valid reasons to come to office hours include, but are not limited to: chatting about the course, discussing any of the readings, discussing course projects, discussing research ideas or anything you find cool about the class, just wanting to say hi and introduce yourselves. To entice you to come to office hours, Raja will stock a copious supply of snacks in his office :).
- Attendance: We encourage you to attend class and participate in discussions. Doing so will help foster a lively, positive class environment for both you and your fellow classmates. However, attendance is not mandatory (apart from how it may affect your participation and paper presentation grades).
- Extensions & Late policy: We do not grant extensions for homeworks or any project-related material unless there are extenuating circumstances.
- Collaboration: Please talk to other people and share ideas!
Much of this class is collaborative. In particular, for all of the
aspects of the course, except the midterm and final, we strongly
encourage you to discuss ideas and obtain feedback on drafts from
friends, colleagues, and classmates.
- Projects: We expect you to work in teams of two. You may work individually if mandated by the class size. You may use or modify any open-source codebase as part of your project. The core of your code, the entirety of your writeups, and the entirety of your presentations must be written by you and your teammates. Each team member must contribute equally and their contributions must be explicitly listed in each of the project documents (code, writeup, presentation). If you feel that a team member is not pulling their weight or if you feel your teammates are assigning you insufficient work or inappropriate work, please come talk to us.
- In-class presentations: You will prepare slides on select topics and present them in class in teams of three. The core presentation must be created by you and your teammates and you must explicitly cite any external resources you use. Team members must speak for equal amounts of time during presentations. You are not allowed to adapt or use existing presentations on the topic that you find online. This is because we want you to have to think deeply about best to present ideas to the class; doing so will greatly enrich your own understanding of the material.
- Midterm & final: You must complete the midterm and final yourself and no collaboration is allowed.
- Academic Integrity: This course will strictly follow the Academic Integrity Policy of Tufts University. Students are expected to finish course work independently when instructed and to acknowledge all collaborators appropriately when group work is allowed. Submitted work should truthfully represent the time and effort applied. Please refer to Tufts' Academic Integrity Policy, available here.
Accommodations and wellness
- Accommodations for students with disabilities: Tufts and the instructors of this course strive to create a learning environment that is welcoming students of all backgrounds. Please see the detailed accessibility policy at Student Accessbiilty Services (SAS). The SAS handbok. may be especially informative. If you obtain an accommodation letter from SAS, I encourage you to discuss your accommodations and needs with me as early in the semester as possible. I will work with you to ensure that accommodations are provided as appropriate.
- Children in class: All exclusively breastfeeding babies are welcome in class as often as is necessary. For older children and babies, I understand that unforeseen disruptions in child-care often put parents in the position of having to choose between missing class to stay at home with a child and leaving them with someone you or the child does not feel comfortable with. While this is not meant to be a long-term child-care solution, occasionally bringing a child to class in order to cover gaps in care is perfectly acceptable.
- Student wellness: As a student, you may experience a range of challenges that can interfere with learning, such as strained relationships, increased anxiety, substance use, feeling down, difficulty of concentrating, and/or lack of motivation. These mental health concerns or stressful events may diminish your academic performance and/or reduce your ability to participate in daily activities. There are resources at Tufts to help. You can learn more about confidential health services available on campus here. For mental health emergencies, please contact the CMHS front office at 617-627-3360 during regular business hours or the counselor-on-call at 617-627-3030 after hours.
- In case of emergency: If you, a family member, or a close friend are experiencing an emergency or crisis: absolutely do not worry about contacting me until you have some free time. In collaboration with other university resources, we will take care of getting your course work back on track after the crisis has passed.
The course policies and course descriptions were informed by the New Computer Science Faculty Teaching Workshop, Michael Hughes' COMP-150 Bayesian Learning (Fall 2018) website, and Justine Sherry's 15-829 Programmable Networks (Fall 2018) website. The course syllabus is informed in part by Greg Ganger, Majd Sakr, and George Armvrosiadis's 15-719 Cloud Computing (Spring 2019) class, and Orran Krieger and Peter Desnoyer's Cloud Computing (Spring 2019) class. The course website's theme is based on Pelican Alchemy and Jason K. Moore's Mechanical Engineering Capstone Course at UC Davis.