This paper describes a two year undergraduate education program in software engineering. This program is designed around the principle of exploratory learning, whereby the students are trained to build knowledge by themselves and actively search for solutions to the problems they experience. In addition to the essential aspects of software engineering of managing complexity of large, changing systems and the ability to work in teams, this programs also aims at preparing the students for working in a field of rapidly changing conditions and constraints. This paper describes how these high level goals have been implemented in an actual curriculum. At the core of the program is a set of project courses which are conducted as role playing games in order to simulate the conditions in an industrial environment. Students have graduated from the program for two years now, and the paper summarizes the main lessons learned as well as a follow-up survey of experiences from some of the organizations who hired the students.