Elements of software construction

Bachelor's degree

In Maynard (USA)

Price on request

Description

  • Type

    Bachelor's degree

  • Location

    Maynard (USA)

  • Start date

    Different dates available

This course provides an introduction to the fundamental principles and techniques of software development that have greatest impact on practice. Topics include capturing the essence of a problem by recognizing and inventing suitable abstractions; key paradigms, including state machines, functional programming, and object-oriented programming; use of design patterns to bridge gap between models and code; the role of interfaces and specification in achieving modularity and decoupling; reasoning about code using invariants; testing, test-case generation and coverage; and essentials of programming with objects, functions, and abstract types. The course includes exercises in modeling, design, implementation and reasoning.

Facilities

Location

Start date

Maynard (USA)
See map
02139

Start date

Different dates availableEnrolment now open

Questions & Answers

Add your question

Our advisors and other users will be able to reply to you

Who would you like to address this question to?

Fill in your details to get a reply

We will only publish your name and question

Reviews

Subjects

  • Construction Training
  • Programming
  • Team Training
  • Project
  • Materials
  • Construction
  • Design
  • Testing

Course programme

Lectures: 2 sessions / week, 1.5 hours / session


Recitations: 1 session / week, 1 hour / session


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


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.


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.


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.


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.


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 taught. Explorations will be done individually.


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.


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.


There will be no quizzes or final exam.


The relative contributions of the various activities to your grade are: explorations 20%, problem sets 30%, projects 40%. The remaining 10% of your grade will be at the discretion of the teaching staff, and will be determined in part by your participation in recitations and your performance in lab assignments. Late work will incur a penalty of 10 percentage points per 24 hours late, up to a maximum of 72 hours. Assignments that are more than 3 days late will not be graded at all.


In unusual or extenuating circumstances, you may be able to complete a project late without penalty, but only if you receive advance permission from your TA. The further in advance you ask for an extension, the more likely it is to be granted. Obviously, exceptions are made for emergencies; we don't expect you to get advance permission if you get sick suddenly, but remember that a health problem can only be considered for an unapproved extension if you present a doctor's note.


In line with the Departmental Guidelines Relating to Academic Honesty, here are our expectations regarding collaboration and sharing. For the 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 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, explorations and lab assignments 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 again only if the assignment allows it. You may not use materials produced as course work by 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.


Don't show me this again


This is one of over 2,200 courses on OCW. Find materials for this course in the pages linked along the left.


MIT OpenCourseWare is a free & open publication of material from thousands of MIT courses, covering the entire MIT curriculum.


No enrollment or registration. Freely browse and use OCW materials at your own pace. There's no signup, and no start or end dates.


Knowledge is your reward. Use OCW to guide your own life-long learning, or to teach others. We don't offer credit or certification for using OCW.


Made for sharing. Download files for later. Send to friends and colleagues. Modify, remix, and reuse (just remember to cite OCW as the source.)


Learn more at Get Started with MIT OpenCourseWare


Elements of software construction

Price on request