Tietojenkäsittelytieteiden opetuksen kehittämisseminaari

Keynote 30.10.2008, Espoo

Programming: Creativity in Three Dimensions

Jens Bennedsen and Michael E. Caspersen

Abstract

Programming is recognised as one of seven grand challenges in computing education. Decades of research has shown that the major problems novices experience are composition-based—they do not know what the pieces are and do not know how to put them together. Despite this fact, textbooks, educational practice, and programming education research hardly address the issue of teaching the skills needed for systematic development of programs.

We provide a conceptual framework for incremental program development, called stepwise improvement, which unifies best practice in modern software development such as test-driven development and refactoring with the prevailing perspective of programming methodology, stepwise refinement. The conceptual framework enables well-defined characterizations of incremental program development; in particular, it enables a notion of degree of correctness, which plays a key role in stepwise improvement.

We utilize the conceptual framework to provide a derived programming method, STREAM, designed specifically for novices.  The method is a carefully down-scaled version of a full and rich software engineering process particularly suited for novices learning object-oriented programming. In using it, we hope to achieve two things: to help novice programmers learn faster and better while at the same time laying the foundation for a more thorough treatment of more advanced aspects of software engineering.

Revealing exemplary programming processes to novices is an important part of this.  Again, textbooks do not address the issue—perhaps because the textbook medium is static and therefore ill-suited to expose the process of programming. We have found that process recordings in the form of captured narrated programming sessions are a simple, cheap, and efficient way of providing the revelation.

Workshop

Successful design of an introductory programming course is a big challenge. In this workshop we briefly describe the current design of our introductory course; the presentation will focus on

  1. learning goals (skills, not just knowledge),
  2. proper evaluation with respect to learning goals (constructive alignment),
  3. overall course structure (progression), and
  4. key learning activities (e.g. worked examples, mandatory assignments, and projects).

After the introduction, the workshop will focus on the topics the participants find most interesting (chosen from the list above and/or from the topics addressed in the keynote).


Last updated 10-Oct-2008.