# Courses

## Table of Contents

## 1 Introduction

Albeit I take an immense pleasure in doing research, I chose "academia" in order to teach. I taught in the past

- students at all
**undergraduate**and**graduate**levels, - students in
**Cooperative**programs, where students alternate periods of three weeks between the university and the industry (MIAGE, with periods of three weeks; and FIIFO with periods of one semester), **instructors**in**primary**and**secondary**education,**high-school students**, and even**deaf high-school students**.

I prefer to teach **Theoretical Computer Science** and courses of **Initiation to Computer Science** because I feel more of an expert, but I have learned a lot from teaching topics well outside of my sphere of expertise, either because of needs of my department (e.g. `Operating Systems`

, `Networking`

) or because of needs of the students (e.g. `Software Engineering`

).

I received the award of "mejor profesor del año académico 2014" (best professor for the academic year 2014) in the Department of Computer Science (DCC) of the Faculty of Physical and Mathematical Sciences of the University of Chile in Santiago, Chile.

## 2 Pedagogy

I discovered in 2011 with great interest the pedagogical work done by physicists on the teaching of Physics at the university level, and aim (slowly!) to create a similar body of work in the area of Computer Science, starting with the areas that I feel the most comfortable teaching, namely Initiation to Computer Science and Theoretical Computer Science.

I recently started to develop tools to measure experimentally how much students learn in such courses: with three colleagues teaching similar modules to mine (in Robotics and Hydrology respectively), we designed a short questionnaire that students fill at the beginning and at the end of the semester, with questions about Theoretical Computer Science, Programming and Hydrology, that the students should be able to answer based on their course-load from the previous year. We will measure at the end of the semester how much applying knowledge in each module reinforces (or not) their previous knowledge. I hope to be able to continue to perform such studies in the future, independently of which courses I teach: as my teaching is learner-centered, and as such depends much more on who is learning than on who is teaching, my future courses will mostly depend of my future students.

## 3 Log

Semester | Code | Course Title / Module | Language | Size |
---|---|---|---|---|

2014-08 | UC/EI3001 | Taller de Proyecto | Spanish | 20 |

2014-08 | UC/CC5109 | Fine Analysis of Algorithms and Data Structures |
Spanish | 11 |

2014-08 | Escuela de Invierno | Run-Adaptivity: from Merge sort to Convex Hull | Spanish | 17 |

2014-03 | UC/EI2001 | Alice - Pedagogical animations |
Spanish | 27 |

2013-08 | UC/CC5109 | Fine Analysis of Algorithms and Data Structures |
Spanish | 21 |

2012-08 | UC/CC4010 | Android - Taller de Proyectos Android |
Spanish | 120 |

2012-08 | UC/CC5109 | Fine Analysis of Algorithms and Data Structures |
Spanish | 15 |

2012-03 | UC/CC4102 | Design and Analysis of Algorithms |
Spanish | 21 |

2012-03 | UC/EI2001 | Swimovate - Web applications for swimming |
Spanish | 16 |

2012-03 | UC/EI2001 | Alice4Indesor - Animations for Deaf students |
Spanish | 9 |

2012-03 | UC/EI2001 | Alice - Pedagogical animations |
Spanish | 10 |

2011-08 | Alice@Indesor | Alice - Expression via animations |
CSL | 13 |

2011-03 | UC/CC4102 | Design and Analysis of Algorithms |
Spanish | 25 |

2011-03 | UC/EI2001 | Alice - Pedagogical animations |
Spanish | 21 |

2010-08 | UC/CC4102 | Design and Analysis of Algorithms |
Spanish | 22 |

2010-08 | UC/EI2001 | Alice - Pedagogical animations |
Spanish | 7 |

2010-03 | UC/CC61X | Design and Analysis of Adaptive Algorithms |
Spanish | 8 |

2010-03 | UC/EI2001 | Alice - Pedagogical animations |
Spanish | 7 |

