The value of project-based courses in computing, especially software engineering (SE) curricula is widely recognized. Projects reinforce learning by allowing students to apply theoretical concepts to build working systems, to participate in professional practice, and to work on teams creating opportunities to learn non-technical skills, such as communication, leadership, and negotiation skills. Non-trivial projects allow students to solve problems associated with large and complex systems and to build artifacts that may be used as evidence of mastery by potential employers. The 2013 ACM and IEEE Curriculum Guidelines for Undergraduate Degree Programs in Computer Science states that ``students can best learn to apply much of the material defined in the Software Engineering [Knowledge Area] by participating in a project."
The pedagogical literature on project-based computing courses, however, focuses on descriptions of specific instances of a course, of projects used, or of the software development processes employed. This paper describes principles that have emerged from teaching a project-based introductory software development course over the past 12 years and presents specific pedagogical tools designed to support these principles. The principles include the need for students to experience a wide view of software development, to learn about and through workplace practice, to develop strong communication skills, and to learn by doing with frequent feedback and reflection. The pedagogical tools designed to support these principles include a semester-long software maintenance project, workplace scenarios, a real-world software development process, a communication skills rubric, high-level guidelines (instead of low-level prescriptive templates), and reading response questions. To illustrate these tools, we describe several assignments and assessments from a recent iteration of the course.
To evaluate the effectiveness of the pedagogical tools used to implement the guiding principles, we employed several data collection methods during the last offering of the introductory software development course. We designed a survey that asks students to self-assess their achievement of each course learning outcome and we also analyzed the standardized student course evaluations that are filled out by students at the end of each course offered in our institution. We analyzed a course project reflection assignment that students completed at the end of the semester and also analyzed trends in student grades.
The results suggest that students had a positive experience with the course and overall believe that they achieved the course learning outcomes. Some areas for improvement were also identified, including revising the method by which version control tools are integrated in the course and revising the ethics module within the existing course framework.
Are you a researcher? Would you like to cite this paper?
Visit the ASEE document repository at
for more tools and easy citations.