2. Course Outline

2.1. Overall Outline of Topics (subject to revision)

  • organization, motivation, introduction (1 week)

    • what makes software good?

    • requirements: functional vs. nonfunctional

    • the importance of testing

  • basics of object-oriented programming (2 weeks)

    • semantics: reference vs. value, equality vs. identity

    • types and classes: relationships, polymorphism

    • code organization: member access, packages/namespaces

  • agile development process (1 week)

    • overview

    • testing

    • refactoring

    • continuous integration and delivery

  • object-oriented design principles (2 weeks)

    • overview

    • SOLID

    • designing with interfaces

  • agile object-oriented modeling (2 weeks)

    • main UML diagrams: class, state machine, sequence

    • archetypes and colors

  • software design patterns (2 weeks)

    • key patterns from HFDP

    • key idioms from EJ3e

  • concurrent programming (3 weeks)

    • events

    • threads

    • sharing

  • distributed programming (1 week)

    • overview and principles

    • connecting to web services

2.2. Typical structure of a weekly session

  • EJ3e or HFDP topics

  • project discussion and related topics

  • pair/group presentation or other activity

2.3. Typical assignments over a two-to-three-week period

  • reading

  • listening to SE Radio episodes

  • programming project