Abstract
Most computer science departments provide their students with a mathematical foundation which enables them to master theoretic concepts necessary for algorithm analysis, formal specifications of software, reasoning about correctness of software, and classifying problems as solvable or unsolvable. Most departments also require students to design and implement a variety of programs ensuring that students become familiar with issues of language syntax and semantics.However, students often express the concern that they are applying their theoretic background to "toy" problems only. They wonder what "real" problems look like and whether or not their background will be sufficient for them when they are faced with an industrial situation. At the same time companies who are hoping to hire well prepared computer programmers, systems analysts, and other technical staff express their concern that recent graduates entering the work force are not adequately prepared for dealing with large problems in a real world setting. The approach presented here addresses the problem of bridging the gap between theory and practice by actively seeking out industrial partners who provide academics with real problems that can be addressed by teams of students in the academic setting.