Teaching computational thinking (at the University of Zürich)

This semester I have the pleasure of teaching a course on Formale Grundlagen der Informatik at the University of Zürich. The course is targeted at first year students in Computer Science.

As an introduction, I talked about Computational Thinking. The topic for the lecture was inspired by two lectures with the same name by Oscar Nierstrasz (slides download), and by Jeannette Wing (article download).

I set myself to incite the students to look around and see the information and computation behind the functioning of the world. The challenge was to find relevant examples. I struggled for a long time to find them, but somehow I was not satisfied. It was not that I could not find any such examples, but they were not uniform.

I struggled until the day of the lecture, when it finally hit me: If information and computation are so pervasive, it should be straightforward to spot and explain them. I should be able to pick examples at any moment. As a consequence, I challenged myself to put together these examples by documenting the trip from my home (in Bern) to the lecture room (in Zürich). I used my iPhone to take pictures and videos.

I started by telling the students that given that this is the first time I am an official Dozent at the University of Zürich, I wish to mark this day by describing my trip using the pictures I took. I guess they did not understand why this was any relevant for the lecture, but they did laugh. Afterwards, I took exactly the same examples only the second time I described what else can be seen behind the scene. This helped me make the point of the pervasiveness of computational thinking concepts.

I listed below some of the examples I used. The original slides can be found here.

The bus schedule is an example of a data structure made for fast vision-based searching.

The train table is a common resource designed to be read by multiple people in the same time.

People line up in a single queue to buy train tickets from multiple offices.

At the take away shop there are multiple queues for multiple non-conflicting resources.

The vending machine from the train station is a clear example of a state machine.

The instructions of the vending machine form a program that can either be simply read as data, or it can be executed as a program.

During the train trip, the controller checked my ticket. This is also an example of optimistic resource access: you are allowed to use it without any initial check, but get kicked out afterwards if you do not have a valid ticket.

The stack was the most difficult to find. Initially, I looked for it at the free newspaper stand, but as it was afternoon, all newspapers were gone already. I finally found it in the fridge display of a confiserie. I emphasized that one should think twice before buying the last cake from one column, like the chocolate cake on the left which happens to be my favorite.

Finally, the intersection near the University provides a nice example of safety and liveness.