2010-01 | UC/JC | Alice - Pedagogical animations (for Instructors) |
Spanish | 25 |

2009-08 | UC/CC40A | Design and Analysis of Algorithms |
Spanish | 15 |

2009-03 | UC/EI2001 | Mindstorm - Programation of Lego Robots |
Spanish | 30 |

2009-03 | UC/CC61X | Design and Analysis of Adaptive Algorithms |
Spanish | 3 |

2009-01 | Escuela de Verano | Smaller and faster: Succinct data structures | Spanish | 30 |

2008-12 | MADALGO/Winter School | Smaller and faster: Succinct data structures | English | 9 |

2008-12 | ITU/Winter School | Smaller and faster: Succinct data structures | English | 11 |

2008-08 | UC/CC61X | Design and Analysis of Adaptive Algorithms |
Spanish | 3 |

2008-03 | UC/CC61X | Design and Analysis of Adaptive Algorithms |
English | 2 |

2007-05 | UW/CS860 | Adaptive Analysis |
English | 70 |

2007-05 | UW/CS234 | Data Types and Structures |
English | 70 |

2007-01 | UW/CS350 | Operating Systems |
English | 70 |

2006-05 | UW/CS240 | Data Structures and Data Management |
English | 140 |

2006-01 | UW/CS240 | Data Structures and Data Management |
English | 70 |

2005-05 | UW/CS240 | Data Structures and Data Management |
English | 70 |

2003-09 | UBC/CS421 | Introduction to Computing Theory |
English | 60 |

2002-03 | UPS/FIIFO 1 | Networking | French | 30 |

2002-03 | UPS/CFA MIAGE 2 | Signal and Networking | French | 30 |

2000-09 | UPS/CFA MIAGE 1 | Algorithms in Java | French | 30 |

2001-09 | UPS/DEUG MIAS S2 | Functional Programming (CAML, OCAML) | French | 30 |

1999-09 | UPS/CFA MIAGE 1 | Algorithms in Java | French | 30 |

1999-09 | UPS/DEUG MIAS S1 | CS Initiation | French | 30 |

1999-03 | UPS/DEUG MIAS S2 | Combined CS/Math (NEW) | French | 30 |

1998-09 | UPS/CFA MIAGE 1 | Algorithms in Java | French | 30 |

The codes of the courses are formed as follow:

- The first two letters encode the institution:
- "UC" stands for "University of Chile", Santiago, Chile;
- "UW" stands for "University of Waterloo", Ontario, Canada;
- "UBC" stands for "University of British Columbia", British Columbia, Canada; and
- "UPS" stands for "Université Paris-Sud", Orsay, France.

- The first letter of each code after the slash correspond to the department:
- "CS" and "CC" stand for "Computer Science",
- "EI" for "Electrical Engineering", and
- "JC" for "Jornadas Completas", a formation for instructors.

- The first digit of each code represents the level of the students:
- 1 to 4 correspond to the number of years the undergraduate students have spent at the university,
- larger numbers correspond to the degree of research required by graduate students to take the course.

- More generally,
- "Indesor" stands for "Instituto de la Sordera", a secondary school for deaf students;
- "CSL" stands for "Chilean Sign Language".

Here are the descriptions of a selection of courses that I taught:

