The World Wide Web, one of the most important developments of our time, is a unique and in many ways innovative distributed system. This course will explore the design decisions that enabled the Web's success, and from those will derive important and sometimes surprising principles for the design of other modern distributed systems.
We will introduce and draw comparisons with more traditional distributed system designs, including distributed objects, client/server, pub/sub, reliable queuing, etc. We will also study a few (easily understood) research papers and some of the core specifications of the Web. Specific topics to be covered include: global uniform naming; location-independence; layering and leaky abstractions; end-to-end arguments and decentralized innovation; Metcalfe's law and network effects; extensibility and evolution of distributed systems; declarative vs. procedural languages; Postel's law; caching; and HTML/XML/JSON document-based computing vs. RPC.
The purpose of this course is not to teach Web site development, but rather to explore lessons in system design that can be applied to any complex software system.
Classes will meet Tuesdays and Thursdays from 4:30 PM - 5:45 PM US Eastern time, in room Halligan 111A. We do not expect that classroom sessions will be streamed or recorded; students are expected to attend all classes in person.
Instructor, TAs and Getting Help
This course will be taught by Professor Noah Mendelsohn. Noah's office hours will be listed on his home page. Our teaching assistant for the course is Noah Martin. (Yes, both the Professor and the TA are named Noah. Since much of this course Web site is shared from year to year, when you see a reference just to "Noah", assume that means Noah Mendelsohn.) Email sent to email@example.com will reach both of us. When you do need to contact Noah Mendelsohn only, you can e-mail him at firstname.lastname@example.org.
There are no books that you are required to buy, but several you might want to consider. Your alternative is to use Safari Books Online, an online eBook service to which Tufts students have access. Information about books and using Safari is available on the CS 117 Information Page.
Collaboration, use of Others' Work, and Academic Misconduct
Students should read the policy on Academic Integrity available at http://students.tufts.edu/student-affairs/student-life-policies/academic-integrity-policy. Absolute adherence to the Code of Conduct is demanded of the instructors, teaching assistants, and students. This means that no matter the circumstance any misconduct will be reported to Tufts University. You are especially warned that code is not to be shared, except with your partner(s), and all quotations in your written work must be properly set off with quotation marks and appropriate bibliography citations.
You are strongly encouraged to discuss problems and to brainstorm with friends and colleagues. This course is about broad architectural themes in computing systems. You will learn them much better if you discuss and debate them with other students, and with the course staff. However, except in cases where an assignment specifically allows you to collaborate with others or to adapt existing code, the code and other written work you submit must be entirely your own.
In all cases where you use or adapt the materials of others, you must respect applicable copyrights. In general, such copyrights do not prevent you from using small fragments of a line or two of code or text, but for anything larger, you must make sure that the license accompanying the code or written work allows you to copy it.
Every source of assistance must be acknowledged in writing. There is never a penalty for seeking help with a problem, but help must be acknowledged, and you must only submit work that you completely understand. You will be graded on what you have learned and on the quality of your own contributions. If you have any doubt as to whether what you're doing is appropriate it is your responsibility to check in advance!
Programs and written material you prepare for this course must not be posted online, except when the assignment specifically requires that you do. For example, it is not acceptable to post your assignment solutions for public access on GitHub. You are encouraged to submit general programming questions to online forums such as Stack Overflow. Questions about particular homework problems must never be posted to public fora — send an e-mail to the course staff.
(This policy is adapted from the one used by Ming Chow for the summer 2012 edition of COMP-15.)