Elements of Software Construction: Syllabus
Elements of Software Construction: Syllabus
Elements of Software Construction: Syllabus
Syllabus
Course Meeting Times
Lectures: 2 sessions / week, 1.5 hours / session
Objectives
The objectives of this course are that, by the end:
1. You will have the skills to develop a small to medium-scale software system from scratch: formulating and analyzing the problem to be solved;
exploring and articulating candidate designs; implementing in Java; and using testing and reasoning to ensure quality.
2. You will have a solid grasp of, and ability to apply, key software engineering ideas, including invariants, decoupling, and data abstraction.
3. You will be fluent in three essential and widely used design notations (state machines, module dependency diagrams, and object models) and able
to use them effectively in exploring and articulating problems and designs.
4. You will be familiar with a variety of standard design and implementation patterns (such as model-view-controller and client-server) and with some
popular technologies (such as Eclipse, JUnit, Subversion, Swing, HTTP, network sockets).
5. You will have a stronger inherent ability to make engineering judgments and pick the right tool for the task at hand; improved skills in design,
organization and analysis; an appreciation for the importance of simplicity and abstraction; and a greater awareness of risk and how to mitigate it.
6. You will have had some experience working collaboratively in a team.
Course Elements
Lectures
There are two 80-minute lectures each week. You’re expected to attend all the lectures and to participate actively in class discussions. To encourage a
collegiate atmosphere, we request that no laptops or phones be open during class. There is no course text.
Recitations
The teaching assistants will be leading one-hour recitations on Thursdays. You will be asked to select a time, and to attend the recitation at that time each
week.
Problem Sets
To consolidate your understanding of the lecture ideas, you’ll do three problem sets, one on each paradigm. Like projects, problem sets will involve both
design and implementation work, but the problems will be smaller and less open-ended. Problem sets will be done individually.
Projects
You’ll complete three 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. Collaboration is encouraged, although 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 involving exploring the problem and working on design issues), and a second, final
deliverable after the second week. Code will be handed in electronically (by committing in the repository before the deadline). For each of the
deliverables, your team will submit a single document (in hardcopy and in PDF in your repository) summarizing your design and answering any particular
questions posed in the project handout.
Explorations
A series of three case studies will be presented in lecture, in order to illustrate the concepts being taught on substantial examples. Before each case
study, you will implement a solution to the case study problem yourself, both to give you practice coding in Java, and to introduce you to the case study.
Your solution will be judged on the correctness and clarity of the code; you will (obviously) not be expected to use design ideas that have not yet been
Feedback
Team Meetings
You and your team will meet with your TA during your project to discuss the work. Your TA will assign a grade based in part on this meeting. A single grade
will be assigned to all students in the project.
Lab Assignments
Each project will be preceded by a lab assignment to help you get up to speed with the project’s technology. Lab assignments will be done individually. A
TA will formally check off that you have completed the lab during the session itself. The lab is also a time to chat informally with your TA about your
ongoing work and to look over your lab notebook. A team of LAs will be available in the lab to help you slay any technological monsters that impede your
progress.
Quizzes
There will be no quizzes or final exam.