CS518 is a graduate course teaching principles of developing distributed systems. We cover approaches that use distributed object and component middleware, aspect-oriented programming, and service-oriented architectures. CS518 is a programming-intensive course and requires a term paper.