CSS 490C: Special Topics — Tactical Software Engineering (Winter 2015)

[top]

New

[top]

Syllabus

Full syllabus: http://courses.washington.edu/css490/2015.WinterC/syllabus.html

Tentative schedule: syllabus.html#schedule

Course Description

Software engineering is about predictably delivering software systems of finite quality, on a finite schedule, for finite cost. Developing software remains a challenging activity, with constant pressure to do it better, faster, and cheaper.

A traditional software engineering course typically discusses requirements gathering, architectural diagrams, estimation, scheduling, process, and project management. In general, it is about the strategy of reliably delivering software in resource-constrained environments, often making tradeoffs, between quality, time, and cost.

This course focuses on the challenges of implementation. We will develop a modest distributed application in the Go programming language using some of the following tactics to manage the complexity of modern large-scale software systems: change management, automated build systems, unit testing, bug tracking, code reviews, logging & logs analysis, debugging, refactoring, automated deployment, monitoring, load testing, and load balancing.

It's all about that code.

[top]

Discussion Board

A discussion board has been created: https://catalyst.uw.edu/gopost/manage/morrisb9/38655

[top]

Assignments

Submit assignments to the course dropbox: https://catalyst.uw.edu/collectit/dropbox/morrisb9/33892

[top]

Lecture Notes

Lecture notes and supplemental materials will be posted here as instructor time permits and may be incomplete.

#
Lecture #1
  • introduction
  • goals & non-goals
  • Go programming language
Lecture #6
  • midcourse correction
  • discussion of assignments
Lecture #11 (no notes)
  • simple load balancer (reverse proxy)
    • manual deployment
  • solution to assignment 3
Lecture #16
Lecture #2
  • introduction (cont.)
  • Go (cont.)
Lecture #7
  • refactoring
  • more on concurrency
Lecture #12 (no notes) Lecture #17
Lecture #3
  • source code management
Lecture #8
  • code reviews
  • thread pools
Lecture #13: President's Day (no notes) Lecture #18
Lecture #4
  • testing
Lecture #9 (no notes)
  • review assignment 3
Lecture #14
  • decorators (wrappers)
  • monitoring
  • deployment
Lecture #19
Lecture #5: Martin Luther King Day (no notes) Lecture #10
  • bug/feature tracking
  • more on templates
  • mutexes vs. channels
  • interface design: counters
Lecture #15 Lecture #20
[top]

Resources

Under construction.

Engineering

Software Engineering

Go

Git

Technical Debt & Refactoring

Bug Tracking

C++

XKCD

You can learn a lot about software engineering from selected xkcd comics:

Other

Books

[top]

Additional Advice

Coming soon...