# Search result: Catalogue data in Spring Semester 2020

Computer Science (General Courses) | ||||||

Generally Accessible Seminars and Colloquia | ||||||

Number | Title | Type | ECTS | Hours | Lecturers | |
---|---|---|---|---|---|---|

251-0100-00L | Computer Science Colloquium | Z | 0 credits | 2K | Lecturers | |

Abstract | Invited talks on the entire spectrum of Computer Science. External guests are welcome. A detailed program is published at the beginning of every semester. | |||||

Objective | ||||||

Content | Eingeladene Vorträge aus dem gesamten Bereich der Informatik, zu denen auch Auswärtige kostenlos eingeladen sind. Zu Semesterbeginn erscheint jeweils ein ausführliches Programm. | |||||

Computer Science for Non-Computer Scientists | ||||||

Number | Title | Type | ECTS | Hours | Lecturers | |

252-0002-00L | Data Structures and Algorithms | Z | 8 credits | 4V + 2U | F. O. Friedrich Wicker | |

Abstract | This course is about fundamental algorithm design paradigms (such as induction, divide-and-conquer, backtracking, dynamic programming), classic algorithmic problems (such as sorting and searching), and data structures (such as lists, hashing, search trees). Moreover, an introduction to parallel programming is provided. The programming model of C++ will be discussed in some depth. | |||||

Objective | An understanding of the design and analysis of fundamental algorithms and data structures. Knowledge regarding chances, problems and limits of parallel and concurrent programming. Deeper insight into a modern programming model by means of the programming language C++. | |||||

Content | Fundamental algorithms and data structures are presented and analyzed. Firstly, this comprises design paradigms for the development of algorithms such as induction, divide-and-conquer, backtracking and dynamic programming and classical algorithmic problems such as searching and sorting. Secondly, data structures for different purposes are presented, such as linked lists, hash tables, balanced search trees, heaps and union-find structures. The relationship and tight coupling between algorithms and data structures is illustrated with geometric problems and graph algorithms. In the part about parallel programming, parallel architectures are discussed conceptually (multicore, vectorization, pipelining). Parallel programming concepts are presented (Amdahl's and Gustavson's laws, task/data parallelism, scheduling). Problems of concurrency are analyzed (Data races, bad interleavings, memory reordering). Process synchronisation and communication in a shared memory system is explained (mutual exclusion, semaphores, monitors, condition variables). Progress conditions are analysed (freedom from deadlock, starvation, lock- and wait-freedom). The concepts are underpinned with examples of concurrent and parallel programs and with parallel algorithms. The programming model of C++ is discussed in some depth. The RAII (Resource Allocation is Initialization) principle will be explained. Exception handling, functors and lambda expression and generic prorgamming with templates are further examples of this part. The implementation of parallel and concurrent algorithm with C++ is also part of the exercises (e.g. threads, tasks, mutexes, condition variables, promises and futures). | |||||

Literature | Cormen, Leiserson, Rivest, and Stein: Introduction to Algorithms, 3rd ed., MIT Press, 2009. ISBN 978-0-262-03384-8 (recommended text) Maurice Herlihy, Nir Shavit, The Art of Multiprocessor Programming, Elsevier, 2012. B. Stroustrup, The C++ Programming Language (4th Edition) Addison-Wesley, 2013. | |||||

Prerequisites / Notice | Prerequisites: Lecture Series 252-0835-00L Informatik I or equivalent knowledge in programming with C++. | |||||

252-0232-00L | Software Engineering | Z | 6 credits | 2V + 1U | F. O. Friedrich Wicker, H. Lehner | |

Abstract | This course introduces both theoretical and applied aspects of software engineering. It covers: - Software Architecture - Informal and formal Modeling - Design Patterns - Software Engineering Principles - Code Refactoring - Program Testing | |||||

Objective | The course has two main objectives: - Obtain an end-to-end (both, theoretical and practical) understanding of the core techniques used for building quality software. - Be able to apply these techniques in practice. | |||||

Content | While the lecture will provide the theoretical foundations for the various aspects of software engineering, the students will apply those techniques in project work that will span over the whole semester - involving all aspects of software engineering, from understanding requirements over design and implementation to deployment and change requests. | |||||

Lecture notes | no lecture notes | |||||

Literature | Will be announced in the lecture | |||||

252-0832-00L | Computer Science | Z | 4 credits | 2V + 2U | H. Lehner, M. Schwerhoff | |

