Monday, December 20, 2021

Reflecting on CS222 Advanced Programming, Fall 2021 Edition

As mentioned in my previous post, there were some irregularities in this semester's CS222 Advanced Programming class. Let me start with what was predictable, though.

I used essentially the same structure in this course as in the past: three weeks of intensive reading and activities; a two-week project completed by pairs; and a nine-week project completed by teams of 3-4. I followed the advice of my colleague in the two-week project and gave the first half as a terminal application then changed the requirements in the second half for a GUI. This is kind of fun for me, but I have less of a sense of whether the students understand that requirements always change. That's probably a less important point than what they can learn about model-view separation, but maybe even that is too new an idea for them. I need to think about whether this is really worth the rug-pulling vs. just returning to the original approach of the two-week project, where the requirements are fixed for both weeks.

For the final project, I said teams should be 3-4, but I allowed one group of two when a pair tried to sync up with an inactive student. I have some regrets about this and need to consider whether I need to be stricter on three. The pair of students happened to be less prepared than other groups, and they both got sick during the semester, so they struggled more than I would have liked. That said, they also reached out for help less than I would have liked. This is why it's still a question as to where the responsibility lies between my course design and their failure to act.

The final projects themselves showed this same shift that I've observed in recent semesters in that all of them involved using web services. Two groups used PokéAPI, one used Overwatch player data, and one used an online recipe service. 

Predictably, they all also used JavaFX, since that's what we covered in class around the two-week project. There's nothing wrong with JavaFX, but it doesn't seem very popular. It's at a good level of abstraction for teaching newcomers to GUI programming. I have been wondering though about what would happen, both in my class and in the rest of the curriculum, if I switched the class over to Dart and Flutter. My main concern is a pedagogic one: it seems to me that you can learn Dart after having learned Java or C# and then appreciate what Dart has to offer, but it's less clear to me that, if you learn Dart, you can go back and understanding what Java and C# are doing without those conveniences.  It's also possible that Flutter's state management would blow their minds. This is pure supposition though; I have serious doubts as to whether this is true teaching intuition or the illusion of ancestor worship. I'm not even sure who uses Java later in the curriculum; I think we've branched out to a point where a lot of upper-level classes are doing languages like Python, and capstone students all get hooked on frameworks like React. I am teaching both sections of CS222 in the Spring, so it's tempting to experiment with a language transition. The problem, of course, is that I'd have to recreate all the surrounding "stuff", like lessons and tutorials. Let me know in the comments if you have feedback about this.

There was a surprising amount of course withdrawals and non-participation from students. However, talking to colleagues across campus, I think everybody saw that this semester. It's unfortunate how hard it is to pin this down: if we had massive changes in young adult mental health or a global pandemic, we could drill down into one of those, but having both puts all of higher education in a deeper quandary. I suspect it's a compounding effect, but that doesn't change the fact that very little of the problem is under our direct control. 

The real surprise for me this semester was the failure of the class to engage with the assignment resubmission and achievement system. Long-time readers will know that this is an essential part of my CS222 course design. Early in the semester, several challenging assignments are given, and someone who really understood the prerequisite material should be able to do them successfully. However, many students don't understand the prerequisite material (for various reasons), and so I allow them to resubmit one of these assignments each week. Except they didn't. I had only a handful of resubmissions, and these were weeks ago. Also, to reward students for engaging in service and lifetime learning opportunities, students can claim one achievement per week. Except they didn't. Students could earn up to 12 credits for achievements (counting for 5% of their final grade), but the most anyone got was 3, and most of the students did none.

I talked to the students in the penultimate class meeting about this, inviting them to share their stories and perspectives. Essentially, they had good intentions but just didn't do it. They would prioritize other work that had imminent deadlines and put off resubmissions and achievements—clearly until it was too late. I didn't take notes in this conversation, but as I recall, everyone who answered gave pretty much the same conclusion: they knew they could do it, but they chose to do something else instead.

Because Canvas cannot handle my grading policies, and students don't listen to the course plan when it tells them not to rely on Canvas' automatic grade computation, I have set Canvas to "hide totals in student grade summary." Someone told me that their grade shows up as a lock, but there's no way for me to verify that with the tools instructors are given. This makes me wonder whether giving them wrong information about their grades actually motivated them to resubmit work, whereas having no information allowed them to ignore this.

A potential fix to address failure to resubmit might be to alter how the assignments are presented in Canvas. Right now, I use a module for each week, and the module contains all the miscellaneous things needed for that week. However, after that week passes, it makes it less clear what to do with this information. If I instead had a module like "Resubmittable Assignments," maybe this would make it more clear. However, I am unclear about whether students actually reference the module structure: I get the sense that they primarily work off the automated to-do list, which sorts items by deadline. Since resubmission has no deadline, we can easily see another case of Canvas working against student-centered learning.

One fix for the achievement system is to make an achievement specifically about making a plan for the other achievements. This would be a lot like the "Did you read the course plan?" quiz that I've been giving: technically easy but rewarding students for doing the right thing. 

More broadly, I know that this course requires students to manage their time well, and many college students lack this skill. I know some teams certainly put in their required hours each week during the final project, but they put those hours all into the final project, to make it as good as they could make it. There's a sense in which I don't blame them: there's a lot of peer pressure to show something good to the rest of the class. Indeed, the day when a large portion of the class stopped coming or withdrew was the day that they were expected to show their two-week project solutions. The design problem for me then is to figure out how to incentivize them to take time away from their final project and put it into some of the other material for the course. The two previously-mentioned fixes might help, but they don't get directly at this root problem. On this Monday before Christmas, and looking at teaching two sections of CS222 in the Spring, it is not clear to me how to do this without a major overhaul.

That's all for today. Thanks for reading. As always, please feel free to share your thoughts, suggestions, and experience in the comments.

No comments:

Post a Comment