Course Meeting Times
Lectures: 2 sessions / week, 1.5 hours / session
Recitations: 1 session / week, 1 hour / session
This is a course in software engineering, with an emphasis on design. It focuses on building web applications and services because of their obvious relevance to students in building practical skills, and because there are so many readily available examples to study.
In addition to teaching the fundamental notions of structuring a web application, and how to write modular and elegant code, the course emphasizes behavioral and conceptual design: that is, designing the external behavior of the software rather than its internal structure. We believe that this aspect of design is the most important in practice, the least well-understood by MIT students, and the one that is hardest to acquire in standard industrial settings.
By the end of this course, you should expect to:
- Have improved your ability to analyze problems, explore and invent designs, present your work, and critique the work of others
- Have developed a strong grasp of key software design notions (in particular, conceptual modeling, decoupling and abstraction) and improved skills in designing key components of a software system
- Be able to build medium-scale web applications using standard technologies, conducting all phases of development from problem analysis to deployment
- Have experienced the benefits and challenges of working in a team
You will complete one introductory project, three solo projects, and one team project. Each project will be conducted in phases through which you will build an application incrementally. Key concepts that are needed to complete the project will be taught in class; the technologies you need will be taught through tutorials in recitation. All project work will be committed to GitHub. In the final phase of each project, you will write a brief critique of your own work, and in addition, a fellow student's work.
For most class sessions, you will be asked to read one or more short articles in advance. The class will begin with a tiny "nanoquiz" comprising a few multiple choice questions about the readings.
Collaboration and Grading
|Nanoquizzes + Participation||10%|
|Coding + Design Work||20%|
The measure of the acquired skills in coding and design work will be computed by selecting the best grades received for the design and code portions of the solo projects (Projects 1, 2, and 3).
Each student has 3 slack days for the solo projects that allow work to be submitted late without penalty. You may use the total of 3 days across the 3 projects in any way you wish. If you plan to use a slack day, you must insert a file with the name SLACK_DAY.txt in the top level directory of your repository that contains a note indicating how many days you are taking on that project. This must be done before the due date but may be updated (adding additional days) as necessary. Delays due to medical reasons should be declared as slack days in the same way, and will not count against your slack day credit if a doctor's note is provided. No other extensions will be given except under very unusual circumstances.
The solo projects are to be done individually though you may discuss your approach with fellow students, so long as (a) all written material is entirely your own, and (b) you explicitly acknowledge in your written materials who you talked to.
You are free to use any third-party code, whether as libraries or code fragments, and to adopt any ideas you find online or in books, so long as it is publicly available and appropriately cited (see the section on code in the MIT Academic Integrity Handbook for details). You may not use work produced by students in earlier offerings of this class. If you violate this policy, you can expect to be asked to drop the class (or worse). The team projects, of course, are intended to be fully collaborative.
The teaching staff of the course will endeavor to:
- Deliver content that is stimulating, practically useful and of long term intellectual value
- Encourage interaction during all class and recitation sections, and take all questions seriously
- Provide constructive and helpful feedback on student work in a timely fashion
- Assign grades in a fair and consistent way
- Take seriously suggestions about course content and structure
- Help students who feel overwhelmed or lacking in background, despite prerequisites
- Support and encourage full participation of all students
As a student, by taking this course, you agree to endeavor to:
- Attend all class sessions and participate enthusiastically
- Not use laptops and mobile devices during class for email and other distracting activities
- Share concerns and comments about the course with the lecturer
- Help create a sense of community by making forum postings anonymous only when absolutely necessary
- Do your fair share of work on your team project