Martin Vechev: Katalogdaten im Frühjahrssemester 2017

NameHerr Prof. Dr. Martin Vechev
LehrgebietInformatik
Adresse
Inst. Programmiersprachen u. -syst
ETH Zürich, CAB H 69.1
Universitätstrasse 6
8092 Zürich
SWITZERLAND
Telefon+41 44 632 98 48
E-Mailmartin.vechev@inf.ethz.ch
URLhttp://www.srl.inf.ethz.ch/
DepartementInformatik
BeziehungOrdentlicher Professor

NummerTitelECTSUmfangDozierende
252-0029-00LParallele Programmierung Information 7 KP4V + 2UT. Hoefler, M. Vechev
KurzbeschreibungEinfuehrung in das parallele Programmieren: nicht-deterministische und deterministische Programme, Modelle fuer parallele Programme, Synchronization, Kommunikation und Fairness.
LernzielEinfuehrung in das parallele Programmieren: nicht-deterministische und deterministische Programme, Modelle fuer parallele Programme, Synchronization, Kommunikation und Fairness. Uebungen beschaeftigen sich mit Threads in moderne Programmiersprachen
(Java, C#) und die Ausfuehrung von parallelen Programmen auf
Multi-Prozessor/Multi-Core basierten Systemen.
252-0216-00LSoftware Architecture and Engineering Information 8 KP4V + 3UP. Müller, M. Vechev
KurzbeschreibungThis course introduces both theoretical and applied aspects of software engineering and analysis. It covers:

- Software Architecture
- Informal and formal Modeling
- Design Patterns
- Code Refactoring
- Program Testing
- Dynamic Program Analysis
- Static Program Analysis
LernzielThe course has two main objectives:

- Obtain an end-to-end (both, theoretical and practical) understanding of the core techniques used for building quality software.

- Understand how to apply these techniques in practice.
InhaltSome of the core technical topics covered will be:

- modeling and mapping of models to code
- common code design patterns
- functional and structural testing
- dynamic and static analysis
LiteraturWill be announced in the lecture.
263-2910-00LProgram Analysis and Synthesis Information 6 KP3V + 2UM. Vechev
KurzbeschreibungThis course covers the theory and practice of modern automated program analysis and synthesis, including both, discrete and probabilistic programs.

The techniques discussed in the course are general and widely applicable to problems in software engineering and verification, security, networks, machine learning, and other areas.
Lernziel* Understand the foundations of automated program analysis and synthesis techniques, including standard (discrete) and probabilistic programs.

* Understand how these foundations are applied to solve practical real-world problems.

* Understand how to interface these methods to other research areas (e.g., deep learning, Bayesian inference, security, networks)

* Understand the state-of-the-art in the area and future trends.
InhaltThe last decade has seen an explosion in modern program analysis and synthesis techniques. These techniques are increasingly being used to reason about a vast range of computational paradigms, from finding security flaws in systems software (e.g., drivers) to automating the construction of programs (e.g., for end user programming), to programmable networks, to reliable machine learning models (e.g., probabilistic programming). This course provides a comprehensive introduction to these methods.

The course consists of 3 parts:

* Part I: Theory and Practice of Static Analysis

Static analysis is the science of creating precise and scalable finite approximations of potentially infinite behaviors so to enable a machine to automatically reason about these. These behaviors may come from programs but also other dynamic systems (e.g., biological). Hence the theory and principles of static analysis are widely applicable. We will cover:

- concepts: abstract interpretation, abstract domains, precision vs. asymptotic complexity
- applications: JavaScript type checking (as in Facebook's Flow), security analysis, parallelism and concurrency reasoning (e.g., GPU, weak memory).

* Part II: Theory and Practice of Synthesis

Modern program synthesis is an approach for automating the construction of programs from (partial) user intent. Recent years have seen exciting breakthroughs in techniques and algorithms that discover complex programs purely from input/output examples, natural language, partial programs (sketches) and many others forms of supervision and intent. Modern program synthesis can be seen as a path towards the ultimate goal of artificial intelligence and explainable machine learning. We will cover:

- concepts: version spaces, counter-example guided inductive synthesis, SMT solvers.
- applications: programming by example (e.g., Microsoft's FlashFill), programmable networks (e.g., SyNet).

* Part III: Programming Languages (PL) and Machine Learning (ML)

We will cover the latest and most exciting developments bridging the areas of machine learning and programming languages. These trends include both directions: (i) PL techniques applied to ML problems, and (ii) ML techniques applies to PL tasks (e.g., reasoning about a program). Here, we will cover:

- concepts: probabilistic programming, neural program synthesis (e.g., advance neural networks such as Neural Turing Machines), program synthesis with noise.
- applications: approximate computing, learning-based probabilistic programming engines (e.g., http://jsnice.org, http://apk-deguard.com)


To gain a deeper understanding of how to apply these techniques, the course will also involve a hands-on programming project.
SkriptThe lectures notes will be distributed in class.
LiteraturDistributed in class.
Voraussetzungen / BesonderesThis course is aimed at both graduate (M.Sc., PhD) students as well as advanced undergraduate students.

The course has an oral exam, but for those on summer internships, the exam can be moved to the end of the semester.
264-5811-00LProgramming Systems Seminar Information Belegung eingeschränkt - Details anzeigen
The seminar is open to assistants of the Chair of Programming Methodology and the Software Reliability Lab (Department of Computer Science). Others should contact the instructors.
2 KP2SP. Müller, M. Vechev
KurzbeschreibungThis graduate seminar provides doctoral students in computer science a chance to read and discuss current research papers. Enrollment requires permission of the instructors. Credit units are granted only to active participants.
LernzielLearn about current research results in the area of programming languages, static program analysis, program verification, and related areas; practice of scientific presentations.
InhaltThe seminar will explore different topics from a research perspective.
SkriptSupporting material will be distributed during the seminar.
Voraussetzungen / BesonderesThe seminar is open to assistants of the Chair of Programming Methodology and the Software Reliability Lab (Department of Computer Science). Others should contact the instructors.