- UC/EI3001, UC/EI4001, UC/EI4002- Taller de Proyecto
- I co-designed this set of 3 undergraduate project oriented courses for engineering students, following
*UC/EI2001*, and leading to a "Minor de Proyectos", a mention on the main diploma of the students. The students at the level of those courses have chosen their specialty. In those courses the students can work on a project for three consecutive semesters, in groups of 3 to 5 students from diverse specialties (e.g. electricity, industry, computer science,…). They present the advances of their project every three weeks and receive more specific help and comments each week in class. - Run-Adaptivity
- I designed and taught in 2014 this summer school course aimed at advanced undergraduates in mathematics, where they are shown some simple examples of a finer analysis technique on the well known algorithm "Merge Sort", reviewing on the way simple themes such as the computation of prefix free codes; and are asked to apply this analysis technique to similar problems, such as the computation of Convex Hulls and of Delaunay triangulations in two dimensions.
- UC/CC5109 - Fine Analysis of Algorithms and Data Structures
- I designed this optional course in 2013, and taught it from 2013 to 2014 with great success. In this course, students read the material at home, compete on forums to publish and answer lecture and concept questions, and join in class to discuss the details of the material, which revisit themes already seen in previous courses (e.g. searching, sorting algorithms, heaps…) with a deeper analysis (e.g. lower bounds, parameterized analysis) in order to prepare the students to more advanced studies on those topics.
- UC/CC4010 - Android
- I designed this project oriented workshop in 2012, where undergraduate engineering students from year 2 to 5 design pedagogical applications for Android devices in groups of four. Created for roughly 30 students, it was met with unexpected demand from 140 students and extended to 3 modules of 40 students, and finished with 90 students. The year it was taught (2012), two projects received awards at the TUApp Programming Contest sponsored by Google.
- UC/EI2001 - Taller de Proyecto
- I designed three sections for this undergraduate project oriented course for engineering students in their second year of university, who have not chosen yet their specialty. At this level, the students have participated in only one computer science course, and know only the basics. The explicit objective of the course is to teach them good engineering and team-working practice through practical projects. The course is formed among a minimal of teaching, so that students have to search and require for more knowledge in order to complete their projects: if student's knowledge when exiting the course is non-uniform, their ability to learn by themselves is maximized.
- Alice
- is a modulo of EI2001 where students design, realize and document five 3d animations using the software Alice (freely distributed by Carnegie Mellon University at http://www.alice.org).
- Alice4Indesor
- is a modulo of EI2001 where students design, realize and document pedagogical animations on themes proposed by professors from the "Instituto de la Sordera" (Indesor), a high-school specialized for deaf students.
- Swimovate
- is a modulo of EI2001 where students design, realize and evaluate experimentally a database interface for swimmers to upload and visualize their swimming performance as measured by a swimovate watch. 10 swimovate watches where bought and distributed to the students with instructions to find two swimmers per group, and to go through an approximation of the development cycle of a software.

- Alice@Indesor
- I designed in 2011 this course aimed at deaf students from the "Instituto de la Sordera" (Indesor), where a selection of students learned to express themselves visually through the software Alice (freely distributed by Carnegie Mellon University at http://www.alice.org). Three students from the faculty of Engineering and myself, with an interpreter in sign language, taught them for one hour a week during one semester and animated a premiation ceremony at the end of the course where the best projects received awards in front of their parents.
- UC/CC4102, UC/CC40A - Design and Analysis of Algorithms
- I taught once each year from 2008 to 2012 this fifth year undergraduate course, covering
*Basic Complexity results*(e.g. lower bounds in the comparison model, experimental methodology, dynamic programming, advanced recurrences),*Algorithms and Data Structure for External Memory*(Models, Dictionaries, Priority Queues and Sorting upper and lower bounds in External Memory, including B-Trees and Van Emde Boas trees),*Advanced Techniques of Design and Analysis of Algorithms*(e.g. Discreet and Finite domains, Competitive and Adaptive Complexity Analysis), and*Non Conventional Algorithm Techniques*(e.g. Randomized Algorithms and Lower Bounds, Approximation models and algorithms, Parallel and distributed algorithms). - UC/CC61X - Design and Analysis of Adaptive Algorithms
- I designed and taught from 2008 to 2010 this graduate course accepting mature undergraduate students interested in research. It is an algorithmic course skimming many different analysis techniques of the complexity of algorithms (parameterized complexity, adaptive algorithms, instance optimality…) which characterize each instance by more than its size. It is also a course in reading and presenting a scientific publication, realizing a complete bibliography on a topic of research, and performing, writing and presenting one own's research.
- Smaller and faster:
**Succinct data structures** - I designed and taught 3 times in 2008 this 5 session course on Succinct data structures, which replace static instances of pointer based data structures, improving performance in both time and space in the word RAM model (a restriction of the RAM model where the size of each machine-word is bounded). Introduced by Jacobson in 1989, the concept yields both theoretical and practical interesting results. I give an overview of some key concepts, structured in five lectures of 1h15, each lecture covering one concept with one example of technical result on it, and ending with some light homework to take home. No other background is required besides a good understanding of regular courses in (theoretical) computer science.
- UW/CS860 Adaptive Analysis
- I co-designed and co-taught this graduate course with Alex López-Ortiz during Spring 2007. It is an algorithmic course aimed at graduate students in computer science whose research is not necessarily in algorithms, but maybe areas such as bioinformatics, database management, and operating systems. The goal is to formalize an analysis technique shared by several research areas (parameterized complexity, adaptive algorithms, instance optimality…), and to encourage students to apply it to the algorithms studied in their own area of research.
- UW/CS240 Data Structure and Data Management
- I taught this second year undergraduate course, covering basic algorithmic topics from priority queues to B-trees and hashing tables, and the distinction between abstract data types and their implementation, algorithms on graphs, compression and pattern matching techniques. I helped to redesign this course in 2006, to make it less redundant with other courses taught at the same level.
- UW/CS234 Data Types and Structures
- I taught this course which covers the same topics than the course
*UW/CS240*on Data Structure and Data Management, yet in a more superficial way, and adds to it the notions of reduction between problems, NP-hardness and NP-completeness. - UBC/CS421 Introduction to Computation Theory
- I taught this undergraduate course in 2003, which covers the basics of language theory, from automatas and rational languages to Turing machines and recursive languages, the polynomial hierarchy, notions of computability, notions of reduction and NP-hardness. The previous instructor had published all his material to the students "because he knew he would never teach it again". I recreated most of the testing material for this course.
- UW/CS350 Operating Systems
- I co-taught with Tim Brecht this undergraduate course once in 2007, learning from Tim as I taught. It covers the basic mechanisms of an operating system, from threads to file systems and interprocess communication, with some basics of networking and a perspective on concurrency. The students are asked to add functionalities to a basic operating system (NachOS, a MIPS operating system developed at Berkeley for pedagogic use) through three projects, in an incremental way resulting in an operating system supporting its own file system, multi-threading, caching, on-demand paging and task scheduling.
- Networking
- I was Teaching Assistant for this first year course at the engineering school FIIFO. It covers various communication protocols from simple physical ones up to advanced wireless protocols.
- Signal and Networking
- I was Teaching Assistant for this fourth year course covering similar topics than the
*Networking*course, with a longer introduction on the physical foundations of the communications between computers. - Algorithms in Java
- I was Teaching Assistant for this third year course, covering basic data-structures and algorithms, asymptotic analysis, the separation between abstract data types and their implementation. I designed half of the evaluation material for this course, in collaboration with the course instructor Jean-Pierre Tilich.
- Functional Programming
- I was Teaching Assistant for this first year course teaching CAML (a compilable functional programing language developed in France) and OCAML (the object-oriented version of CAML) to the students, introducing recursivity and various algorithmic techniques.
- CS Initiation
- I was Teaching Assistant and Professorfor this first year course for students non-familiar with Computer Science. It corresponds to a session of initiation to Windows, one session of initiation to a text editor, and several session of compilation and conception of very basic programs in CAML.
- Combined CS/Math
- I co-designed this experimental course in collaboration with Christine Paulin. The combines concepts of Physics, Mathematics, and Computer Science. As it was a new course, Christine and I worked extensively to design topics combining semi-advanced notions of mathematics (Mersenne numbers) with algorithmics.