Introduction to Programming
The ETH cloud course

This MOOC (Massive Open Online Course) brings to the world for the first time in 2013 the introductory programming course offered to all computer science students at ETH Zurich, the Swiss Federal Institute of Technology. The course has been divided into easy-to-follow individual segments, typically 10 to 20 minutes. It includes numerous quizzes and exercises, and lets you use a special cloud-based version of the Eiffel compiler so that you can write, compile and run programs on the fly, and test your answers against the correct results. The 2014/15 edition brings 7 more programming exercises, and a progressive hint system meant to support students in solving the programming exercises autonomously.

What’s special about this course?

Being able to program is no big deal. Anyone can learn to hack a program together. What this course is about is teaching you quality programming. We use the most advanced techniques of modern software construction, from object-oriented programming to Design by Contract. We start from scratch (no previous programming experience required!) and reach advanced concepts including lambda expressions, recursion and event-driven programming.

Take me to the course!

Work at your own pace

Some MOOCs require that you take lectures at given times and according to a rigid schedule. We think that the idea of a cloud-based course is precisely that you should work as you want and when you want! All the lectures are made available as soon as they are ready. Feel free to take the full course in a single sitting, or space out the lectures, according to your own working style and availability. Our role is to help you master modern high-quality programming, not to tell you how you should work.

The lectures

  1. Introduction
  2. Objects and Classes
  3. Interfaces and Information Hiding
  4. Commands and Queries, Uniform Access Principle
  5. Object Creation
  6. References, Assignment, and Object Structure
  7. A bit of Logic
  8. Control Structures
  9. Single Inheritance
  10. Design by Contract
  11. Genericity
  12. Selective Exports and Deferred Classes
  13. Recursion
  14. Data Structures
  15. Multiple Inheritance
  16. Functional Programming: Agents
  17. Conclusion
The textbook: Introduction to Programming Well Using Objects and Contracts, by Bertrand Meyer (Springer, revised printing, 2013), see book page

ETH Students

If you are an ETH student taking this online course, you will be automatically enrolled in an online exercise group with the same name as your exercise group. Each exercise group has a dedicated teaching assistant providing personalized timely support for any question you might have.
You will be able to submit your solutions to the programming exercises as part of your weekly assignments. Your teaching assistant will give you feedback in addition to the automatic feedback produced by the testing framework.

Tell us what you think!

This course is still experimental and in progress: new lectures will be added regularly in the coming months, and existing lectures will be revised. Your feedback is essential. Tell us what you think by writing to Marco Piccioni.


Marco Piccioni and Bertrand Meyer started the project with the idea of making the popular ETH course Introduction to Programming even more attractive to ETH students and available to the rest of the world through the Internet. Bertrand is contributing most of the lectures; the remaining ones are given by Marco Piccioni, Nadia Polikarpova, Julian Tschannen, and Scott West. Marco Piccioni, in addition to being in charge of the project, created all the quizzes. Christian Estler wrote the Eiffel 4 Mooc framework, making it possible to compile and execute Eiffel programs on the cloud from a browser. Andre Macejko helped with many aspects of the course, in particular programming the in-lecture quizzes. Mischael Schill provided essential support as system administrator.
Curious about why and how we produced this MOOC? See our "making of" video directed by Andrey Rusakov:


This course is an initiative of the ETH Chair of Software Engineering and is an experiment in Web teaching. It is not an official ETH offering and does not entitle participants to any diploma or any other formal recognition. Take it for the sheer challenge and fun of learning programming the modern way.


Chair of Software Engineering, Meyer
Clausiusstrasse 59
RZ Building
8092 Zurich


Marco Piccioni
Phone: +41 44 632 65 32
Fax: +41 44 632 14 35