I thoroughly enjoy teaching, because there is a lot to learn from students. At the Univerisity of Lugano I created the Master in Software Design. I received the 2007 and 2009 Credit Suisse Award for Best Teaching.
- Programming Fundamentals (Winter 2004, Winter 2005, Winter 2006, Fall 2007, Fall 2008, Fall 2009, Fall 2010)
PF1 is a bachelor course to introduce students to programming. I use Scheme as first programming language, Dr. Scheme as the development environment, and the textbook "How to Design Programs".
Material:Programming Fundamentals 2004: Slides and Code
- Programming Fundamentals 2 (Summer 2005, Summer 2006)
The continuation course of PF1, which introduces the students to object-oriented programming. For PF2 I used Smalltalk as a transitional language to go from Scheme to Java, with splendid results.
- Software Atelier 1 (Winter 2005)
The first Atelier course of our bachelor curriculum is tightly connected to PF1 in the second half of the semester, where we give students time to do their PF1 group project. The first half of the Atelier 1 is dedicated to teaching LaTex, HTML, CVS, SVN, and basics of the Unix world.
- Design 101 (Spring 2008, Spring 2009, Spring 2010, Spring 2011)
This class teaches students a series of universal design principles that can be used for a number of tasks, such as enhancing the way a design is perceived, help people learning from a design, increase the usability and appeal of a design, and ultimately make better design decisions to create new and ameliorate existing designs. The principles are then put to practice in a series of contexts, such as graph design, table design, slide design, presentation design, etc.
- Software Design and Evolution (Fall 2008, Fall 2009, Fall 2010, Fall 2011)
This course provides students with an overview of design heuristics and puts them in an evolutionary context. It teaches students to design systems to withstand the inevitable decay and using reverse engineering and reengineering techniques, it lets students "see" software as more than just source code.
- Software Visualization - Principles & Practice taught at ICSE 2011 (33rd ACM/IEEE International Conference on Software Engineering), May 2011 - Honululu, USA.
- Pragmatic Design Quality Assessment, taught together with Tudor Girba and Radu Marinescu at ICSE 2008 (30th ACM/IEEE International Conference on Software Engineering), May 2008 - Leipzig, Germany.
- "Software Evolution: Analysis and Visualization", taught together with Harald Gall at OOPSLA 2007 (22nd ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications), Oct 2007 - Montreal, Canada
- "Software Evolution: Analysis and Visualization" taught together with Harald Gall at ICSE 2006 (28th ACM/IEEE International Conference on Software Engineering), May 2006 - Shanghai, China
- Smalltalk in a Nutshell, given on Dec 5 2008 in the context of the "Programming Languages" Master course of Prof. Mehdi Jazayeri at the University of Lugano, Switzerland
- Software Evolution, given on Jan 28 2008 in the context of the "Software Engineering" Master course of Prof. Andreas Zeller at the University of Saarland, Germany. Keynote Version
- Smalltalk in a Nutshell, given on Dec 11 2007 in the context of the "Programming Languages" Master course of Prof. Mehdi Jazayeri at the University of Lugano, Switzerland