6.170
Laboratory in Software Engineering
Spring 2013 · Software Studio
Topics
- Introduction & Web Basics
- Routing & Model-View-Controller Design
- Introduction to Data & Object Modeling
- Design Concepts
- Intro to JavaScript
- DOM
- Design Review for Project 2
- Software Development Methods
- Designing Dependable Software
- Team Pitches
- —
- MVP Demos
- Deployment
Readings
- The readings, in the form of short articles and papers, assigned for each class are listed in the table below. While there is no required textbook for the course, recommended books include:
- Fulton, Hal. The Ruby Way, Second Edition . 2nd ed. Addison-Wesley Professional, 2006. ISBN: 9780672328848.
- WEEK #: 1 · READING TOPICS: Introduction & Web Basics · READINGS: No readings assigned
- ———. “Model View Controller.” Chapter 14 in Patterns of Enterprise Application Architecture . Addison-Wesley Professional, 2002. ISBN: 9780321127426.
- In the second part, you will read about REST, a style of designing web applications proposed by Roy Fielding (also one of the original designers of HTTP and Apache Server). Focus on high-level concepts that distinguish REST from other styles of web application design, and do not worry too much about Rails-specific details. (The book was published in 2008, and Rails has evolved significantly over the years.)
- Jackson, Michael A. “Brilliance.” In Software Requirements and Specifications: A Lexicon of Practice, Principles and Prejudices . Addison-Wesley Professional, 1995, p. 20. ISBN: 9780201877120.
- In the last lecture, we looked at some basic design concepts that you should keep in mind while building your own applications. Continuing on the same thread, you will read a chapter from Brook’s seminal book, The Mythical Man-Month, in which he introduces the idea of “conceptual integrity” as the key quality of software design.
- Tony Hoare is an influential British computer scientist, perhaps best known for his invention of Quicksort. But he also made a number of long-lasting contributions to programming languages, software verification, and operating systems, for which he was awarded the Turing Award in 1980. The following lecture, which he gave during his acceptance of the award, contains many important lessons in programming language design that still remain relevant today (and sadly neglected by many designers).
- SELF is an influential language that inspired, among others, Javascript and its variants. Unlike Java or other class-based languages, SELF is based on the concept of prototypes , which involves making clones of objects instead of instantiating them. You will read an introductory paper on SELF by the designers of the language. Think about how SELF differs from Java or other languages that you are already familiar with, and some trade-offs between prototypes vs. class-based approach to programming.
- One thing you should always keep in mind while working on your next web app: It’s a piece of software that will be viewed and used by other human beings. Sounds obvious, right? Surprisingly, there are a lot of apps out there where it’s clear that the designer didn’t think too hard about how the user would interact with the site. Porter’s article introduces some basic principles that you should aim for when designing client-side interactions.
- Garrett, Jesse James. “Ajax: A New Appproach to Web Applications.” Adaptive Path , February 18, 2005.
- A modern incarnation of the problem that Dijkstra describes is sometimes called callback hell . Unless you are judicious about the use of callbacks, you could easily end up with a mess of Javascript code that’s difficult to understand and debug. Unfortunately, we don’t yet have a proven alternative that we can use to implement complex client-side interactions. Thankfully, not all is lost: Functional reactive programming (FRP) is a style of programming that has recently surfaced as a potential solution to the callback hell. The following article, written by the designer of a FRP language called Elm , introduces the problem with callbacks and describes how FRP might be used to fix it. Focus on the high-level ideas behind FRP; you do not need to understand the details of the Elm language.
- Dijkstra, Edsger W. “Go To Statement Considered Harmful.” Communications of the ACM 11, no. 3 (1968): 147–48.
- (Unfortunately, this particular article uses a racist idiom; in 1978, at the time of writing, there was less of a consensus that offensive references of this sort should not be used.)
- Brook’s famous book, The Mythical Man-Month , is full of gems that have had long-lasting impact on the field of software engineering since its publication in 1975. One of them hinted at a style of development that was ignored for many years, but has become very popular in the last decade or so — namely, agile development. In the chapter from his book, you will read about the idea of building a system to eventually throw away, which may seem counter-intuitive at first.
- Brooks, Frederick P., Jr. “Plan to Throw One Away.” Chapter 18 in The Mythical Man-Month: Essays on Software Engineering . Addison-Wesley, 1975. ISBN: 9780201006506.
- Duarte, Nancy. Resonate: Present Visual Stories that Transform Audiences . Wiley, 2010, pp. 110–15. ISBN: 9780470632017.
Fall 2005
Topics
- Introduction
- Object semantics
- Subclassing
- Specifications
- Testing
- Specification and testing
- Object model notations
- Introduction to ADTs
- ADT, rep exposure, and object model diagrams
- Representation invariants
- Abstraction functions
- Dependencies and decoupling
- Abstraction functions and representation invariants
- Exceptions
- Equality
- Polymorphism
- Equality and hashing
- Subtypes and subclasses
- True subtyping and the substitution principle
- Classes and interfaces
- Usability 1
- Usability 2
- Design patterns
- Design project experiences 1
- Design project experiences 2
- Project implementation and review
- Project implementation and review (cont.)
- Managing a small software team
- Guest Lecture - Joshua Bloch and Neal Gafter
- Demo fair
- Award presentations
Readings
- Liskov, Barbara, and John Guttag. Program Development in Java: Abstraction, Specification, and Object-Oriented Design . Reading, MA: Addison-Wesley, 2000. ISBN: 0201657686.
- Bloch, Joshua. Effective Java: Programming Language Guide . Reading, MA: Addison-Wesley, 2001. ISBN: 0201310058.
- Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software . Reading, MA: Addison-Wesley, 1995. ISBN: 0201633612. The seminal book on design patterns, usually referred to as the “Gang of Four book”. Organized as a catalog.
- Fowler, Martin. Analysis Patterns: Reusable Object Models . Reading, MA: Addison-Wesley Professional, 1996. ISBN: 0201895420. A book on object models of problems, organized in the style of the “Gang of Four book”. Notation differs slightly from the notation we’ll use, but that shouldn’t be a major obstacle.
- ———. Refactoring: Improving the Design of Existing Code . Reading, MA: Addison-Wesley, 1999. ISBN: 0201485672. A book on techniques for restructuring code to make it more readable, extensible, and maintainable without changing its meaning. Particularly helpful for those coming from a non-object-oriented background. Examples are presented in Java.
- Jackson, Michael. Software Requirements and Specifications . Reading, MA: Addison-Wesley and ACM Press, 1995. ISBN: 0201877120. A collection of short and entertaining essays on software development. One of the only books to explain clearly the difference between ‘requirements’ and ‘specifications’.
- Horton, Ivor. Beginning Java 2: JDK 5 Edition . New York, NY: Wiley Publishing, 2004. ISBN: 0764568744.
- Flanagan, David, and Brett McLaughlin. Java 1.5 Tiger: A Developer’s Notebook . Cambridge, MA: O’Reilly Publishing, 2004. ISBN: 0596007388. This book can also be read online on Safari through MIT Libraries (requires certificates).
- Bloch, Joshua, and Neal Gafter. Java Puzzlers: Traps, Pitfalls, and Corner Cases . Reading, MA: Addison-Wesley Professional, 2005. ISBN: 032133678X. It contains a very entertaining and thought-provoking collection of puzzlers that elucidate subtle aspects of Java.
- Eckel, Bruce. Thinking in Java . 3rd ed. Upper Saddle River, NJ: Prentice Hall, 2002. ISBN: 0131002872.
Sources
- Course catalogue ↗Historical OpenCourseWare
- MIT OpenCourseWare ↗Spring 2013
- MIT OCW calendar ↗
- MIT OCW readings ↗
- MIT OCW syllabus ↗
- MIT OCW calendar ↗
- MIT OCW readings ↗
- MIT OCW syllabus ↗
- Historical MIT OpenCourseWare offering. Named reading entries and schedule topics are automatically extracted from the linked source pages.
- Historical MIT OpenCourseWare offering. Named reading entries and schedule topics are automatically extracted from the linked source pages.