Third in a series. First is here.
My second MOOC, Creative Programming for Digital Media and Mobile Apps, started about a week after the Mechanics ReView MOOC, and at first it seemed a joke in comparison. There were about eight videos to watch, totaling about an hour and a half, with two extras for people new to programming. In the videos, the camera sometimes focused on a person talking about what he was typing on screen, but didn’t show the screen. The software had been updated two days before the class started and after the videos were shot, so some instructions and visuals were no longer correct.
The first question on the first quiz asked what number we needed to fill in for XXX in the command “background (XXX);” to create a black background on the screen. After spending days immersed in challenging physics problems, I laughed when I saw a simple factual question like this one. Subsequent quizzes had similar questions, and we were allowed to retake the quizzes as often as we liked (a few of the choices were shuffled, but mostly it was the same quiz, and an intrepid student could have done reasonably well without knowing anything, just by retaking many times).
However, I really liked the first week’s programming example, “Sonic Painter,” which was a simple program with several “brushes” that followed the mouse, including one that drew different sized circles and one that drew reflections in two mirrors; the brushes made interesting pictures, where color, sound, fading and other variables depended on the location and speed of the mouse. We were invited to start with the example program and mess around, with the goal of doing something visually and sonically interesting.
The program was written in the language Processing, which is an extension of java, and which I had never heard of before the course. Processing was designed for beginners and artists, and it’s amazing what it can do with only a few lines of code. I am contemplating ways I might use it in my classes in the future, as it is so accessible and so much fun.
The course lasted six weeks, with some extra time for the final project. Each week was based on a new programing example; the others were a DJ/VJ app, an audiovisualizer, a game based on Angry Birds, an image app based on Instagram, and a synthesizer machine. There was a quiz each week, with the quizzes together worth 50% of the grade, and there were two peer graded projects – the smaller first one worth 10% and the final one worth 40%. A total score of 40% was worth a statement of accomplishment and 70% got a statement of distinction (although, I believe you have to pay $49 for the “signature track” to get these statements).
As an undergraduate in the early 1980’s, I double-majored in math and computer science. My story has been that I started in CS because that’s what everyone interested in math was majoring in at the time, but I always liked math better, but kept the CS major as backup to help me get a job if I was in trouble. I laugh at how useless a CS degree that is older than many of the IT people at my college is for my resume now and how being able to teach math provides a much better safety net.
I’ve never quite felt good about the perceived obsolescence of my programming skills, however. I have continued to dabble in using Excel to do things it wasn’t intended to, making GeoGebra applets, and using SketchUp to make 3D videos (links are to some of my projects). I thought of these ventures as just using software applications, not really programming, and every once in a while, would wonder where to start to update my programming skills. A few summers ago, after Googling opinions on the best new language to start learning, I started to learn Python, a language that mathematicians were supposed to like, but when I got to the more object-oriented stuff – using a graphical interface with buttons and the like – I got stymied as I’d never programmed that way before.
A few years ago I taught a first year seminar where we used Alice, another language built for beginners on top of java; we don’t have any real computer science faculty at my college, and I thought Alice would be a very good fit for our students, and I was best qualified to teach it, so I gave it a shot. Learning to use that very simple language helped me understand the object oriented paradigm better.
Perhaps what I am most grateful for from the creative programming MOOC is that it helped me see that these programming experiences count, and my programming was, in fact, not as far behind as I thought. The basics – loops, variables, memory, functions, etc. – are still the same, and I know them well. The instructors were experts who pointed me in some good directions, and then let me take it from there. Sometimes having a teacher pick material for you is much better than complete self-study.
Beyond the programming, I got caught up on a few other things: I had never actually played Angry Birds, so had to look up a video of it to see what it was. I’ve never used Instagram, but I figured out what it does from the example in class. I didn’t realize there was something called algorithmic art or that a new trend is interactive music, where the user has some control over how it is played. The instructors were much more interested sound than I was, and my second project didn’t have audio at all, but I still enjoyed their enthusiasm. Overall I liked watching the videos, although it took me a few weeks to remember who was who out of our three instructors whose names all started with M: Mick (overviews), Matt (sound), and Marco (visuals).
My first project was called “Flower Painter;” it is a variation of the initial “Sonic Painter” program. The big mathematical challenge for me in writing it was getting used to computer graphic coordinates, where the top left corner is the origin, and the positive y axis is down, not up. These coordinates make sense relative to teletypes and dot matrix printers, but they are confusing for one steeped in Cartesian Coordinates. I was quite proud when I finally got the rotation equations right.
We were asked to use sound and visuals in the first program, so I played around with sounds from freesound.org, but I never liked the sound that much, which did encourage me to figure out how to program a mute button. I also included a reset button, so the number of petals on the flowers and the color scheme could change each time.
For the second project, I decided to do something “mathy,” and wrote a more complicated program based on Pascal’s Triangle that used object-oriented programming throughout. I also did not focus on getting that one to work on the web; here is a screencast.
At the end of the course, we learned how to turn these programs into real apps that have their own icon and everything and can run on a phone or tablet. I would be interested in doing more work on getting mine to that point. I slowed down a lot due to my arm injury, and was happy to be able to get the programs to where I left them.
Right now we are in the middle of the second peer review process. I was curious to see how the peer reviews worked. The rubric was somewhat laughable, with three levels: bad, good, and great, where bad meant the program didn’t work, good meant it worked but was only a little different from the sample programs, and great meant everything else. For my first round, I gave all five programs I evaluated “great,” although some were much more great than others (but there’s always variation in a given level on a rubric, although not usually quite so much). I then had to evaluate myself, and it felt weird grading my program as “great,” but I did.
I was disappointed when I got feedback from three other students (I’m not sure whether they took the middle three or whether only three completed the process). My score was “great,” but the commentary was almost all taken from the suggested phrases, “I like the idea behind this project,” “The code is clearly laid out,” and other not so helpful statements. The peer review is clearly summative assessment – a score on how good the program was — not formative assessment – something that might make you think and perhaps improve. I was much more interested in the latter (and will write a future, more detailed post on assessment and MOOCs).
The forums ended up being one of the best parts of the course and a source of better feedback. I mostly participated in the “Show off your work” forum. When I posted the Pascal’s Triangle program, I was initially disappointed that I got a few “likes” but no responses. Since there were so many people in the course (it started at 90,000 and ended at 10,000), a post could slip off the first page of the forum in a few hours and essentially become invisible. I decided that if I wanted people to comment on my post, I needed to comment on more posts myself. I especially looked for people who had no other comments and who did projects related to mine. I also somewhat shamelessly put a link to my program in some posts where I thought the author might be interested in my work (after others similarly posted in my threads); these links were a nice way to connect more. One woman said she’d had to scale back her program due to an arm injury, so we connected about that.
In many ways, it was nice having such a huge class, because there was such a wide variety of interesting work, which gave me many ideas and helped me see the potential of Processing. The forums were across the board friendly and encouraging. It was no big deal to state that you were new to programming, not good with sound, etc.; clearly we were coming from different backgrounds.
Perhaps my biggest regret is that I didn’t try harder to find an effective way to actually collaborate. I would have loved to have traded some math advice for some advice on sound, for example, and it’s very likely that someone else would have been interested in such a trade too. There was a forum for forming study groups, but I didn’t participate in that.