This course provides an introduction to autonomic and self-aware computing. It concentrates on the self-managing and self-awareness properties of computing systems, their architecture, and the adaptation and decision making needed for systems to continuingly adapt to changing environments. The vision for autonomic computing is described, how autonomic computing differs from automated and autonomous systems, as well the self-awareness properties and biological inspiration for autonomic systems. Architectures of autonomic systems are covered, which includes autonomic managers that provide the self-management for autonomic systems. Adaptive technology is also covered as well as what makes an autonomic system self-aware. Applications of autonomic computing are discussed, including security and resiliency applications, and how autonomic computing uses and is applied to cloud computing. A project that provides autonomic capabilities to a IoT device, industrial control system, or other system of the student’s choosing will be ongoing throughout the course that provides application of the theories and concepts from the lectures. There will be weekly readings and discussions, with bi-weekly assignments that go into depth on selected topics that also contribute to the projects.