UP | HOME

Courses

Table of Contents

2014-08-20-BestTeacherAward-Barbay_small.png

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".
    • Descriptions

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.