Computer Science
Learn functional programming, design patterns, loop invariants, and more in part 2 of this introductory programming course. This self-study course is not actively moderated. You can view the course for free, but questions will not be answered and there is no guarantee that the content will be available or updated.

Course Details

Language English
Duration 6 weeks
Effort 5-10 hrs/week
Description

Computing is a science. It’s an art, at least for those who practice it well, and it still retains much of its magic.


Part 1 of this course introduced the fundamental concepts, preparing you for the more advanced topics covered in this course!


Throughout this course, you will learn programming concepts and techniques, and practice them immediately through advanced browser-based tools that let you write programs, compile, run and test them against predefined test sets. You will see your results right away in your browser!


In this Part 2, we will discuss:



  • A major programming technique, inheritance, including Multiple inheritance: combining complementary abstractions

  • Selective exports for solid modular design of large systems

  • Functional programming with agents: going one level of abstraction higher or more

  • Concurrency: how to build applications that, so to speak, walk and chew gum at the same time

  • Design patterns: how you can benefit from the best architectural practices of the industry, ironed out over many decades

  • What makes a loop do its job right, with the notion of loop invariant

  • Important practical examples: how to write an interactive application with undo-redo, and the example of topological sort

  • Software engineering-- the construction not just of individual programs but also of complex, ambitious software systems


Join us in this computing and programming course to better understand the power and beauty of modern computer programming.

What you will learn


  • Multiple inheritance

  • Selective exports

  • Functional programming with agents

  • Concurrency

  • Design patterns

  • Loop invariants

  • Examples: undo-redo, topological sort

  • Introduction to software engineering

Prerequisites

Computing: Art, Magic, Science” (CAMS 1), or equivalent familiarity with topics covered there.

Course instructors

Bertrand Meyer

Bertrand Meyer, formerly from ETH Zurich, is a professor at Politecnico di Milano and Innopolis University, and Chief Architect at Eiffel Software. He is an authority in software engineering, programming languages and object-oriented programming. He is pa…

Marco Piccioni

Marco Piccioni is a postdoctoral researcher at the Chair of Software Engineering, ETH Zurich. After having received a Ph.D. from ETH for his work on API usability, persistence, and object-oriented class schema evolution, his research interests are now foc…

Nadia Polikarpova

Nadia Polikarpova earned her PhD at ETH Zurich (Switzerland) in April 2014. Her research interests lie in the area of software correctness, at the intersection of formal methods and software engineering. In particular, her research has contributed to auto…

ETH Zurich

Freedom and individual responsibility, entrepreneurial spirit and open-mindedness: ETH Zurich stands on a bedrock of true Swiss values. Our university for science and technology dates back to the year 1855, when the founders of modern-day Switzerland crea…

58 instructors