Syllabus

Course Meeting Times

Lectures: 2 sessions / week, 1 hour / session

Recitations: 2 sessions / week, 1 hour / session

Objectives

The objectives of this course are that, by the end:

  1. You will be able to articulate and apply principles of engineering sensibility: simplicity, safety from bugs, ease of understanding, readiness for change.
  2. You will have a solid grasp of, and ability to apply, key software engineering ideas, including interfaces, representation invariance, specifications, invariants, data abstraction, design patterns, and unit testing.
  3. You will be able to design, implement, and test a small- to medium-scale software system (thousands of lines of code, multiple modules).
  4. You will have experience developing software collaboratively in a team.
  5. You will have experience with modern programming tools (e.g. Eclipse, Subversion, JUnit) and modern programming technologies (e.g. I/O, regular expressions, network sockets, threads, GUIs).

Course Elements

Lectures

There are two 1-hour lectures each week. You are expected to attend all the lectures and to participate actively in discussions.

Recitations

There are two 1-hour recitations each week. You are expected to attend all recitations and participate actively.

Text

There is no course text, but lecture notes will be posted online.

Problem Sets

To consolidate your understanding of the lecture ideas, you will do eight problem sets, involving both design and implementation work. Problem sets will be done individually.

Code Review

After each problem set submission deadline, there will be a 3-day code-reviewing period when other students, staff, and alumni will give you feedback about the code you submitted, using a web-based system. You will be expected to participate in this process by reviewing some of your classmates' code. More details about objectives and guidelines for the code reviewing process can be found here.

Returnin

You have the option of revising and resubmitting problem sets to try for a higher grade. More details about how to do it can be found here.

Projects

You will complete two small software development projects, each of which goes all the way from specification and design to coding and testing. All projects will be done in teams of three students. You'll have the opportunity to choose whom to work with, and we'll do our best to honor your choices. Any pair of students, however, will only be allowed to work together on a single project. Each team member is required to participate roughly equally in every activity (design, implementation, test, documentation), and we may ask for an accounting of what each team member did. Each project will have a deliverable after one week (usually an initial design and some initial code), and a final deliverable on the deadline. A single grade will be assigned to all students in the project.

Team Meetings

During the projects, you and your project team will meet with your TA to discuss the work. Your TA will assign a grade based in part on this meeting. Team meetings will usually be scheduled during lecture or recitation times that will be reserved for this purpose.

Quizzes

There will be two quizzes, on dates specified on the course calendar. Each quiz will be comprehensive, drawing on any lecture and recitation topics covered up to that point in the course, so Quiz 2 may include topics that were already covered on Quiz 1.

Grading

The relative contributions of the various elements to your grade are:

  • Quizzes: 20%. Q1 and Q2 have equal weight.
  • Problem sets: 40%. PS0 is worth half as much as PS1-PS7.
  • Projects: 30%. Project 1 is worth 12%, and Project 2 is worth 18%.
  • Participation: 10%. The participation grade will be determined by your participation in recitations, code reviewing, lectures, and the online Piazza forum (roughly in that order of precedence).

Lateness and Extensions

To give you some flexibility for periods of heavy workload, minor illness, absence from campus, and other unusual circumstances, you may request limited extensions on problem set deadlines, called slack days. Each slack day is a 24-hour extension on the deadline. You have a budget of 5 slack days for the entire semester, which you may apply to any combination of problem sets. You can use at most 3 slack days for a given problem set; after three days, whatever is in your Subversion repository is what we will grade.

The grading process grades what you've submitted by your extended deadline, but the code reviewing process pays no attention to your extension. We will ask people to review whatever code is in your Subversion repository at the original deadline. So even if you request an extension, you should commit as much as you can before the original deadline, so that your code reviewers have something to look at. But you yourself must wait to review other people's code until after your extended deadline. Looking at other students' code before handing in an individual problem set is a violation of the course collaboration policy (below).

Slack days are atomic; you can't chop them up into slack hours or minutes. If you choose to use a slack day because you're struggling with an assignment, GO TO BED AND SLEEP, and get help in the morning. Seriously, that's why the smallest unit is a day.

Slack days apply only to individual problem sets, not to team projects.

Collaboration

In line with the Departmental Guidelines Relating to Academic Honesty, here are our expectations regarding collaboration and sharing.

For the team projects, you are encouraged to collaborate with your partners on all aspects of the work, and each of you is expected to contribute a roughly equal share to design and implementation. You may reuse designs, ideas and code from your own work earlier in the semester (even if it was done in a team project with a different partner). You may also use material from external sources, so long as: (1) the material is available to all students in the class; (2) you give proper attribution; and (3) the assignment itself allows it. In particular, if the assignment says "implement X," then you must create your own X, not reuse someone else's.

Problem sets are intended to be primarily individual efforts. You are encouraged to discuss approaches with other students but your write-up must be your own. You should not make use of any written solutions or partial solutions produced by others. Material from external sources can also be used with proper attribution, but only if the assignment allows it. You may not use materials produced as course work by other students in the course, whether in this term or previous terms, nor may you provide work for other students to use.

Copying work, or knowingly making work available for copying, in contravention of this policy is a serious offense that may incur reduced grades, failing the course and disciplinary action.