Abstract | The course covers the fundamental concepts of computer programming with a focus on systematic algorithmic problem solving. Taught language is C++. No programming experience is required. | |||||

Objective | Primary educational objective is to learn programming with C++. When successfully attended the course, students have a good command of the mechanisms to construct a program. They know the fundamental control and data structures and understand how an algorithmic problem is mapped to a computer program. They have an idea of what happens "behind the scenes" when a program is translated and executed. Secondary goals are an algorithmic computational thinking, understanding the possibilities and limits of programming and to impart the way of thinking of a computer scientist. | |||||

Content | The course covers fundamental data types, expressions and statements, (Limits of) computer arithmetic, control statements, functions, arrays, structural types and pointers. The part on object orientation deals with classes, inheritance and polymorphy, simple dynamic data types are introduced as examples. In general, the concepts provided in the course are motivated and illustrated with algorithms and applications. | |||||

Lecture notes | A script written in English will be provided during the semester. The script and slides will be made available for download on the course web page. | |||||

Literature | Bjarne Stroustrup: Einführung in die Programmierung mit C++, Pearson Studium, 2010 Stephen Prata, C++ Primer Plus, Sixth Edition, Addison Wesley, 2012 Andrew Koenig and Barbara E. Moo: Accelerated C++, Addison-Wesley, 2000. | |||||

252-0834-00L | Information Systems for Engineers Wird ab HS20 nur in Herbstsemester angeboten. | Z | 4 credits | 2V + 1U | G. Fourny | |

Abstract | This course provides the basics of relational databases from the perspective of the user. We will discover why tables are so incredibly powerful to express relations, learn the SQL query language, and how to make the most of it. The course also covers support for data cubes (analytics). | |||||

Objective | This lesson is complementary with Big Data for Engineers as they cover different time periods of database history and practices -- you can even take both lectures at the same time. After visiting this course, you will be capable to: 1. Explain, in the big picture, how a relational database works and what it can do in your own words. 2. Explain the relational data model (tables, rows, attributes, primary keys, foreign keys), formally and informally, including the relational algebra operators (select, project, rename, all kinds of joins, division, cartesian product, union, intersection, etc). 3. Perform non-trivial reading SQL queries on existing relational databases, as well as insert new data, update and delete existing data. 4. Design new schemas to store data in accordance to the real world's constraints, such as relationship cardinality 5. Explain what bad design is and why it matters. 6. Adapt and improve an existing schema to make it more robust against anomalies, thanks to a very good theoretical knowledge of what is called "normal forms". 7. Understand how indices work (hash indices, B-trees), how they are implemented, and how to use them to make queries faster. 8. Access an existing relational database from a host language such as Java, using bridges such as JDBC. 9. Explain what data independence is all about and didn't age a bit since the 1970s. 10. Explain, in the big picture, how a relational database is physically implemented. 11. Know and deal with the natural syntax for relational data, CSV. 12. Explain the data cube model including slicing and dicing. 13. Store data cubes in a relational database. 14. Map cube queries to SQL. 15. Slice and dice cubes in a UI. And of course, you will think that tables are the most wonderful object in the world. | |||||

Content | Using a relational database ================= 1. Introduction 2. The relational model 3. Data definition with SQL 4. The relational algebra 5. Queries with SQL Taking a relational database to the next level ================= 6. Database design theory 7. Databases and host languages 8. Databases and host languages 9. Indices and optimization 10. Database architecture and storage Analytics on top of a relational database ================= 12. Data cubes Outlook ================= 13. Outlook | |||||

Literature | - Lecture material (slides). - Book: "Database Systems: The Complete Book", H. Garcia-Molina, J.D. Ullman, J. Widom (It is not required to buy the book, as the library has it) | |||||

Prerequisites / Notice | For non-CS/DS students only, BSc and MSc Elementary knowledge of set theory and logics Knowledge as well as basic experience with a programming language such as Pascal, C, C++, Java, Haskell, Python | |||||

252-0840-02L | Application-Oriented Programming | Z | 2 credits | 2G | L. E. Fässler, M. Dahinden | |

Abstract | This course provides important basic concepts for interdisciplinary programming projects. The programming language is Python and Matlab. | |||||

Objective | Students learn - how to encode a problem into a program, test the program, and correct errors. - to understand and improve existing code. - to implement models from the natural sciences as a simulation. | |||||

