How to best train software engineering students in discrete mathematics is a source of continual debate. This paper advocates teaching mathematics through examples based on reasoning about software, rather than via more traditional “math” examples.
The paper introduces the Beseme project, which seeks to develop and assess teaching materials for discrete mathematics. The Beseme materials use functional programs covering areas ranging from list manipulation to tree balancing; mathematical reasoning skills are taught through proofs of program properties. The paper reports on the results of an experiment that gauged effectiveness by measuring student performance in a data structures course. Above-median students who had been taught using the Beseme materials achieved significantly better results than comparable students who had studied discrete mathematics in a traditional setting. The effect was not observed for below-median students. The paper provides arguments that the effect is due to the Beseme materials rather than instructors or innate talent.
One might expect that students trained in discrete mathematics through the use of software examples as sophisticated as tree balancing might do better at data structures than those who had not. This raises a fundamental question: what constitutes successful training in discrete math? This paper takes the view that discrete mathematics for computing is a utility subject, rather than a cultural inheritance in its own right. Some will find this too narrow a view, but the paper nevertheless provides some practical guidance for teachers struggling with student apathy in a subject that is often ignorantly portrayed as remote from “real” computing science.