Hi, folks. I’m Chris and I teach people to teach machines. Let’s start with a little exercise. I need two volunteers. [Recruit.] Person A will be the computer. Person B will be the programmer.
Person A, your job is to do exactly what Person B tells you to do. And I mean exactly. If you don’t, then we will unplug you and take you back to the store. Person B, your job is to teach your machine to do a task that I will write on the board here in a moment. You may only use simple directives. After all, this is a computer you are dealing with. Are we ready? Person A, please close your eyes.
All right, Person B, teach your machine to trace out an equilateral triangle.
[Wait for exercise to finish.]
What we just saw—teaching a machine is a little like that. We must use very precise commands. We must break a process up into simple steps. There are, however, some distinct differences between this example and the real thing. It would have been more realistic if Person A had understood a different language than Person B and that language only had about 30 words or so. We might also want to remove one of Person’s A’s eyes so that Person A could only see a very narrow window of the world at a time. While we’re in there, we really also need to get rid of Person A’s brain. They’ll be no independent thinking on Person A’s part. In fact, we should also remove Person A’s body entirely, leaving just the nervous system, a really complex electrical circuit. We don’t need a body, because when we teach a machine, we rarely making anything move. We primarily just make some information pop up at the end of a wire. Poor Person A, but that’d be a bit more like teaching a machine.
That image of a crippled Person A makes it sound like computers aren’t good for much. But that’s not true. They do a couple of things well. They have an excellent memory and they are very fast. Humans who know how to teach them are very powerful. That’s my job, to make my students powerful. But teaching what’s essentially a nervous system is pretty abstract. It’d be nice if we could keep the physical bodies in there when we’re learning computer science.
For the past couple of years, I’ve been working on a tool to help teach computer science in a way that does keep bodies around. I’ve not been building a chip to program a kid brother, but rather a language for generating 3D models that we can print. The language is called Madeup, because it’s a language for making things up. Up as in the Y axis. Unless you a geoscientist. Because for you, up is the Z axis.
Let’s program our triangle in Madeup:
moveto 0, 0, 0 move 10 yaw 120 move 10 yaw 120 move 10 yaw 120
Madeup is a programming language inspired by Logo, which was designed in the 1970s by computer scientist and educator Seymour Papert. You may have seen Logo in the schools in the 1980s. It enjoyed a surge of popularity then, but nowadays schools don’t really teach computer science. We’ll talk more about that later.
One of the things you’ll notice about this program is that it’s very repetitive. If I had to write code like that, I wouldn’t enjoy writing code. Instead, we put a motor in our code: a loop.
moveto 0, 0, 0 repeat 3 move 10 yaw 120 end
Now let’s turn this path in a solid. Madeup supports several solidifiers that interpret this walked path as the skeleton or cross section of an object. The simplest one is
boxes, which just puts boxes at each visited location. There’s
dowel, which thickens the line into a solid.
tube is similar, but it lets you programmatically design your own drinking straws. Then there’s
extrude, which elongates the cross section along some direction. There’s also
revolve, which spins the cross section around an axis.
When a computer scientist writes code, she is usually building a program for some future user. The expected behavior of the program is not entirely known. Some things depend on user input. Suppose, for instance, our user wanted a square instead of an equilateral triangle. How would our program change?
Suppose the next user wanted a pentagon. What changes? A hexagon? A heptagon?
As with the loop, if I had to write so many different versions of my code, I would not be a computer scientist. Instead, we introduce a symbol
nsides for the number of sides I wish to generate. We can use a little math to calculate the angle we need to turn in terms of
nsides. A primary difference between math and computer science is that our variable names are longer.
We end up with a pretty flexible program. Madeup as an educational tool doesn’t distinguish between users and coders, so to adjust the “user input,” we only need to change one line of code:
moveto 0, 0, 0 nsides = 4 angle = 360 // nsides repeat nsides move 10 yaw angle end dowel
I hope this is giving you a little feel for what we computer scientists have to do. Seymour Papert called it “hard fun.” Alan Perlis said that if calculus was the study of rates, then computer science is the study of process. We have to get to know a process so well that we can teach a machine to do it for us. Slowing down our own brains enough to trace out the path from input to output is one of the greatest challenges my students face.
Let’s make a few more models. I was six years old when the Legend of Zelda came out for the Nintendo Entertainment System, and it had a profound impact on my choice of career. One of my favorite parts about the game was the little jewel that would occasionally show up when I thwarted a monster. That jewel was called a rupee. It looked like this. [Show rupee image.]
At its core, what shape is a rupee? We can code one of these up in Madeup!
scale 1.5, 1, 1 for i through 360 by 60 x = cos i y = sin i moveto x, y, 0 end identity scale 0.7, 0.7, 1 extrude 0, 0, 1, 0.25
Madeup can be used for more than computer science. Anyone dealing with numbers and shapes can benefit. Like chemists. Let’s build a simple model of benzene. What is benzene? It’s 6 carbons and 6 hydrogens. It’s also carcinogenic, but not on a computer.
nsides = 30 .radius = 0.1 for i through 360 by 60 x = cos i y = sin i moveto x, y, 0 end dowel for i through 360 by 60 x = cos i y = sin i moveto x, y, 0 moveto 2 * x, 2 * y, 0 dowel end for i through 360 by 60 x = cos i y = sin i .radius = 0.3 moveto x, y, 0 .radius = 0.2 moveto 2 * x, 2 * y, 0 end spheres
If we have time, we can try printing one of these.
Let’s talk now about what we’ve been doing with Madeup.
First, let’s address Madeup’s role in education. It’s primary purpose is to help folks learn computer science concepts. Two summers ago we put on a couple workshops at our public library. This past summer we ran a camp for 60 kids. I’ve been integrating Madeup examples into my introductory programming courses. Madeup has helped my students and my summer campers see algorithms in the physical world.
Seymour Papert took Piaget’s ideas about constructivism a step farther. While constructivism is about allowing students to actively assemble their own knowledge structures instead of passively absorbing them from their teacher, Papert said that constructionism is even better, that learning is maximized when students are constructing something perceivable. They float in all the feedback. They can share their work with others. Even better, he said, if an educational environment supports body syntonic learning. In this kind of learning the body and the mind are both active and in harmony. Instead of the student being outside the problem looking in from a third-person perspective, in Madeup, you starting thinking about the problem from a first-person perspective, like you are in the scene driving around.
There’s a significant body of research connecting spatial reasoning with success in science, technology, engineering, and mathematics fields. Two tests in particular have been shown to be strong predictors of this success: cross section inference (given an object sliced by a plane, can you sketch what shape passes through the plane?) and mental rotation (given an object, can you visualize what it would look like when rotated about some axis?). Both of these tasks are primary activities in Madeup. Even better news is that performance on these spatial reasoning tests has been found to improve with practice.
A couple of years ago I was putting on workshop at our public library and a woman stood at the back of the computer lab while we worked. I figured she was a mother of one of the kids, but at the end, I went up to her and discovered she was a superintendent at a neighboring school district. She had gotten some 3D printers, but was dismayed to find that nobody was using them to build anything of their own. They were just downloading other people’s doodads. This is fundamental danger of any popular technology. It might go underutilized. However revolutionary and democratizing 3D printers may be, our students might just become engrossed in other people’s stuff. Madeup has the potential to actually make 3D printing a learning platform.
I’ve got a user in New York using Madeup to teach calculus!
Second, let’s address Madeup’s role in my profession as a university researcher. I am at the University of Wisconsin, Eau Claire. We are a teaching-oriented school, and my department does not have a Master’s program. However, UWEC invests significantly in undergraduate research collaborations. Our research director is very proud to report that 46% of graduating seniors have been involved in some sort of research project during their time on our campus.
Having taught previously at a research school, I came to UWEC with mixed feelings about research. I saw my colleagues there largely ignore their undergraduates and their teaching as they chased national grants and publications that seemed to have no observable impact. The folks who benefit the most at a research school are the graduate students. I know this from first-hand experience. It was very humbling to get a salary equivalent to that of a starting public school teacher just to attend school!
I was happy to find that undergraduate research is completely different from graduate research. At UWEC we have an internal research collaboration grant program. Three times a year we can apply for grants to cover student stipends and supplies. We can work on projects that are risky and that may not change the world. However, I think with undergraduate research, we’re more likely to be able to change our community. A couple of years ago, a Communication and Speech Disorders student emailed me wanting to collaborate on a social networking app for folks with aphasia. Aphasia is a disorder that interrupts our ability to process language. It often follows on after a stroke. Folks with aphasia run the risk of becoming isolated as they can’t keep up all the input around us. Not even social media can help with its flurry of text and ads. So we built our own social network, put it on some iPads, and ran a two-month study of how folks in the Chippewa Valley Aphasia Group used it. When we read the users’ responses to the followup survey and saw how delighted these folks were to have a tool to communicate at their pace, I was in tears. I didn’t know research could do that. Both students that worked on this project presented their work at a national conference and are now in graduate school. The computer science student went on to receive a National Science Foundation Graduate Research Fellowship.
With Madeup, I’ve got two students currently working with me. Their task is simple: build a model a week. They are helping me identify bugs and get Madeup presentable for public use. Another student is going to get this running in the cloud, so my users stop destroying my personal server with their infinite loops. These students are learning, there’s no grade attached, they get paid, and they get to make things.
In closing, I’ve presented to you Madeup, a tool for making things with math and algorithms and for teaching computer science without abandoning the physical world. If you know any K-12 teachers that might want to participate in some professional development using it, I’d welcome being put in touch. Thank you!