Have students write a genetic algorithm in Java to solve instances of the Traveling Salesman Problem so that they can practice object-oriented programming and responsibility-driven design.
Have students write a program that generates a collage of images and/or sounds. This will help them practice image manipulation and function decomposition.
Have students develop a geographic visualization of Twitter data across America in Python to give them experience using dictionaries, lists, and data abstraction techniques.
Have students use a recursive algorithm to solve the problem of only eating the squares of a chocolate bar that contain nuts to introduce recursive algorithms for arrays.
Introduce recursion using the example of opening a present wrapped in several layers of wrapping paper.
Have students implement a seam carving program in Java to give them experience with dynamic programming, and with manipulating 2D and 3D arrays.
To build intuition about searching and sorting algorithms, have students engage in a kinesthetic activity where they unwittingly reproduce or create binary search and sorting algorithms.
Fold paper to demonstrate the effects of different complexities, (i.e., O(n)) using a physical analog to help students strengthen their understanding of this abstract topics.
Have students sort playing cards to teach concurrency and illustrate the power of work that happens in parallel using a hands-on activity.
Use a number-guessing game that pushes students to use binary search in a fun and interactive activity that allows you to introduce binary sort in a grounded manner.