My assessment scheme for the class is through a series of projects. Some are small, some are bigger and more open ended. I noticed during class on Tuesday that students are cutting corners by copying HTML from files we used in earlier classes. I admittedly do this all the time, but I pay the price for doing so in time spent cleaning up fragments of code that I really could have written from scratch in less time. In the general series of trying to teach good habits, I decided to give a graduated assignment that went through the series of HTML concepts we have learned over the past two weeks.
The requirement is that students need to make one HTML file for each of the ten steps in this file. They have to start from a blank HTML template that has nothing more than the basic head and body elements. I also had students write out the code for the first three steps by hand.
The effect today in class was a clear measurement of where each student stands in understanding how to piece together HTML from scratch. I collected the folders of files from students at the end of class and can see precisely where their difficulties are. Some of this comes from just knowing what step they were on at the end of class, but I also had some good conversations with students throughout the period today. My class, thankfully, was pretty honest in showing what they do and don't understand how to do. While there has been some code sharing in the class before, they seemed to appreciate this opportunity to step their way through the progression of what we've learned so far.
I think there's an analogue in math and science here - I've given leveled practice sheets before in various mathematics topics. The willingness to push through misunderstanding and admit difficulties seems to be a lot more substantial in a programming context.
Here's the full exercise: