Documenting My Coding Course Upgrades

Documenting My Coding Course Upgrades Featured Image

As much as I know my readers love to learn about code, sometimes I have to take a moment to cater to the educator crowd. Today, I want to do that by sharing some of the ways I’ve upgraded one of the courses I’m teaching. Let’s get into it!

Table of Contents

Course Overview

I’m sure I’ve described this course countless times on this website (see here, here, and here), but I’ll give yet another overview. In short, I teach an introductory programming course on software components in Java. The idea is to teach students that modern development is about using what already exists to create something new.

In this course, we meet four times a week where days alternate between lectures and labs. Outside of class, students are expected to complete 22 written homework assignments, 11 projects, and 3 exams. With the remaining time, students might choose to hang out with me or one of my undergraduate teaching assistants during office hours.

In terms of content, we cover a lot of interesting ideas from an introduction to coding in Java to data structures like sets and stacks. In addition, we tackle the challenging concepts of recursion and loop invariants, and we even take time to talk about software development practices like design by contract and model-view-controller.

Overall, the course has really grown on me, and I think it is my responsibility to make sure students get as much out of it as possible. In the rest of this article, I’ll talk about how I’ve attempted to accomplish that.

Course Upgrades

To give a bit more context around this course, I was trained to teach it in the summer of 2019 and taught it for the first time in the fall of 2019. After a year of teaching the course, I switched departments and started working on research. Then, I picked the course back up this fall (2021). Over the last year or so, I decided to take some time to improve the experience for my students, so let’s talk about it.

My Class Is a Community

To me, one of the most important reasons anyone should go to college is to learn the value of community. In college, you have to lean on a lot of people to get through. However, engineering programs tend to do a bad job of teaching you this. If you’re lucky, you might stumble into a good friend group that can support you. If you’re not so lucky, you’ll end up like me grinding through the material in your room alone.

As a result, one of my core values as an educator is to make sure the classroom is about community first. In our field, you can largely teach yourself how to code, so why not spend the classroom time teaching you how to interact with your peers—at least that’s how I see it.

To build community, I do a lot of different things. For example, I tend to start by getting students to learn each other’s names. There are a lot of ways to do this, but I’m a fan of nametags. Then, to facilitate the learning of names, I usually try to do group activities like Think-Pair-ShareOpens in a new tab. and JigsawOpens in a new tab.. I’m also a big fan of using Peer InstructionOpens in a new tab. which can be used to really nail down a concept while also getting students to work together.

My Expectations Are Explicit

One of the pain points of this class for many students was never knowing why they lost points on an assignment. The main reason for this pain was that grading was never transparent. On one hand, students have a perfectly clear assignment description, so surely they should be able to do well. On the other hand, they’d have no clue how we would actually assess them, so they would often lose points for silly things that we could have warned them about.

As of this semester, I tried to make expectations more explicit—not just for the students but for the graders too. In particular, I made rubrics for the first time. Prior to rubrics, all assignments were graded using a demerit system. Rather than awarding points for doing something well, we took away points for doing something wrong. That might seem like a minor distinction, but it often resulted in really frustrated students as seemingly random points were extracted from otherwise good assignments.

Rubrics were a bit rusty this semester but I am otherwise satisfied with them. I’ll keep working to make sure they look better in the future.

My Efforts Are Flexible

Something else I’ve tried to do this semester was improve the course on demand. In other words, as students have concerns, I tried to address them in the moment. For example, I pushed back several assignment due dates as students asked for more time. Likewise, I made keys for the homework when students complained that they didn’t know if what they were doing was a good approach.

One of the nice things about being flexible is that it has allowed me to really adapt the course to the students needs. For example, I’m currently working on making my own version of the slides which includes all the activities we will be doing each class. In addition, I want those slides to include reminders about assignments and whatnot.

Going into next semester, I am also planning on hosting at least one of my office hours online. Or even better, I might plan to host them in person with the option to go online. We have the technology. Why not use it? Likewise, I’m planning to make checklists for each assignment, so students can remind themselves of things they should care about.

Looking Ahead

Like every semester, I’m planning to write a reflection, so some of this information will be duplicated. That said, I hope this was useful to you, if for no other reason than to give you ideas on how to improve your own courses. Other than that, thanks again for checking out my work!

Jeremy Grifski

Jeremy grew up in a small town where he enjoyed playing soccer and video games, practicing taekwondo, and trading Pokémon cards. Once out of the nest, he pursued a Bachelors in Computer Engineering with a minor in Game Design. After college, he spent about two years writing software for a major engineering company. Then, he earned a master's in Computer Science and Engineering. Today, he pursues a PhD in Engineering Education in order to ultimately land a teaching gig. In his spare time, Jeremy enjoys spending time with his wife, playing Overwatch and Phantasy Star Online 2, practicing trombone, watching Penguins hockey, and traveling the world.

Recent Posts