Software development based on the reuse of object-oriented components has the potential to improve the reliability of software products, but to realize this potential, software developers must be able to develop high quality software components, and be able to reason about their correctness. Introduction of formal reasoning in education will enable students to learn both how to develop correct programs and to understand why their programs are correct. This project is inculcating and amplifying principles and applications of reasoning in computing across the curriculum through the development of collaborative learning tools for three undergraduate courses: an introductory programming course, a data structures and algorithms course, and a software engineering course. Through these courses, the PIs are teaching reasoning across the curriculum by engaging students through a computer-aided, collaborative approach.
In the Collaborative Reasoning paradigm, teams of students are involved in problem solving. This learning model is being enhanced with systematic feedback cycles, rapid and delayed, from both humans and automated assistants, using a Collaborative Reasoning Workbench. Systematic feedback gives structure to the reasoning process. Rapid feedback can make learning immediate and exciting for students, yet delayed feedback may be more meaningful in some problem-solving contexts. The Workbench can be tuned to provide either type of feedback, and it includes a set of exercises and "reasoning assistants" to guide students both inside and outside of the classroom.
The software industry is the largest in the United States, with software engineering occupations projected to be among the fastest growing over the next decade. From entertainment to economics, traffic to travel, military to medicine, software is ubiquitous --- and so, too, are the associated failures that cost dollars and lives. Even as the need for high-quality software increases, it remains expensive to develop, repair, and maintain. To address these challenges, we need to cultivate software engineers, who must learn to reason rigorously about the correctness of the software they build and maintain. Students must be able to understand not only whether their software is correct, but also why. In short, they must acquire a solid foundation in precise, analytical reasoning skills as applied to software behavior. Developing the materials, tools, and techniques that enable these skills to be taught effectively has been the focus of this project. To engage and excite students about learning the central principles of reasoning, we have designed, implemented, and experimented with the Collaborative Reasoning paradigm at Clemson University and Denison University over the past four years across a range of undergraduate courses. The paradigm calls for a hands-on approach to engaging students and encouraging peer learning. This includes the use of independent and collaborative reasoning exercises and computer-based "reasoning assistants" that guide students through these exercises and provide rapid feedback as they work. We have developed working prototypes of four of these assistants and envisioned the development of several others. In addition, we have developed a preliminary web interface that will be used to make these assistants available to a broad set of institutions. Through careful evaluation of the reasoning methods and tools in several pilots in multiple courses at Clemson and Denison, the project has led to the following fundamental findings. 1.) It is possible to integrate mathematical specification and reasoning principles seamlessly using incremental modules in undergraduate Computer Science courses. 2.) It is possible to teach mathematical specification and reasoning principles in multiple courses across the curriculum without significant displacement of existing course topics. 3.) It is possible to reinforce key concepts and engage students in learning through collaborative reasoning assistants; these principles have been captured in a reasoning concept inventory. 4.) It is possible to change student attitudes about the role of mathematical reasoning in software development and help them see the important connections between mathematical proofs and programs. We have recently received funding to continue the work initiated under this project as part of a CCLI Phase-II award. Over the next several years, we will fully develop the Collaborative Reasoning paradigm, refine the materials and tools used to support it, and disseminate the results to a diverse set of institutions.