About three weeks ago, I gave myself the assignment of identifying three core properties of my most positive learning experiences. I have been putting it off, but rather than dwell on the resistance, I am going to use this space to share some of what I have accomplished. While Alex played Peggle, I started jotting down memories in my notebook, and these are the first four experiences that came to mind.
Undergraduate Computer Graphics class
My senior year at SUNY Fredonia was Ziya Arnavut‘s first year as a CS faculty member. He was assigned to teach Computer Graphics and Networking, both upper-level electives that he had never taught before. I recall that he was especially concerned about Graphics since he did not know OpenGL well. His approach was that he would cover the mathematics of 3D graphics in class, while the rest of us were expected to learn OpenGL and teach it to each other. I recall there were a few student-led discussions about OpenGL during class meetings, but it was mostly out-of-class group study.
Aside from the peer-learning of a wild new software library, Ziya threw in another important twist: each of us had to propose our own final project. I still remember being amazed at some of the results, which included Jaek‘s FF7-style 3D game engine, GL Fighting Bunnies, and combination city editor / 3D flythrough. (The last one was by Jason & Jim, but I cannot remember which “Jason” it was.) My project was a naive 3D modeling program inspired by my high school technical drawing classes. It included top, side, and front views in which a user could click to place points that formed triangles, and the shape could be spun about in the fourth view, a 3D rendering. As an editor, it was weak, but in creating it, I had taught myself OpenGL, Xt Intrinsics, and quaternions (barely).
Undergraduate Networking Class
This class was more lecture-oriented than the Graphics class, but it had the same nice feature in which we each had to propose and then complete our own final papers or projects. In my case, I decided to investigate the differences between TCP/IP and OSI. I wanted to both write a paper and create a complementary network simulator. I also wanted an excuse to learn Java, so I decided to code the simulator in Java. As the semester roared to an end, my simulator was nowhere near complete. I turned in the paper, and sheepishly had to admit that the simulator would not be part of the submission. I felt bad about it, but the lesson I learned was about knowing my limits: I had committed myself to too many things that semester, including over 20 hours of classes along with work and volunteering. The professor was understanding, especially since I had the paper to submit — it was really only my own expectations that I had failed to meet.
Graduate Knowledge Representation and Reasoning
The last 600-level course I took in graduate school (and likely the last 600-level course I will ever take) was on Knowledge Representation and Reasoning, a branch of Artificial Intelligence. The course was taught by William Rapaport, one of my very favorite professors. There’s a reason why he is held in such high esteem as a teacher: his course was extremely well planned and his expectations were clear. The term paper for this class had to be publishable quality: it was a 600-level class after all. This was the only time in my studies that this expectations was laid out, and I probably would not have understood it prior to this, since by then I was already hip-deep in my doctoral studies.
In explaining his expectations for the class, the professor acknowledged that the student may approach the course with different perspectives. The reading assignments included minimal assignments for everyone, advanced readings for those who were really interested, and expert-level readings for a real challenge. I don’t know that I’ve ever seen a professor achieve such a balance besides him.
CurricVis, Summer ’09
In Summer 2009, I had some internal support from BSU to work on my curriculum visualization research. The Summer was primarily development: my research group had identified goals in the previous semester, and Summer was the time to lay down some code. Austin Toombs joined me in this endeavor as an undergraduate research assistant.
The Summer was the first time that I seriously applied Test-Driven Development, and it was also a great opportunity to flex my software-architectural muscles. I felt great and confident about my own learning that Summer.
As a testimony to the quality of the software, a story. As part of his Honors Thesis, Austin is conducting a usability study of the curriculum visualization system. In preparing for the user studies, we needed to incorporate “hypothetical mode”, a feature that allows the user to see what happens to their requirements if they pretend to have taken some courses they have not. Adding this feature took about ten lines of code.
I was concurrently working with Joshua Gevirtz and Carrie Arnold on the Confluence project. This made it into my list of “greatest learning experiences” since it helped me more deeply experience and understand a different model of teacher-student interaction, one closer to an apprenticeship model than any traditional student-professor model I knew. With both the curriculum visualization and Confluence system, I was deep into the system implementation right along with the students. We held code reviews in which we had to look carefully at each others’ code: they saw patterns in action, and I was able to identify specific challenges they faced in design, implementation, and testing. Now, when I get on my soapbox and call for project-based learning in small groups, this is exactly what I envision: a fantastic Summer of new technology, new ideas, and building bonds of trust with students in hands-on collaborations.
Those are the four that I wrote down in the notebook. I can probably dig up a few more, but I think the next step is to dwell on these and determine if there are common properties that rise to the top. Feel free to share your own experiences and thoughts in the comments, of course.