Tuesday, August 30, 2022

CS315 Game programming project report failure and recovery

A few weeks ago, I wrote about how I removed a cyclic dependency from my CS315 class by moving the project report from a git repository to a GitHub wiki. This solution was clear, simple, and wrong. It turns out that GitHub wikis are only available to public repositories when using GitHub Free. Over the weekend, a student working on the first project reached out to me, pointing out that the wiki feature didn't seem to be available. I confirmed the problem and set about seeking a new solution.

After some consideration, I decided the simplest solution was to remove the checklist item that says that a student has submitted their work on time. This item was the crux of the problem, since it forced someone to either leave it unchecked at the time of submission or to check it prematurely. I did not want to change actual course policy, however, so I had to add a general clause stating that work has to be turned in by the deadline to receive credit. This is a little less elegant, since now a student's grade is determined by a combination of checklist items and a general policy. However, it's a familiar kind of policy, and so I hope students don't mind the inconsistency.

It turns out, this is actually a change in policy, although I didn't think about it until writing this blog post. Previously, someone could use a Save Point to resubmit work that was late, since the deadline itself was in the checklist. Now that it is not in the checklist, the course plan gives students no option to earn credit for submitting late work. This was not quite my intention, since the whole idea of having a Save Point is to deal with unforeseen circumstances, and such circumstances do sometimes lead to the inability to submit work on time. I suppose I better get back to editing the course plan to add another general rule, that Save Points can additionally be used to submit work late. That is even more inconsistent and inelegant, but I have not found another approach to fill the bill.

Incidentally, the first "easy" solution I came up with was to have students just submit two things on Canvas: a link to their repository and a separate project report. Unfortunately, Canvas does not seem to support this. Even though the teacher's interface makes it look like you can require a student to submit both items, what students see is that they can only submit one or the other.

Thursday, August 18, 2022

Summer Course Revisions: CS222 Advanced Programming

It has been a little wobbly here due to my teaching schedule changing, as discussed in my previous post. Because one of my courses didn't make enrollment, it looked like I was on deck to teach my department's CS200 Computers and Society course, which is a university Tier 2 core curriculum course in the natural sciences domain. I've never taught it, but it sounded like it could be an interesting challenge. I started doing some prep work on it, and then I was notified that a colleague was willing to swap a section of CS222 with CS200. CS222 is a course I designed, teach regularly, and love to teach. Also, that CS200 course was scheduled right before my other two back-to-back courses, and so it would have had me teaching continuously from 12:30 to 5:00 on Tuesdays and Thursdays. Thanks to the generosity of my colleague, I am now scheduled to teach CS222 MWF instead of that CS200 class, which is one that he has prepped and taught regularly.

This all happened two days ago. Now, the easy thing to do would be to just copy over my Spring CS222 plans, change some dates, and be ready to go. This is not my way. Regular readers may recall that I ended my reflection on Spring's section by putting forward the proposal of changing the technology that I use to teach CS222. This has been on my mind intermittently over the summer, especially as I spent several weeks exploring game design ideas in Flutter. Pushing aside lingering doubts, I began to design the course with this new technology foundation, and today, I published my plan for the first several weeks.

Obviously, the most important transition has to do with getting the students up to speed with Flutter and Dart. The truth is that they have come in with fairly weak understanding of Java anyway, and so rebooting their language learning experience may have a net benefit. The documentation at flutter.dev is excellent, and you can see on the course plan that I am having them complete several standard Flutter and Dart tutorials and codelabs.

The most important factor here is time. Knowing that they will all have to be going through these beginners' steps means that I am accounting for it in my expected weekly commitment. A few things that I had them do in Java have been pulled out, such as the GradeTool refactoring exercise. One thing that really excites me is that students will be running into higher-order functions and stream processing earlier and more consistently. It is to Dart's benefit that it doesn't carry all the baggage that Java does. I was excited to find the iterable collections codelab as a great example for helping novice programmers understand how this works.

I have started a sample solution to my traditional two-week project assignment and, based on that, traced backward what kinds of things I need to introduce in class in the first three weeks. That is, I have developed a running example in class that, I think, will prepare them to build up a version of the two-week project that is essentially the same as what my students have done with Java and JavaFX in the past. 

I do not expect their reading of Clean Code to be significantly hampered by changing the language of teaching. The examples in the book are all in Java, but I don't think the students ever spent a lot of time with the examples anyway. The prose mostly stands on its own. Indeed, in my ten or so years teaching CS222, I don't remember a student ever referencing or asking about a code example in the book.

Today, I recorded and published my first tutorial video based on the stack of Android Studio, Flutter, and git. I hope to make a few more tutorial videos during the semester based on the kinds of questions my students have or difficulties they encounter. 

I'll be sure to write more about this transition in the future, certainly in my end-of-semester reflection if not before. In the meantime, if you have questions, comments, or suggestions, please feel free to share them in the comments or to email me.

Monday, August 15, 2022

Summer Course Revisions: CS215 Introduction to Game Design

I know what you're thinking. Planning for the Fall already? The trouble is that I was scheduled to teach the new capstone course for the Game Design & Development concentration in the CS department even though this semester will be the first time anyone can actually declare that concentration. We were given orders to try to get students graduating from the new concentrations as soon as possible. Unfortunately, advising didn't push students into this course, and it wasn't in the system when they picked their courses, so that course is critically underenrolled. On paper, I'm still scheduled to teach it, but it will almost certainly be cancelled.

This is relevant because that capstone course was supposed to be the locus for a community-engaged immersive learning project. We always had the back-up plan, though, which was to put that collaboration into the academic year structure I have been using, splitting the project across CS215 Introduction to Game Design and CS490 Software Production Studio. Given the enrollment in that capstone course, I went ahead and "finalized" the plans for an immersive game design class.

The good news is that this is how I have been teaching the course for a while now, and it has been successful overall. I modified the project schedule to include the exercises from Justin Gary's Think Like a Game Designer, which I wrote about earlier this summer (12). I also had to modify the schedule to allow for some of the conference travel I have this semester. I put up the course site today, which has public plans for the first four weeks of the semester. I have the rest planned but have not yet formally published them, waiting until I have a chance to get to know these students a bit.

Because the enrollment in CS215 is a bit higher than I have had in the past, I have moved away from in-class poster presentations. I really like having students present posters, but it doesn't scale to over 15 or so students. I tinkered with the idea of breaking them up into an A and B group and alternating posters and conventional submissions, but this got too awkward. Instead, I'm asking them to put their work on Canvas discussion boards. My plan is to combine small group discussion with random (or intentional) selection of submissions for brief presentation. There are a lot of interesting things that come up during poster presentations, and I am hoping this will still allow those to emerge through the discussions.