This course covers topics on the engineering of computer software and hardware systems: techniques for controlling complexity; strong modularity using client-server design, virtual memory, and threads; networks; atomicity and coordination of parallel activities; recovery and reliability; privacy, security, and encryption; and impact of computer systems on society. We will also look at case studies of working systems and readings from the current literature provide comparisons and contrasts, and do two design projects. Students engage in extensive written communication exercises. Enrollment may be limited. This course is worth 4 Engineering Design Points.