Teaching

Courses


  • Graduate course: CS4570 - Machine Learning for Software Engineering (Editions: TA/lecturer in 2020 to 2022, responsible professor for 2023, 2024, 2025, 2026), ~100-140 students, TU Delft.
  • Undergraduate course: TI3115TU - Databases and Software Engineering minor (Editions: lecturer for 2024, responsible professor for 2022, 2025, and 2026), ~160-220 students, TU Delft.
  • Undergraduate course: Software Engineering Methods (lecturer for 2024 edition), ~500 students, TU Delft.
  • Undergraduate course: Mentorate (Mentor for 2023 edition), ~30 students, TU Delft.

2013 - 2020

  • Teaching Assistant for ML4SE course (Graduate course), Delft University of Technology.
  • Head Teaching Assistant for Software Evolution (Graduate course), Sharif University of Technology.
  • Head Teaching Assistant for Complex Dynamic Networks (Graduate course), Sharif University of Technology.
  • Head Teaching Assistant for Database Design (Under-graduate course), Sharif University of Technology.
  • Head Teaching Assistant for System Analysis and Design (Undergraduate course), Sharif University of Technology.
  • Instructor for Computer Workshop (Spring and Fall editions, Undergraduate course), Sharif University of Technology.

ML4SE General description

Goal: CS4570 aims to give students a hands-on approach to applying deep neural networks and modern NLP techniques, especially large language models (LLMs) based on the Transformer architecture to solve existing SE problems.

Software analytics and big data have transformed software development by leveraging vast repositories of engineering data—such as source code, bug reports, execution traces, and historical changes—to enhance software quality, maintainability, and evolution. The rise of machine and deep learning, particularly transformers and large language models (LLMs), has further expanded these capabilities, enabling automated code generation, bug detection, anomaly identification, type inference, refactoring, code summarization, and program repair. These AI-driven techniques not only boost developer productivity and reduce technical debt but also facilitated development workflows, marking a shift toward AI-driven software engineering.

Machine Learning for Software Engineering (ML4SE) applies AI-driven solutions, including statistical models and deep learning algorithms, to enhance various stages of the software development lifecycle. Transformer-based large language models, such as those behind tools like Copilot, have significantly advanced code understanding and generation. This course focuses on improving developer productivity and software processes’ efficiency by tailoring LLMs to specifically address software engineering challenges. Additionally, we tackle fundamental issues within LLMs themselves, such as evaluations, memorization, compression, support for low-resource languages, and other limitations.

Learning Objectives

This course will enable students to:

  • Explain current literature in the area of software analytics and machine learning for software engineering.
  • Apply machine learning / deep learning algorithms to solve software engineering tasks.
  • Apply software analytics techniques to extract actionable software engineering insights.
  • Evaluate model performance on a software engineering task.

Before you decide to join the course

We expect students to have experience with ML (especially Transformers) already. We also expect them to have some interest in program analysis. This is NOT an introductory course. Here are the requirements:

  • Experience with programming is required (preferably Python)
  • Experience with machine learning and, specifically, deep learning techniques is a must-have.
  • Familiarity with transformer-based language models and modern NLP is needed
  • Experience with research methods is nice to have