Content | The following programming concepts are introduced in the lecture: 1. Variables, data types 2. Condition check, Loops, logics 3. Arrays 4. Functions 5. Matrices 6. Random In the practical part of the course, students work on small programming projects with a context from natural sciences. Electronic tutorials are available as preparation. | |||||

Literature | L. Fässler, M. Dahinden, D. Komm, and D. Sichau: Einführung in die Programmierung mit Python und Matlab. Begleitunterlagen zum Onlinekurs und zur Vorlesung, 2016. ISBN: 978-3741250842. | |||||

Prerequisites / Notice | No prior knowledge is required for this course.It is based on application-oriented learning. The students spend most of their time working through programming projects with data from natural science and discussing their results with teaching assistants. To learn the programming basics there are electronic tutorials available. | |||||

252-0842-00L | Introduction to Programming and Problem Solving Number of participants limited to 80. | Z | 3 credits | 2V + 1U | D. Komm | |

Abstract | Core concepts of Computer Science and their implementation in Python. | |||||

Objective | The goals of the course are consolidating the knowledge about the programming language Python on the one hand, and learning about core concepts of computer science that are essential in algorithm design on the other hand. The focus is on computational thinking, that is, the ability to solve problems systematically by developing algorithms. Different strategies are introduced, analyzed theoretically, and implemented in Python. The combination of theory and practice is central in this course. | |||||

Content | - Repetition of basic programming concepts such as variables, lists, control structures, and loops - Reading in and visualizing data - Complexity theory - Sorting and searching - Dynamic programming - Recursion - Graph algorithms | |||||

Lecture notes | Lecture website: http://lec.inf.ethz.ch/ppl | |||||

Prerequisites / Notice | Recommendation: - Foundations of Computer Science (252-0852-00) - Application Oriented Programming Using Python (252-0840-01) | |||||

252-0846-00L | Computer Science II | Z | 4 credits | 2V + 2U | F. O. Friedrich Wicker, H. Lehner | |

Abstract | Together with the introductory course Informatics I this course provides the foundations of programming. This course particularly covers algorithms and data structures. Programming languages used in this course are Java and Python. | |||||

Objective | Basing on the knowledge covered by lecture Informatics I, the primary educational objectives of this course are constructive knowledge of data structures and algorithms. When successfully attended the course, students have a good command of the mechanisms to construct an object oriented program. They know the typically used control and data structures and understand how an algorithmic problem is mapped to a sufficiently efficient computer program. Secondary goals are an algorithmic computational thinking, undestanding the possibilities and limits of programming and to impart the way of thinking of a computer scientist. | |||||

Content | We discuss typical data structures and algorithms. More generally, formal thinking and the need for abstraction and importance of appropriate modeling capabilities will be motivated. Concrete topics are complexity of algorithms, divide and conquer-principles, recursion, sort- and search-algorithms, elementary dynamic data structures, algorithms on graphs. The concepts of the lectures will be motivated with applications. The programming languages used in the lectures and the practical exercises are Java and Python. For the exercises an online-compiler and online-submission system is used. | |||||

Lecture notes | The slides will be available for download on the course home page. | |||||

Literature | Robert Sedgewick, Kevin Wayne, Introduction to Programming in Java: An Interdisciplinary Approach, Addison-Wesley, 2008 T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms , 3rd ed., MIT Press, 2009 | |||||

Prerequisites / Notice | Prerequisites are knowledge and programming experience according to course 252-0845-00 Computer Science I (D-BAUG). | |||||

252-0848-00L | Computer Science I | Z | 4 credits | 2V + 2U | M. Schwerhoff, H. Lehner | |

Abstract | The course covers the fundamental concepts of computer programming with a focus on systematic algorithmic problem solving. Taught language is C++. No programming experience is required. | |||||

Objective | Primary educational objective is to learn programming with C++. When successfully attended the course, students have a good command of the mechanisms to construct a program. They know the fundamental control and data structures and understand how an algorithmic problem is mapped to a computer program. They have an idea of what happens "behind the scenes" when a program is translated and executed. Secondary goals are an algorithmic computational thinking, understanding the possibilities and limits of programming and to impart the way of thinking of a computer scientist. | |||||

Content | The course covers fundamental data types, expressions and statements, (Limits of) computer arithmetic, control statements, functions, arrays, structural types and pointers. The part on object orientation deals with classes, inheritance and polymorphy, simple dynamic data types are introduced as examples. In general, the concepts provided in the course are motivated and illustrated with algorithms and applications. | |||||

