Modern generative artificial intelligence tools are astonishingly effective at generating code, given natural language specifications. The software engineering industry is rapidly adopting these tools to improve engineers’ productivity: instead of writing all of their code themselves, many engineers are now effectively “team leaders”, managing a “team” of artificial intelligence tools. In this course, students will get hands-on experience in using such artificial intelligence tools for software engineering in a semester-long course project. Topics will include agents, requirements elicitation and specification in the AI era, AI code generation and how to ensure that AI-generated code is correct, and discussions of how other traditional software engineering practices like code review and static analysis can help with AI-assisted software engineering.
Prerequisite: Officially, none. Students will be expected to know how to program well enough to understand and debug code generated by an AI tool. Students without significant prior exposure to software engineering concepts (e.g., in CS 490 or an internship) will be expected to do additional background reading.
This course equips undergraduate students with the mindsets, habits, and practical skills necessary for lifelong learning, personal well-being, and professional growth in an AI-driven world. Through psychology, neuroscience, productivity science, leadership, and AI literacy, students learn to adapt, lead, and thrive amid rapid technological and societal changes.
Course Motivation
The era of AI offers immense opportunities but also brings anxiety, distraction, and uncertainty. Success now requires more than technical skills — it demands self-mastery: the ability to set meaningful goals, learn deeply, think critically, manage mental and physical well-being, and use AI as a powerful partner in learning and problem-solving.
This course guides students through that journey: beginning with motivation and mindset, progressing through practical skills like habit formation, study methodology, communication, and leadership, and culminating in how to self-learn and grow in the AI era.
The cybersecurity landscape in the cloud and mobile computing has moved away from simply trusting the operating system. For decades, security relied on the operating system kernel and its access control mechanisms to enforce process isolation and security policies. However, the single point of failure and massive Trusted Computing Base (TCB) has proven insufficient when faced with complex modern computing systems, and with a surge in sophisticated attacks targeting low-level software and hardware, such as speculative execution. Trusted Computing (also known as Confidential Computing) has emerged as a new field to solve this problem. The topics of this course will include virtualization, microkernels, hardware primitives (Intel SGX, ARM TrustZone, and Trusted Platform Modules (TPM)), speculative execution and side channels, and the use of trusted computing in secure AI/ML.
Prerequisite:
As a special topics course, this class has no official prerequisites. The students are expected to have taken operating system courses CS332 and CS350 or equivalent courses, the students are also expected to have c/c++ programming background from taking CS288 or equivalent courses.
Modern generative artificial intelligence tools are astonishingly effective at generating code, given natural language specifications. The software engineering industry is rapidly adopting these tools to improve engineers’ productivity: instead of writing all of their code themselves, many engineers are now effectively “team leaders”, managing a “team” of artificial intelligence tools. In this course, students will get hands-on experience in using such artificial intelligence tools for software engineering in a semester-long course project. Topics will include agents, requirements elicitation and specification in the AI era, AI code generation and how to ensure that AI-generated code is correct, and discussions of how other traditional software engineering practices like code review and static analysis can help with AI-assisted software engineering.
Prerequisite: Officially, none. Students will be expected to know how to program well enough to understand and debug code generated by an AI tool. Students without significant prior exposure to software engineering concepts (e.g., in CS 490 or an internship) will be expected to do additional background reading.
Human-robot interaction (HRI) is an interdisciplinary field that examines how humans and robotic systems perceive, communicate, and work with one another. As robots become increasingly integrated into manufacturing, healthcare, homes, and everyday environments, designing intuitive, reliable, and human-centered interactions is essential for successful deployment. This course introduces core concepts, theories, and current research trends in HRI, with an emphasis on designing, implementing, and evaluating interactions between humans and robotic technologies. Topics include (1) human-centered interfaces, (2) human-robot teamwork and collaboration, (3) evaluation methods in HRI, (4) robot learning from human demonstrations, and (5) multi-human multi-robot interaction. Students will explore these areas through critical literature readings, in-class discussions, hands-on programming and analysis assignments, and a final project that applies HRI principles to a real or simulated robotic system.