Weekly Schedule

Permanently under construction...please stay tuned!

Overall Outline (subject to revision)

  • agile development (2 weeks)
    • overview
    • testing
    • refactoring
  • object-oriented design principles (4 weeks)
    • overview
    • SOLID
    • designing with interfaces
  • agile object-oriented modeling (2 weeks)
    • process
    • UML notation
    • archetypes and colors
  • software design patterns (2 weeks)
    • key patterns from APPP and HFDP
  • concurrent programming (3 weeks)
    • threads
    • sharing
    • events
  • distributed programming (2 weeks)
    • overview and principles
    • connecting to web services
Typical structure of a weekly lecture
  • APPP topic
  • concurrent/distributed programming topic
  • project discussion
  • pair/group presentation or other activity
Typical assignments over a two-to-three-week period
  • reading
  • listening to SE Radio episode
  • programming project

Week 1

Lecture

Reading/Podcasts

  • APPP chapters 1 through 6
  • Programming Android chapters 1 and 2
  • SE Radio episodes 46 and 55 on refactoring
  • SE Radio episode 167 on automated testing

Week 2

Labor Day: no class

Week 3

Lecture

  • data structures
    • linear vs. nonlinear
    • position-based vs. policy-based (see also here)
    • performance
    • tying data structure choices to requirements
  • data abstraction
    • addressing: pointers, references
    • aggregation (product types): structs, records
      • example: node in a linked list
    • variation (sum types): tagged unions, multiple implementations of an interface
    • example: mutable set abstraction
      • add element
      • remove element
      • check whether an element is present
      • check if empty
      • how many elements
    • several possible implementations
      • reasonable: binary search tree, hash table, bit vector (for small underlying domains)
      • less reasonable: array, linked list
  • requirements
    • functional
    • nonfunctional, e.g.
      • testability
        • most important nonfunctional requirement
        • allows testing whether functional requirements are met
        • good architecture often happens as a side-effect (APPP pp. 36-38)
      • performance
      • scalability
        • e.g. performance for large data sets: asymptotic order of complexity (big-Oh) in terms of input size n
      • reliability
      • maintainability
      • static versus dynamic NFRs

Reading/Podcasts

  • same as week 1

Week 4

Lecture

  • refactoring
    • introduction: code smells and refactoring
    • real-world significance
      • most projects legacy/evolve over time
      • new members join existing teams
      • smells arise
      • economy of scope (requirements) versus economy of scale (standardization)
  • agile design: process, not event
    • design smells: usually subjective, sometimes objective
      • rigidity: difficult to change
      • fragility: easy to break
      • immobility: difficult to reuse
      • viscosity (of software, of environment): it is difficult to do the right thing
      • accidental complexity: e.g., overdesign
      • needless repetition
      • opacity
    • SOLID design principles
  • brief design/architecture glossary
    • language construct
    • library
    • framework
    • design idiom
    • design pattern
    • design principle
    • domain-specific language
    • software architecture
    • separation of concerns
  • software execution models/interactivity
    • batch/transformational
    • event-driven
      • interactive
      • reactive
  • Android framework overview: overviewmore detailed intro

Reading/Podcasts

  • APPP chapters 7, 8, and 12
  • Programming Android chapters 3 through 5
  • Android app fundamentals
  • SE Radio episode 2 on dependencies
  • SE Radio episode 150 on software craftspersonship

Week 5

Lecture

Reading/Podcasts

  • same as week 4

Week 6

Test 1 (last hour of class)

Lecture

Reading/Podcasts

  • APPP chapters 21, 22, and 23
  • Programming Android chapters 6 and 7

Week 7

Fall Break: NO CLASS

Week 8

Lecture

  • announcements: devices, grading/projects, ITA, Intel, ChiWIC, etc.
  • test 1 discussion (in detail)
  • modeling
  • project 1b discussion

Reading/Podcasts

  • Programming Android chapter 6 section on concurrency
  • APPP chapters 13, 14, 15, 19
  • SE Radio episode 12 on concurrency
  • SE Radio episode 65 on embedded systems

Week 9

Lecture

Reading/Podcasts

  • APPP chapters 9, 10, 11, 19
  • SE Radio episode 51 on design by contract

Week 10

Lecture

Reading/Podcasts

  • same as week 9

Week 11

Test 2 (last hour of class)

Lecture

Reading/Podcasts

  • same as week 10
  • APPP chapters 23 and 31
  • SE Radio episode 1 on design patterns

Week 12

Lecture

    Reading/Podcasts

    • same as week 11

    Week 13

    Lecture

    Reading/Podcasts

    • same as week 11

    Week 14

    Lecture

    • design patterns recap
      • separation of concerns in an object model
        • structure
          • arrangement -> Composite
          • data -> genericity
        • creation -> decoupling client from concrete structure
        • behavior
          • enhancements -> Decorator, role objects
          • traversal -> Iterator
          • processing -> Visitor
      • examples
    • modeling dynamic, event-driven behavior
    • concurrency: system runs in parallel with its environment
      • overview
      • physical versus logical concurrency
      • I/O-bound versus CPU-bound activities
      • conflicting goals: safety and liveness
      • run-to-completion versus coordination
      • fairness, starvation, deadlock

    Reading/Podcasts

    Week 15

    Test 3 (last hour of class)

    Lecture

    • announcements
      • TCE reminder
      • please provide detailed and candid feedback either on TCE form or by email
        • book(s)
        • choice and order of topics
        • projects
        • etc.
      • project 2d optional (to appear shortly)
      • project 2c discussion
    • concurrency: system runs in parallel with its environment
      • overview
      • physical versus logical concurrency/nondeterminism
      • I/O-bound versus CPU-bound activities
      • race conditions
      • conflicting goals: safety and liveness
      • run-to-completion/share-nothing (easier) versus coordination/shared resources (harder)
      • implementation: processes, threads, reactor pattern
      • Android AsyncTask (see prime number checker example below)
        • progress reporting
        • action upon completion
        • cancelation
        • can choose size of thread pool
    • distributed computing (mostly from a mobile + cloud perspective)
      • overview
      • performance: throughput, latency, jitter
      • cloud 
        • almost unlimited computational resource (see paper linked below)
        • introduces latency and other performance concerns
        • usually need local caching for usability (e.g., Google Maps)
      • example

    Reading/Podcasts

    • announcements: ACM presentation, test 3 grading, team effort questionnaire, presentation/app questionnaire
    • brief project 2d discussion
    • concurrent and distributed computing wrap-up and references
    • principles: fairness, starvation, deadlock
    • performance: throughput, latency, jitter
    • project presentations (max 5-6 minutes per team)
      • overall app architecture
      • terrain architecture
        • support for traversal by actor
        • support for 2d presentation
      • brief demo
        • need VGA port or adapter
        • emulator running on your laptop
        • or device connected to your or my laptop via AirDroid app
      • reflection
        • journey
        • main insights
        • main challenges
    • app download
      • please use your Box account to share your apk file with the class, ideally before the demo session
    Comments