Great designs come from great designers. Software construction is a creative process. — F.P. Brooks, The Mythical Man Month, 1975
  1. Software Design

    1. Software design — Focus on the “Overview” and “Design Concepts” sections.

      1. Design is a modern buzz word. Why is it such an important concept/practice for the 21st century?
      2. Identify and explain Booch’s four basic principles of (object-oriented software) design.
      3. Booch doesn’t mention another familiar design principle, information hiding. Explain how this principle is related (or not related) to Booch’s four principles.
    2. Software design patterns — Focus on the introduction, the “History” and the individual patterns listed below.

      1. What is a design pattern?
      2. From whose work did the original idea for software design patterns come and who made the connection to software design?
      3. Be familiar with the following common design patterns:
        • Factory method
        • Singleton
        • Adapter
        • Facade
        • Iterator
        • Observer
    3. No Silver Bullet — This entire paper is work reading, but focus on the questions below.

      1. Does software have an analog to Moore’s law?
      2. Compare and contrast essential and accidental issues.
      3. What approaches to software development appear to Brooks to be the most promising? Are these approaches more compatible with traditional or with agile methods?
      4. How would you summarize Brook’s thesis in one or two sentences? Do you agree with him?
  2. Design Modeling

    1. UML Class Diagrams
      1. What are the basic building blocks of a class diagram, that is, what do the nodes and arcs represent?
      2. How does a class diagram represent the inter-class relationships commonly referred to as is-a and has-a?
      3. How do you represent multiplicity on association links?
  3. Technology Stack

    1. Refactoring — Be able to explain the purpose of refactoring a software system.
    2. JavaScript modules — In the lab, we’ll be modularizing the code from the previous lab, so it would be good to review the first sections of this reference, from “Introducing an example” through “Importing features into your script”.