This study path navigates the intellectual landscape of Software Design and HCI, beginning with the fundamental models of computation and progressing through the critical examination of programming paradigms and the cognitive aspects of design. It culminates in a forward-looking perspective on how notation and AI shape our interaction with computing systems, preparing learners to innovate at the research frontier.

This lecture establishes the foundational understanding of computational processes through the substitution model, essential for grasping how software executes and forms the basis for all subsequent design considerations.
Building on the understanding of basic computational models, this lecture introduces critical vocabulary for diagnosing and mitigating accidental complexity, a crucial skill for designing robust and maintainable software systems.
With a grasp of complexity, this lecture shifts focus to the cognitive process of design, advocating for deep, uninterrupted thought to decompose problems effectively, which is vital for architecting elegant solutions.
Leveraging insights into design thinking, this lecture critically examines historical programming paradigms and their limitations, providing context for understanding the evolution and future directions of software development.
Expanding on the critique of programming paradigms, this lecture highlights the profound impact of notation on computing systems, demonstrating how expressive tools shape our ability to design and interact with software.
Finally, this lecture offers an epistemological perspective on AI's impact on programming, challenging current narratives and prompting critical thought about the future of human-computer interaction and software design.