Archive for November 20, 2009
Davide Fossati is working with me as a CIFellow. He’s releasing his dissertation work for others to use:
iList is an Intelligent Tutoring System that can help you learn linked lists. It allows you to work on linked lists problems within an interactive, user friendly environment. However, iList is more than just a graphical environment: iList carefully monitors your progress and gives you helpful feedback while you are working towards a solution. The system does so by using sophisticated artificial intelligence technology. If you want to learn more about the science behind iList, you will find plenty of information in the papers referenced in the documentation section.
Yes, this for me is the kind of educational material that I was thinking about in my last blog post — the kind of thing that we might offer to students needing extra help. This is something that goes beyond reading the book some more, spending more time interpreting error messages, or trying to randomly place semi-colons in your code until it compiles.
Each day, students in the School of One are given a unique lesson plan — a “daily playlist” — tailored to their learning style and rate of progress that includes a mix of virtual tutoring, in-class instruction and educational video games.
If one wanted to do this for an introductory computer science course, what would we do? What variables do we have available to tailor computing instruction to the individual student? For example, do we know anything about learning styles for CS?
Here’s a particular version of that question that says something about the state of computing education: How do you help the student needing remediation? If you have a student not doing well, what options do you have to help that student learn and catch up?
My sense is: Not many. Most of our instructional repertoire in introductory computer science consists of material that students read (textbooks, PowerPoint slides), lecture sessions, and having students practice in front of an IDE. What other options do we have?
- Tutoring sessions, particularly with peer-led team learning, could be added to support students who are falling behind. Essentially, the variable here is “More teacher time.”
- Changing the pace, though the answer for remediation isn’t obvious. Would you give the students more time per programming assignment? Fewer assignments? Smaller programming assignments? More but smaller? Since we know that lower-performing students take more time per assignment, it’s not clear if it’s more help to give them more time, or make the assignments smaller (easier?), but maybe more of them to provide more practice.
- We could provide students with visualizations, but most of the results I’ve seen suggest that visualizations help the high-ability students to learn more, but they actually hurt low-ability students.
- We have a set of tools that we know are easier to get started with (e.g., Scratch, Alice, Etoys), but they may not be much help once a student has started with a more traditional course and language (Python, Java, C++) and now needs help. I guess that, if a student was struggling with (say) IF statements in C++, you might use IF statements in Alice to help teach the concept. However, the overhead of learning Alice mid-course might be greater than the benefit, and might really frustrate the student (e.g., “I’m trying to understand C++! Why does learning Alice help me with that?!?”).
- There are some tools like JEROO and iList that look like the languages that students are study and have helped students. We could use more tools like these.
In other disciplines, there are remediation options. For disciplines from English to Chemistry, there are Cliff notes, study guides, educational software, and instructional videos. Some of these exist for CS, but there’s not much. For most subjects, you can always fall back on re-learning the prerequisites. For example, if you’re having trouble with high school mathematics, there are lots of K-8 mathematics materials that one can fall back on. We don’t have that bench strength that other disciplines enjoy. CS instruction in high schools doesn’t look that different from CS instruction in colleges, in terms of materials and methods used.
I think that this is another example of how our educational practices in CS are aimed at the top half of the students. The problem is that if you aim for the top half, you lose the bottom half. However, if we aimed for the bottom half, everyone would learn, even if the top half were not as challenged. Yes, we’d prefer to challenge everyone. But thinking about a CS School of One has me thinking about how we would change how we teach to address the bottom half of students.