I have now been teaching in a University setting for ten years in different parts of the world, including North America, Asia and Europe. During that time, I have come to develop my approach to teaching as one that is founded on the principles of: (i) problem-based learning, (ii) practical experimentation, and (iii) reflective practice. My teaching philosophy is simple: students learn best by doing and reflecting on that doing. Hence, I see my main aim of teaching to give students rich, practical experiences in which they can apply theory but learn to appreciate that any theory needs to be adapted to the particular context.

I illustrate my approach to teaching using the following example where I went against the status quo, with positive results.

Software Design Studio

In 2010, I and a few others (Lynne and Gordon Blair, Jaejoon Lee) came up with an idea to revamp our Bachelors program in software engineering. This program had been running for many years and, although not in any particular crisis, it was clear that the teaching methods – based largely on traditional lecturing – had grown stale and did not excite students. I felt this to be a problem: software engineering is consistently ranked by global surveys as one of the ‘best’ professions for excitement and innovation, and yet, as in many software engineering programs, it was being taught in a dull way.

The solution was to completely restructure the program to introduce a focus on hands-on, practical problem-based learning in a ‘studio’ environment where there are no formal lectures but academic staff act as mentors rather than instructors. The studio environment was inspired by studio approaches to teaching in arts and design, but was adapted to software engineering: instead of creating pieces of art in the studio, students created working computer systems.

The first step in developing the software design studio was to lay down a set of governing principles. I defined the studio as follows: “The Software Design Studio is both a lab for students engaged in conceiving, designing and developing software products as well as an approach for teaching software engineering in the lab which emphasizes practical hands-on work and experimentation with a variety of software engineering techniques.” And I defined the governing principles as:

  1. A focus towards on-demand, self-directed learning that favors practical experimentation over traditional lectures;
  2. A cohort approach to training in which groups of students work together in a mutually supportive shared space;
  3. An emphasis on experimentation where students gain hands-on knowledge of competing software development processes and techniques and learn how to choose between them based on practical experience;
  4. Close collaborative work with academic staff who act as mentors rather than instructors;
  5. A focus on underlying principles rather than the fads and notations of the day.

The next step was to convince my Department to allocate a dedicated lab – or studio – for the program. I identified a suitable space and we spent 9 months redesigning and refurbishing the space to give the undergraduate students on the BSc in Software Engineering (SE) their own lab: the intention was that they would have 24 hour access, would be responsible for the upkeep of the lab, and would see it as their ‘home’. They would develop a community spirit with their fellow students and TAs and academic staff.

In terms of the curriculum, practical constraints meant that the program shared many course modules with the BSc in Computer Science. However, we introduced three SE-specific studio modules, which were project-based modules designed to gradually increase the scale of applications that students would work on. In the first studio module, students work in small groups of four to learn about small-scale software development. By the end of the program, the entire student cohort works as a single team to develop an industrial-size application with real input from industrial customers.

Classes are run as hands-on workshops on a particular technical theme, with academic staff mentoring groups and giving impromptu ‘master classes’. Coupled with the technical sessions, are workshops on communication, team-working, and leadership: for example, I run a session on “acting skills for presenters” where I teach the basics of acting as a way to improve students’ presentation skills.

The Software Design Studio has now been running for two years. It has revolutionized the way we teach software engineering and early signs are that the studio is a great success both in terms of student engagement and accomplishment. Students learn more from the studio because it forces them to reflect on the process. As a simple example, one group of students were late with a software deliverable because they relied on a system administrator to set up a server for them; this taught them the need to manage risks and have mitigation plans in place. Teaching this in a lecture setting would have been too dry and students likely would not have taken it in. Students need to experience things to really internalize the learning outcomes.

Feedback from students has been excellent: “The best part of the module was that we got to learn first-hand from our own mistakes. Also having a dedicated studio for our own use gave me a quiet place where I could focus on my studies. I was significantly more productive in there than anywhere else I tried working.” “I personally enjoyed the workshops not just for the assigned tasks but because of the teach staff, we could discuss anything for quite a while rather than being rushed so that others could get their questions answered.” “Pretty much everything was useful. The whole design process was covered in great detail and I now feel as though I could complete this to a much higher standard than before.”

In addition, we have published academic articles on the studio approach. Chris Bull, a PhD student, carried out a study of the studio experience in its first year. As a result of this, Chris and I co-authored the following articles:

Christopher N. Bull, Jon Whittle, Leon Cruickshank: Studios in software engineering education: towards an evaluable model. International Conference on Software Engineering (ICSE) 2013: 1063-1072

Christopher N. Bull, Jon Whittle: Hall of Mirrors, Education from your Reflection. Submitted to IEEE Software.