Thomas Gross: Catalogue data in Autumn Semester 2017
|Name||Prof. Dr. Thomas Gross|
Institut für Computersysteme
ETH Zürich, CAB H 69.1
|Telephone||+41 44 632 73 42|
|Fax||+41 44 632 13 07|
|252-0027-00L||Introduction to Programming||7 credits||4V + 2U||T. Gross|
|Abstract||Introduction to fundamental concepts of modern programming and operational skills for developing high-quality programs, including large programs as in industry. The course introduces software engineering principles with an object-oriented approach based.|
|Objective||Many people can write programs. The "Introduction to Programming" course goes beyond that basic goal: it teaches the fundamental concepts and skills necessary to perform programming at a professional level. As a result of successfully completing the course, students master the fundamental control structures, data structures, reasoning patterns and programming language mechanisms characterizing modern programming, as well as the fundamental rules of producing high-quality software. They have the necessary programming background for later courses introducing programming skills in specialized application areas.|
|Content||Basics of object-oriented programming. Objects and classes. Pre- and postconditions, class invariants, Design by Contract. Fundamental control structures. Assignment and References. Basic hardware concepts. Fundamental data structures and algorithms. Recursion. Inheritance and interfaces, introduction to event-driven design and concurrent programming. Basic concepts of Software Engineering such as the software process, specification and documentation, reuse and quality assurance.|
|Lecture notes||The lecture slides are available for download on the course page.|
|Literature||See the course page for up-to-date information.|
|Prerequisites / Notice||There are no special prerequisites. Students are expected to enroll in the other courses offered to first-year students of computer science.|
|252-0912-00L||Experimental Computer Systems |
Only for Ph.D. students at the Institute of Computer Systems. All other students need the approval by the lecturer.
|2 credits||2S||T. Gross|
|Abstract||This graduate seminar provides doctoral students in computer science a chance to discuss their research. Enrollement requires permission of the instructor. |
Credit units are granted only to active participants.
|Objective||Learn how to formulate a research project, how to conduct research and how to improve presentation skills in an academic setting.|
|Content||The seminar will explore different topics from a research perspective. The seminar is open to assistants of the Department of Computer Science (Informatik), Computer Systems Institute. Others should contact the instructor.|
|Lecture notes||Supporting material will be distributed during the seminar.|
|Prerequisites / Notice||Credit will be given only to those who present a paper/project. No credit for "attendance".|
|263-2100-00L||Research Topics in Software Engineering |
Number of participants limited to 22.
|2 credits||2S||P. Müller, T. Gross, M. Püschel, M. Vechev|
|Abstract||This seminar is an opportunity to become familiar with current research in software engineering and more generally with the methods and challenges of scientific research.|
|Objective||Each student will be asked to study some papers from the recent software engineering literature and review them. This is an exercise in critical review and analysis. Active participation is required (a presentation of a paper as well as participation in discussions).|
|Content||The aim of this seminar is to introduce students to recent research results in the area of programming languages and software engineering. To accomplish that, students will study and present research papers in the area as well as participate in paper discussions. The papers will span topics in both theory and practice, including papers on program verification, program analysis, testing, programming language design, and development tools. A particular focus will be on domain-specific languages.|
|Literature||The publications to be presented will be announced on the seminar home page at least one week before the first session.|
|Prerequisites / Notice||Organizational note: the seminar will meet only when there is a scheduled presentation. Please consult the seminar's home page for information.|
|263-2810-00L||Advanced Compiler Design||7 credits||3V + 2U + 1A||R. Eigenmann, T. Gross|
|Abstract||This course covers advanced topics in compiler design: SSA intermediate representation and its use in optimization, just-in-time compilation, profile-based compilation, exception handling in modern programming languages.|
|Objective||Understand translation of object-oriented programs, opportunities and difficulties in optimizing programs using state-of-the-art techniques (profile-based compilation, just-in-time compilation, runtime system interaction)|
|Content||This course builds conceptually on Compiler Design (a basic class for advanced undergraduates), but this class is not a prerequisite. Students should however have a solid understanding of basic compiler technology. |
The focus is on handling the key features of modern object-oriented programs. We review implementations of single and multiple inheritance (incl. object layout, method dispatch) and optimization opportunities.
Specific topics: intermediate representations (IR) for optimizing compilers, static single assignment (SSA) representation, constant folding, partial redundancy optimizations, profiling, profile-guided code generation. Special topics as time permits: debugging optimized code, multi-threading, data races, object races, memory consistency models, programming language design. Review of single inheritance, multiple inheritance, object layout, method dispatch, type analysis, type propagation and related topics.
This course provides another opportunity to explore software design in a medium-scale software project.
|Literature||Aho/Lam/Sethi/Ullmann, Compilers - Principles, Techniques, and Tools (2nd Edition). In addition, papers as provided in the class.|
|Prerequisites / Notice||A basic course on compiler design is helpful but not mandatory. Student should have programming skills/experience to implement an optimizer (or significant parts of an optimizer) for a simple object-oriented language. The programming project is implemented using Java.|