Computer Science Education

My computer science education research includes studies of effective pedagogical techniques in a variety of undergraduate computer science courses, including software engineering, artificial intelligence, algorithms, CS 1/2, discrete math, and non-major courses.

Educational Software

Interactive Bin Packing: The Interactive Bin Packing application provides a self-guided tutorial on combinatorial optimization, the bin packing problem, and constructive heuristics for bin packing. It also enables the user to interact with bin packing instances to explore their own problem-solving strategies, or to test their knowledge of the various constructive heuristics covered by the tutorial. It is detailed in an article in the Journal of Open Source Education titled Interactive Bin Packing: A Java Application for Learning Constructive Heuristics for Combinatorial Optimization. The application is not a solver for bin packing. Interactive Bin Packing is a tool for learning about the bin packing problem, as well as learning about heuristic techniques for solving instances of the problem. You can find out more about the application, such as download instructions, the source repository, etc on the page about my open source computer science education software.

Software Engineering

Student Developed Educational Tools: In computer science courses on software engineering, it is common practice for students to work in teams to develop a project. Such courses typically cover the fundamental software processes spanning the software development lifecycle, from requirements specification through architectural design, implementation, testing, and evolution, along with the software tools that support the development activities. The project component of such courses enable students to develop both their technical skills as well as their ability to work effectively in teams and to communicate well with others. There are many approaches that instructors of such courses take for the structure of projects. In the paper, Student Developed Computer Science Educational Tools as Software Engineering Course Projects, I discuss my approach that involves student teams developing an educational tool (e.g., a tutorial application, educational game, etc) for learning about a computer science topic. The student teams choose the target CS topic for their project. In addition to learning and experiencing software engineering processes and tools, they also reinforce their earlier foundational knowledge as they develop a tool to assist others in learning those foundational CS concepts. We found that students who developed CS learning tools in this course perceived a greater increase in learning progress on fundamental principles, theories, and factual knowledge, as compared to their peers in course sections that utilized Real Projects for Real Clients, with an equivalent effect on teamwork and collaboration skills. Surprisingly, the students who develop CS learning tools also report a significantly higher level of progress on industrial relevant skill development as compared to the students who developed so called Real projects for Real Clients.

Real Projects for Real Clients Courses: In the paper Experiences with a Real Projects for Real Clients Course on Software Engineering at a Liberal Arts Institution, I present my experience and observations on the use of the Real Projects for Real Clients Course (RPRCC) methodology in a senior-level course on Software Engineering. In an RPRCC, students work on a project (usually as a team) whose deliverables serve the needs of a real client. RPRCCs are examples of service learning. In our experience, recruiting potential real clients is very easy within a university environment (e.g., a simple email to faculty and staff, explaining the concept, and more than enough project ideas will emerge). Within a Software Engineering course, students gain valuable experience in both technical topics (software architecture, design patterns, etc) as well as soft skills (teamwork, communications, etc). The paper provides details on the course content and structure, the process and results of recruiting real clients, how teamwork and individual contributions to projects was assessed, and effects on student outcomes.

CS Unplugged

Collective Bin Packing: CS Unplugged is a methodology where computer science concepts are taught using active learning activities, often as a group, without the use of a computer. In such activities, the students often become the processing components. One such CS Unplugged activity is one that I call Collective Bin Packing, and which I proposed in the paper Collective Bin Packing: An Active Learning Exercise. It involves the NP-Complete problem known as bin packing. In the bin packing problem, one has a set of objects they need to fit into bins. In the NP-Complete version of the problem, one must determine whether the set of objects can be placed into a specified number of bins. And in the NP-Hard optimization variant of the problem, one must find the assignment of objects to bins that minimizes the number of bins used. Bin packing offers a puzzle-like experience for the learner.

In the Collective Bin Packing activity, the class as a group works through an instance of the bin packing problem. One of the original objectives of the activity was to teach the concept of collective intelligence, often encountered in swarms, where individual members of the swarm have limited intelligence, while the emergent behavior of the swarm can sometimes appear to be quite advanced exhibiting an intelligence that is greater than its constituent components. During the activity, students take turns taking one action, such as putting an object into a bin with space, or removing an object from a bin. In this version of the activity, students don't explain their chosen action, simply allowing the solution to emerge from their collective actions. You can also use the activity to teach about constructive heuristics, explaining a heuristic like first-fit or best-fit, and having students take turns taking the appropriate action from a specific heuristic.

CS Unplugged in an Online Asynchronous Course: I later adapted the Collective Bin Packing activity to an activity for groups within discussion threads of an online asynchronous course. The online course version of Collective Bin Packing is detailed in the paper A CS Unplugged Activity for the Online Classroom. In that paper, I also present my experiences and observations in utilizing it within an online classroom environment taught in an asynchronous modality.

AI for Non-Majors Course: The CS Unplugged version of the Collective Bin Packing activity was originally designed for use in an asynchronous online course on artificial intelligence for non-majors at a liberal arts institution. That course, Artificial Intelligence in Society, is discussed in the paper An Interdisciplinary Course on Artificial Intelligence Designed for a Liberal Arts Curriculum.

CS 1 / CS2 Courses

Pair Formation in Pair Programming: In the paper On Self-Selected Pairing in CS1: Who Pairs with Whom?, I explored the dynamics of pair formation in a CS1 course. The study spanned three years. Pair programming has been shown to be beneficial at all levels of programming skill. Pair programming originated as part of extreme programming, but was then quickly adopted by educators within classroom contexts. In pair programming, two programmers work together on code, often from a single workstation. While one writes code, the other offers guidance and reviews code syntax and logic, and plans algorithmic strategies. The roles are reversed periodically at regular intervals. In this study, the students had the option to either work independently or to work as a pair for assignments. If they chose to work as a pair, they were required to follow the pair programming protocol. Our aim was to learn about the students who chose to pair program, how often they chose to pair program (e.g., they could choose to pair for some assignments but not others), and who they chose to pair with (e.g., same majors, etc). The detailed results are in the paper. A few of the findings include that math majors are more likely to choose pair programming than either computer science or information systems majors, and math majors more often choose to pair with other math majors. Additionally, when computer science and information systems majors chose to pair, they more often paired with a non-major, possibly indicating a self-chosen mentoring role.

Effectiveness of Pop Quizzes: During a three-year period, I examined the impact of pop quizzes in a CS-1 course. The detailed results of the study can be found in a paper titled On the Role and Effectiveness of Pop Quizzes in CS1, published in SIGCSE 2009. Performance on exams and programming assignments were improved for the students in the course sections that experienced pop quizzes, as compared to those in the course sections without pop quizzes. The benefit of pop quizzes was greater for those majoring in either computer science or information systems than it was for non-majors. Juniors and seniors also benefitted more from pop quizzes than freshmen and sophomores. The quizzes themselves were low stakes, with 50% of the grade on a quiz coming strictly by taking it. The surprise nature of the quizzes acts to encourage students to continually review and prepare. Additionally, regular quizzes provide continual feedback to students about their learning progress, while also informing the instructor of topics that may need additional attention or review.

Selected Publications