Wherein we rethink how to teach 'code' / programming concepts:
The next few blog posts will be about different assignments, in-class methodologies and outside-class workshops that rethink how to teach ‘code’ or programming concepts to students across multiple majors - from art and journalism, to computer science and engineering. (more about our students)
While it’s true that a chunk of our students are computer science majors, the DCC program is not about creating programmers - we are not a mini comp-sci program. Instead, we want all students to gain a conceptual understanding of how digital systems are built- from common assumptions, to standards, practices and, yes, even some code constructs. We want the non-programmers to understand some core concepts, but equally as important, we want our computer science majors to understand how these constructs can be and are implicated in everyday life.
The reason this is so important is because over the years I've come to understand that students may be proficient at using software applications to communicate and even do research, but they are (mostly) not critical thinkers when it comes to how the systems are built, why they are being built the way they are, what programming languages are available, what policies and laws affect how end-users receive them, and what cultural assumptions are made. For many of them, the Internet / Web in all its current forms, works like a faucet. Open the tap and it comes out.
In order to get at these critical analyses, students must step outside the computer, and as you will see, this is exactly what we are doing.
If we understand that an algorithm is a set of instructions - well defined, particular instructions with a set outcome, then we can take it outside the computer and try to understand it through everyday life. There are a number of ways that students can perform algorithms - some are more prescribed, while others leave room for more creativity and are open to students interpretations.
A simple in-class project is to have students write instructions for making a peanut butter and jelly sandwich. Then, other students have to follow those instructions exactly, step-by-step, to try and create their own. This especially works well with high school students. The last time I did this, there were a number of students with jelly on the outside of their sandwich, as well as students who were not told to use utensils. The overall messiness of doing this task ultimately results in understanding what an algorithm has to do conceptually, in order for it to work.
Another project, one that we did in discussion sections in DCC is to bring in toddler puzzles and ask students to create algorithms for putting a puzzle together. This year, our students realized early-on that the instructions had to be followed exactly, and therefore built in lots of non-puzzle related instructions which had students skipping while singing ‘happy birthday,’ hugging trees, and yelling ‘yatzee’ every time they put two puzzle pieces together. While this project is fairly prescribed, students were able to be creative within the constraints of the assignment. Here too, they were able to conceptually understand how algorithms work, and to see how many things we do in our everyday lives are / can be algorithms.
Performing the Algortihm
The project that I find to be the most rewarding is one that allows students (in groups) to create their own algorithm for moving through space over time. By allowing them to interpret ‘space’ and ’time’ however they wish, it allows for a wide range of activities through which they come to an understanding of how elaborate and tricky algorithms can become.
The assignment itself, like most of them for this course, was open-ended- to encourage students to take what they have learned in lectures and discussion sections and class readings, and create a framework within which they can be as creative as they wish. We encourage them to be wacky, experimental and to have fun with it.
This is all we gave them:
The object of this assignment is to create an algorithm for moving through a space over time. (however you understand the terms ‘space’ and ‘time’ - this can be physical, digital, emotional, or other kinds of spaces). The algorithm must interact with the space in some way.
This is a team based assignment:
1. Arrange yourselves into groups of 4 to 6 people. You will work together to invent, test, and document your own algorithm
2. Use the readings, your lecture notes, and the screening/workshops (if applicable) for this week to provide inspiration/background.
3. As a group decide on the space, and then how/why you are moving through that space. (ie a game, a performance, an interruption, play, an algorithmic principle you learned in class, etc)
4. Create a set of rules, test it out, figure out what works, what doesn’t
5. Make tweaks/changes as needed
6. Swap your algorithm with another group. You test theirs, they test yours. Document this process. (photo, video, drawing, writing, etc)
7. Each group member posts the same set of documentation of the algorithm along with the rule-set on their own blog
8. Each group member writes their own 1 page analysis of the process/project/results and posts it to their own blog
Students spent a week creating algorithms that ranged from moving through outside physical spaces and interacting with people, squirrels, trash, and trees; to computer ‘spaces’, as well as the spaces of music, dance, and hunger.
Here are a few of the results:
- space as hunger
- choose your own adventure
- the ultimate tree hugging expedition
- dance dance algorithm