# Search result: Catalogue data in Spring Semester 2021

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

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. Friedrich Wicker | |

Abstract | The course provides the foundations for the design and analysis of algorithms. Classical problems ranging from sorting up to problems on graphs are used to discuss common data structures, algorithms and algorithm design paradigms. The course also comprises an introduction to parallel and concurrent programming and the programming model of C++ is discussed in some depth. | |||||

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

Content | Data structures and algorithms: mathematical tools for the analysis of algorithms (asymptotic function growth, recurrence equations, recurrence trees), informal proofs of algorithm correctness (invariants and code transformation), design paradigms for the development of algorithms (induction, divide-and-conquer, backtracking and dynamic programming), classical algorithmic problems (searching, selection and sorting), data structures for different purposes (linked lists, hash tables, balanced search trees, quad trees, heaps, union-find), further tools for runtime analysis (generating functions, amortized analysis. The relationship and tight coupling between algorithms and data structures is illustrated with graph algorithms (traversals, topological sort, closure, shortest paths, minimum spanning trees, max flow). Programming model of C++: correct and efficient memory handling, generic programming with templates, exception handling, functional approaches with functors and lambda expressions. Parallel programming: structure of parallel architectures (multicore, vectorization, pipelining) concepts of parallel programming (Amdahl's and Gustavson's laws, task/data parallelism, scheduling), problems of concurrency (data races, bad interleavings, memory reordering), process synchronisation and communication in a shared memory system (mutual exclusion, semaphores, monitors, condition variables), progress conditions (freedom from deadlock, starvation, lock- and wait-freedom). The concepts are underpinned with examples of concurrent and parallel programs and with parallel algorithms, implemented in C++. In general, the concepts provided in the course are motivated and illustrated with practically relevant algorithms and applications. Exercises are carried out in Code-Expert, an online IDE and exercise management system. All required mathematical tools above high school level are covered, including a basic introduction to graph theory. | |||||

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. Friedrich Wicker, M. Schwerhoff | |

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 | |||||

Learning 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 | R. Sasse, 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. | |||||

Learning 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-0840-02L | Application-Oriented Programming with Python | 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. | |||||

Learning 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. Control structures, logic 3. Arrays, search- and sort algorithms, simulating, modelling 4. Functions, modules , animation 5. Matrices, Monte-Carlo simulation 6. Classes and objects 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 | Z | 3 credits | 2V + 1U | D. Komm | |

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

Learning 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. Friedrich Wicker, R. Sasse | |

Abstract | This course provides the foundations of programming and working with data. Computer Science II particularly stresses code efficiency and provides the basis for understanding, design, and analysis of algorithms and data structures. In terms of working with data, foundations required for understanding experimental data and notation and basic concepts for machine learning are covered. | |||||

Learning objective | Based on the knowledge covered by the lecture Computer Science I, the primary educational objective of this course is the constructive knowledge of data structures and algorithms. After successfully attending the course, students have a good command of the mechanisms to construct a program in Python and to work with multidimensional data using Python libraries. Students particularly understand how an algorithmic problem can be solved with a sufficiently efficient computer program. Secondary educational objectives are formal thinking, the power of abstraction, and appropriate modeling capabilities. | |||||

Content | Introduction of Python: from Java to Python, advanced concepts and built-in data structures in Python; parsing data, operating on data using Numpy and visualization using Matplotlib; linear regression, classification and (k-means) clustering, mathematical tools for the analysis of algorithms (asymptotic function growth, recurrence equations, recurrence trees), classical algorithmic problems (searching, selection and sorting), design paradigms for the development of algorithms (divide-and-conquer and dynamic programming), data structures for different purposes (linked lists, trees, heaps, hash-tables). The relationship and tight coupling between algorithms and data structures is illustrated with graph algorithms (traversals, topological sort, closure, shortest paths). In general, the concepts provided in the course are motivated and illustrated with practically relevant algorithms and applications. Exercises are carried out in Code-Expert, an online IDE and exercise management system. Programming language used in this course is Python. | |||||

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

Literature | T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms , 3rd ed., MIT Press, 2009 | |||||

Prerequisites / Notice | Preliminaries: course 252-0845 Computer Science or equivalent knowledge in programming. All required mathematical tools above high school level are covered, including a basic introduction to graph theory. | |||||

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

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. | |||||

Learning 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? | |||||

Learning 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