When it comes to teaching computer science, especially in introductory computer science courses, I find that the main challenge is how to teach the subject’s underlying concepts. Because computer science has a fairly abstract nature, there is usually not a concrete object or experiment to consider as in other sciences (e.g., physics, chemistry, biology, etc.). Nonetheless, students need to understand ideas like run-time, recursion, and scalability if they are going to be able to solve the larger problems that they will face in the real world.
An additional difficulty in teaching computer science results from the success of computers. Computers are used as tools in many disciplines, meaning that programming computers is no longer the exclusive domain of computer scientists. In this, puzzles seem to offer a potential tool for effectively educating a wide range of undergraduate students. Puzzles can be simple, can reflect a specific mathematical idea, and can result in a “eureka!” moment for students. These characteristics make puzzle-based education more promising than a traditional, content-based approach that will often result in students searching online or through a manual to copy snippets of code without developing an understanding of the material.
I scanned the literature to find some ideas about how I could use puzzle-based education myself, but found surprisingly few sources. Still, the four articles that I found cover the subject from theoretical frameworks to empirical evidence.
V. H. Allan and M. V. Kolesar, “Teaching computer science: a problem solving approach that works,” Proc. Annu. Natl. Educ. Comput. Conf., pp. 1–9, 1996.
Focusing on programming is actually an ineffective way of teaching computer science. The amount of effort devoted to learning syntax and the high hours-worked-to-output ratio during introductory computer science courses result in a frustrating experience for students, especially non-computer-scientists.
It is important to see problem solving happen when learning computer science, especially since many computer programs end up hiding important problem solving details during execution. The authors highlighted two ways to achieve this in an introductory course, self-talk and spreadsheet exercises, that I will consider using in the future.
Self-talk forces students to verbalize how they are solving a novel problem, centering the exercise on the problem solving process and not a more abstract programming process. Spreadsheet exercises allow many computer science concepts, such as data types, constant values, and control statements, to be visualized in a logical and spatial manner.
Main takeaway. Using puzzles to teach problem solving skills in a precursor course greatly benefits students who progress on.
A. Levitin and M. A. Papalaskari, “Using puzzles in teaching algorithms,” SIGCSE Bull. (Association Comput. Mach. Spec. Interes. Gr. Comput. Sci. Educ., pp. 292–296, 2002.
The authors provide four broad classes and four less-broad classes of strategies that lend themselves well to being taught with puzzles. They argue that teaching students to think about these strategy classes helps students when they attempt to design their own algorithms from scratch.
Although the authors argue that any course with algorithms could be improved by puzzles, they believe this to be most true for courses that are expressly concerned with algorithm design. To me this underscores the importance of ensuring that teaching techniques are inline with student abilities: students who feel incapable of addressing problems do not learn effectively.
Main takeaway. When using puzzles to teach algorithms, care should be taken to ensure that the puzzle demonstrates a truly general problem-solving technique and doesn’t exploit an idiosyncratic formulation.
N. Falkner, R. Sooriamurthi, and Z. Michalewicz, “Puzzle-Based Learning for Engineering and Computer Science,” Computer (Long. Beach. Calif)., vol. 43, no. 4, pp. 20–28, Apr. 2010.
Computer science (and engineering) curricula currently lack a focus on problem-solving skills. This is problematic because professors are beginning to doubt that these kinds of skills can be taught implicitly.
I appreciated how the authors put puzzle-based learning at the bottom of a hierarchy with problem-based and project-based learning. The key difference between puzzle-based and problem-based learning is that the latter requires domain-specific knowledge, while project-based learning takes this a step further by focusing on team approaches to solving ambiguous tasks.
I think that this hierarchy is useful for thinking about the level of task – puzzle, problem, or project – that can be solved in a given course. Puzzle-based learning, as the bottom level of the hierarchy, is useful for teaching base concepts as part of an introductory course. Problem-based learning is appropriate for senior undergraduate students, while project-based learning can present challenges to graduate and professional students.
Main takeaway. Puzzles that are engaging and generalizable offer a straightforward way of teaching these skills explicitly.
K. E. Merrick, “An empirical evaluation of puzzle-based learning as an interest approach for teaching introductory computer science,” IEEE Trans. Educ., vol. 53, no. 4, pp. 677–680, 2010.
A difficulty that professors have with introductory computer science courses is the wide variety of educational backgrounds and degree programs represented amongst the students. Some students have never programmed before while others have extensive experience from high school. Some students are computer science majors and invested in the course, while others see it as a necessary evil of their program.
I appreciated that this paper gave a specific course design incorporating puzzles allowing me to see how a puzzle-based approach can be used in different settings. During lectures, puzzles provide a problem to focus on, rather than letting the course content remain abstract. Secondary puzzles can also be provided to challenge students who have already mastered the lecture content. During laboratory periods, using puzzles maintains consistency with the lectures’ philosophy.
I also appreciated that the paper reported student satisfaction before and after the new course design using the university’s Course and Teaching Evaluation and Improvement Survey. This offered qualitative evidence that the new course design was effective in increasing student satisfaction.
Main takeaway. Puzzles can be used to both generate interest in a course and as a self-regulation mechanism for stronger students to challenge themselves.
One of the key characteristics of puzzle-based learning is that it introduces a story to the lesson. This story helps to make both the problem itself and its solution concrete for the student. The main challenge with puzzle-based education, however, is how stringent the conditions are for a successful, educational puzzle. The puzzle has to be challenging, obvious approaches should fail, but the correct answer should be instructive, not idiosyncratic. Plus the solution should tie in with course material. Good luck to any instructor who is trying to develop this puzzle-based course from scratch!
Happily, the history of computer science is rather full of puzzle examples to illustrate a number of points. These problems and their variants provide a good starting point for building puzzle-based computer science education.
- The Tower of Hanoi – Recursion
- The Eight Queens Puzzle/The n Queens Puzzle – Algorithm design
- The Sleeping Barber Problem – Inter-process communication and synchronization
- Two Generals’ Problem/Byzantine Generals Problem – Communication over unreliable channel, Fault tolerance, Epistemic logic
- The Birthday Problem – Cryptography
- The Travelling Salesman Problem – Graph problems, optimization, heuristics, NP-hardness
- The Monty Hall Problem – The utility of computer simulation
- Hilbert’s Paradox of the Grand Hotel – The nature of infinity
- Conway’s Game of Life – Pattern-finding, Rule-discovery, Turing Machines, Undecidability