@uw.edu
address), then
you will have to wait, the first time, for your post to be approved.
Software is becoming ever more complex and difficult to understand, at the same time as it is used ever more pervasively. It is hopeless to understand how software systems work (or why they do not work!) without automated assistance. Programmers need tool assistance during design, implementation, testing, debugging, and modification (“maintenance”).
This graduate, research-focused course will investigate a variety of program analysis techniques that address these software engineering tasks. Topics include static analysis (e.g., abstract interpretation), dynamic analysis (e.g., testing and debugging), program repair, mining software repositories, and probabilistic methods. While the course focuses on the design and implementation of program analysis tools, the material will be useful to anyone who wishes to improve their reasoning about programs or get an overview of software engineering research.
Students will read classic and current technical papers and actively participate in discussions and a research project.
This is not a course about how to build programs and get a job at Amazon/Apple/Google/Meta/Microsoft, though the information in the class may help you to do that. Rather, this is a course about research in software engineering, and program analysis in particular.
Class sessions are interactive: each one is a discussion among the whole class, aimed at deepening our understanding of the material. (There will also be some in-class activities.) We will all learn from the conversation, even the instructor. We will all have questions and confusions about the material, even the instructor. You are required to be not a passive listener to lectures but an active participant in the discussion.
Please use electronics (laptops, tablets, phones) during class only to enhance class, such as to take notes or view class materials. If you use them for other purposes, then it distracts the lecturer, which makes the class go more poorly. It also distracts other students, depriving them of the full benefits of the class. Thanks.
To help you prepare, you will submit, by the day before the class meets, a one-paragraph commentary and/or answers to reading questions or exercises from the notes. You will post your commentary and answers to a Canvas discussion board for viewing by the instructor and by other students. The Canvas discussion prompt is the source of truth for what is required for any particular day. If a commentary is required, it should reflect your understanding and analysis of the issues raised by the paper, and should also help direct (both your and others') preparation for in-class discussion.
You may write the commentary in whatever style you prefer that meets the goals listed above. One good format for the commentary is to critique the paper, listing the following three points:
Another acceptable format is to summarize the paper, describing its thesis,
approach, and conclusions, and stating why it is significant.
For other
ideas about how to critique a paper, see
a
collection of advice about how to review a paper.
Regardless of its format, the commentary should also list questions that you have about the
paper, such as about technical points or connections to related work.
It's OK if you read the paper and there are issues you do not understand. Please ask questions about those issues — both in your summary and in class — and we will all gain by the discussion. It's best to explain why something makes no sense to you. For example, don't just say, “I didn't understand section 2”, but state where there is a logical fallacy or a conclusion that does not follow or a term that is not defined. The instructor will use these questions to help shape the in-class discussion. It's even better If you can ask these questions earlier than the day before class, because the answers can help you understand the paper better and get more out of the class.
I'll say it one more time: please ask questions. If you have a question, it is likely that many other people have the same question but are too shy (or vain, or insecure) to ask it; they will appreciate your raising the point, and everyone will learn more.
You will have access to the other students' writeups after posting your own. Please read them, which is a good way for you to get perspective. You can see what you missed (or what other people missed), and whether you agree with their take on the key ideas. It will help to make the class sessions more productive.
The heart of this course is a team research project. The instructor can give you suggestions, but students are also free to propose their own, particularly ones motivated by their own problems experienced while programming. Examples include proposing and evaluating a fundamental new technique; developing and assessing new algorithms to replace currently-used ones; translating a methodology to a new problem domain; evaluation of proposed techniques (for instance, via a user study); and applying known techniques to new problem domains, such as operating systems, networks, embedded systems, security, biology, aerospace, etc.
Grades will be based on a research project, homeworks, and participation:
As this is a graduate class, the grades will likely be A-centered, but students are not guaranteed a grade of A.
In short, you can be successful.
Some students are apprehensive about taking CSE 503, because they fear they may not have the proper background to perform a research project. Maybe they have never written a research paper, or not even read one. This class does not assume that background — the purpose of this class is to teach you to do those things! This class is aimed at first-year graduate students (including BS/MS students). If you have that preparation (which a select number of undergraduates also do), then you can be as successful as many other students have been.