Syllabus (tentative)

Course Description

This is a special topics course open to both graduate and undergraduate students. The course will look at recent advances in intelligent programming systems, an exciting field that sits at the intersection of programming systems and artificial intelligence (AI). Programming is known to be hard for computer end-users, novice programmers, or even professionals, and intelligent programming systems aim to simplify programming by incorporating AI, including traditional approaches such as symbolic search and automated logic reasoning as well as more recent advances in areas such as the latest machine learning models, into the programming workflow. Such systems allow users to “program from specifications”, instead of manually writing code. For instance, one can provide input-output examples, natural language descriptions, or demonstrations as specifications from which the system can automatically generate programs. This area is commonly known as “program synthesis” in the programming languages and formal methods community and “program induction” in the machine learning and AI community.


  • EECS 201 (Discrete Mathematics), EECS 281 (Data Structures and Algorithms), or equivalent on discrete math, data structures, and algorithms
  • Familiarity with programming (for final projects and programming assignments)
  • Additional prior exposure to programming languages (e.g., EECS 490/590), compilers (e.g., EECS 483/583), and constraint solving but not required

  • Lectures and Discussions

    Students are expected to attend lectures and interact with the instructor and other students. All lectures are recorded and will be published immediately after lectures. Discussion sections are optional and are convereted to office hours.


    All assignments will be published on Canvas.

    Paper Presentations

    Students will give paper presentations in the second half of the semester.
    • Paper assignment: each student or group of students will choose a paper from a predefined list of papers. You can also choose papers not in the list but that would require discussing with the instructor beforehand.
    • Presentation: once you are assigned a paper, you will present the paper (potentially with another student) and serve as the "student lead" of the discussion for that paper. A few tips how to prepare your presentation:
      • Read the paper in detail. Try to understand the paper as much as possible. You may need to pick up some necessary background knowledge as well as read a couple of related papers. However, it's completely okay that you don't understand every detail in the paper. In that case, please make sure to create a list of questions and discuss that during your presentation.
      • Prepare your own slides. Consider covering a few things in your slides: (1) What is the problem this paper aims to solve? (2) Why is this problem important? (3) Use a concrete example to illustrate what the problem is and how the paper solves it. (4) Give necessary background to help everyone in the class understand the paper. (5) What are the key ideas underlying the paper's approach? (6) Explain the paper's approach in more details. (7) How well does the paper's approach work? (8) What are some limitations of the paper's approach? How can we improve it?
      • Create a demo if possible. Some papers have artifacts such as code. Play with their code and see how it works. You can give a live demo of their tool, or make a video recording.
      • Share your thoughts. It's important to think critically. What do you like and dislike about this paper?
    Typically, we have typically >40 minutes for the presentation and >30 for the discussion. We can also have discussion during the presentation.

    Paper Reviews

    Before each paper presentation, every student, except the student lead(s), is required to write a review and submit it using the HotCRP system.


    No exams.

    Final Project

    The final project is research-oriented, which means you will need to propose a problem that you'd like to solve, work towards solving it, evaluate your solution, and finally write it up and present your results to others.
    You are encouraged to collaborate with 1-2 other students for the final project. You can also choose to work on your own. However, if you plan to form a team with size greater than three, please talk to the instructor in advance.
    Each team will submit one single final project report, which must describe how the work was divided among team members and acknowledge external help if any. Each team will also give a short presentation of your work at the end of the semester.
    There are a few milestones leading towards a final project report and presentation.
    • Proposal: you will need to first write a 2-3 page project proposal including: (1) a statement of the problem you plan to investigate, (2) an explanation why this problem is interesting, (3) a description of your proposed approach. Note that a project proposal is not a final report. That means, you won't have all the details of your approach in your proposal, however, you should have some rough ideas how you would tackle the problem, what techniques you may draw upon, what important milestones you want to accompolish, as well as how you plan to evaluate your approach once it's developed. You should include these in your proposal.
    • Checkpoint: in order to make sure you make steady progress, you will submit one checkpoint report. This is essentially a partial report that would eventually lead to a complete final project report.
    • Final project report: at the end of the semester, you will write a final project report.
    • Final project presentation: at the end of the semester, you will present your work to the entire class.

    Collaboration Policy

  • For assignments, you are free to discuss with others or work together towards the solution. However, all of your code must be written by yourself. Your write-up must be your own as well. Please list your collaborators in your submission.
  • For paper reviews, you are free to discuss papers with other students, however, the reviews must be written on your own and in your own words.
  • For paper presentations, you are also free to discuss with other students, however, the slides must be made by you. You can reuse a few slides from others and/or adapt them, however, you must acknowledge it and you should not directly take existing slides for your presentation. Furthermore, the presentation must be delivered by you.
  • For final projects, you are free to work with your team members. It is okay that you seek external help but be sure to acknowledge that in your final project report. You are free to reuse existing libraries in your implementation, however, you should acknowledge that and should not claim that as your contributions in the final project report. As a general rule, follow the College of Engineering Honor Code and, when in doubt, talk to the instructor. Any violation of academic honesty may result in a failing grade.

  • Grading

    Your final grade will be calculated as follows.

    If you are enrolled in EECS 598:
    • Class participation - 5 points
    • Assignments - 25 points
      • A0: 1 point
      • A1: 1 point
      • A2: 5 points
      • A3: 3 points
      • A4: 7 points
      • A5: 8 points
    • Paper reviews - 15 points
    • Paper presentation - 30 points
    • Final project - 50 points
      • Project proposal - 10 points
      • Checkpoints - 10 points
      • Final project presentation - 15 points
      • Final project report - 15 points
    If you are enrolled in EECS 498:
    • Class participation - 5 points
    • Assignments - 50 points
      • A0: 1 point
      • A1: 4 points
      • A2: 10 points
      • A3: 5 points
      • A4: 15 points
      • A5: 15 points
    • Paper reviews - 10 points
    • Paper presentation - 15 points
    • Final project - 45 points
      • Project proposal - 10 points
      • Checkpoints - 5 points
      • Final project presentation - 15 points
      • Final project report - 15 points