Lecture notes | A script written in English will be provided during the semester. The script and slides will be made available for download on the course web page. | |||||

Literature | Bjarne Stroustrup: Einführung in die Programmierung mit C++, Pearson Studium, 2010 Stephen Prata, C++ Primer Plus, Sixth Edition, Addison Wesley, 2012 Andrew Koenig and Barbara E. Moo: Accelerated C++, Addison-Wesley, 2000. | |||||

252-3900-00L | Big Data for Engineers This course is not intended for Computer Science and Data Science MSc students! | Z | 6 credits | 2V + 2U + 1A | G. Fourny | |

Abstract | This course is part of the series of database lectures offered to all ETH departments, together with Information Systems for Engineers. It introduces the most recent advances in the database field: how do we scale storage and querying to Petabytes of data, with trillions of records? How do we deal with heterogeneous data sets? How do we deal with alternate data shapes like trees and graphs? | |||||

Objective | This lesson is complementary with Information Systems for Engineers as they cover different time periods of database history and practices -- you can even take both lectures at the same time. The key challenge of the information society is to turn data into information, information into knowledge, knowledge into value. This has become increasingly complex. Data comes in larger volumes, diverse shapes, from different sources. Data is more heterogeneous and less structured than forty years ago. Nevertheless, it still needs to be processed fast, with support for complex operations. This combination of requirements, together with the technologies that have emerged in order to address them, is typically referred to as "Big Data." This revolution has led to a completely new way to do business, e.g., develop new products and business models, but also to do science -- which is sometimes referred to as data-driven science or the "fourth paradigm". Unfortunately, the quantity of data produced and available -- now in the Zettabyte range (that's 21 zeros) per year -- keeps growing faster than our ability to process it. Hence, new architectures and approaches for processing it were and are still needed. Harnessing them must involve a deep understanding of data not only in the large, but also in the small. The field of databases evolves at a fast pace. In order to be prepared, to the extent possible, to the (r)evolutions that will take place in the next few decades, the emphasis of the lecture will be on the paradigms and core design ideas, while today's technologies will serve as supporting illustrations thereof. After visiting this lecture, you should have gained an overview and understanding of the Big Data landscape, which is the basis on which one can make informed decisions, i.e., pick and orchestrate the relevant technologies together for addressing each business use case efficiently and consistently. | |||||

Content | This course gives an overview of database technologies and of the most important database design principles that lay the foundations of the Big Data universe. It targets specifically students with a scientific or Engineering, but not Computer Science, background. We take the monolithic, one-machine relational stack from the 1970s, smash it down and rebuild it on top of large clusters: starting with distributed storage, and all the way up to syntax, models, validation, processing, indexing, and querying. A broad range of aspects is covered with a focus on how they fit all together in the big picture of the Big Data ecosystem. No data is harmed during this course, however, please be psychologically prepared that our data may not always be in normal form. - physical storage: distributed file systems (HDFS), object storage(S3), key-value stores - logical storage: document stores (MongoDB), column stores (HBase) - data formats and syntaxes (XML, JSON, RDF, CSV, YAML, protocol buffers, Avro) - data shapes and models (tables, trees) - type systems and schemas: atomic types, structured types (arrays, maps), set-based type systems (?, *, +) - an overview of functional, declarative programming languages across data shapes (SQL, JSONiq) - the most important query paradigms (selection, projection, joining, grouping, ordering, windowing) - paradigms for parallel processing, two-stage (MapReduce) and DAG-based (Spark) - resource management (YARN) - what a data center is made of and why it matters (racks, nodes, ...) - underlying architectures (internal machinery of HDFS, HBase, Spark) - optimization techniques (functional and declarative paradigms, query plans, rewrites, indexing) - applications. Large scale analytics and machine learning are outside of the scope of this course. | |||||

Literature | Papers from scientific conferences and journals. References will be given as part of the course material during the semester. | |||||

Prerequisites / Notice | This course is not intended for Computer Science and Data Science students. Computer Science and Data Science students interested in Big Data MUST attend the Master's level Big Data lecture, offered in Fall. Requirements: programming knowledge (Java, C++, Python, PHP, ...) as well as basic knowledge on databases (SQL). If you have already built your own website with a backend SQL database, this is perfect. Attendance is especially recommended to those who attended Information Systems for Engineers last Fall, which introduced the "good old databases of the 1970s" (SQL, tables and cubes). However, this is not a strict requirement, and it is also possible to take the lectures in reverse order. |

- Page 1 of 1