- Quantum Architecture and Programming - Course and Lab (Jan 2022, Jan 2023)
- Compiler Construction - Lab (Jan 2022, Jan 2023)
- Systems for Machine Learning & Data Science - Course and Lab (Jan 2022)
- Principles of Programming Languages - Course and Lab (Aug 2022)
- Computer Architecture - Lab (Aug 2022)
Courses and their Objectives:
Quantum Architecture and Programming: The aim of this course is to start from the basics of quantum computing, but to go on to build strong quantum programming ability and even devising quantum algorithms or atleast being able to combine the classical and quantum algorithmic building blocks to solve real computing problems. Towards the latter, providing exposure to hybrid classical-quantum architectures and algorithms is an important goal of the course. In the course, I cover quantum basic gates, quantum circuits, quantum programming approaches, quantum compilers, hybrid (classical-quantum algorithms), hybrid classical-quantum architectures, quantum computing application focussed topics (such as quantum machine learning, quantum security, quantum simulation, etc.). This course has a strong programming focus, while providing an algorithmic and systems perspective on quantum computing.
Principles of Programming Languages: Rather than being consumers of programming languages, the course focuses on giving the students the skills and confidence to imagine and realize their own novel programming languages. In the course, I start by covering different computer programming paradigms such as functional programming, imperative programming, object oriented programming, etc. Other relevant topics covered include, program synthesis, probabilistic programming, reactive programming, type systems, etc. The course is designed to enable the student to ultimately design and implement their own domain-specific languages.
Systems for Machine Learning/Data Science: The primary objective of the course is to bring out and teach the systems aspects of machine learning/data science (ML/DS). Although there are many courses on ML/DS in the computer science curriculum, they typically focus more on the statistical and algorithmic aspects, this course distinctly focuses on the computation, memory, networking and storage resources, needed by foundational and (some) advanced ML/DS algorithms. In other words, the course will impart skills needed for understanding of the limits of ML/DS from a system resource consumption standpoint. Deep connections of ML/DS to systems topics such as data management, compilers, and architecture will be made through this course. The contents of the course therefore will give the students exposure to a range of future computer system design approaches, both theoretical and practical, for ML/DS.