3 ms·
I teach Java and Python intro courses at two different colleges (both < 30 per class), and the way I've developed my courses are very unit test driven. The reas
by tsumnia 11y ago
I teach Java and Python intro courses at two different colleges (both < 30 per class), and the way I've developed my courses are very unit test driven. The reason is when I hand graded, it would take easily hours to finish grading everything. Likewise, students would submit code they copy/pasted from the internet and wouldn't compile. After 5 minutes of debugging their code, it begins eating into my overall grading time. Likewise, what percentage should I give them on code that doesn't compile? Now, I say a flat "if it doesn't compile, the best you get is 20% for proper formatting".
In the first few weeks, I use JUnit and System Rules (I am currently build Python unit tests) to let them only work via the main method. Once we introduce methods, I show them how I call them via my tests.
I have also started implementing typing exercises into my weekly work, so students can get a feel before getting thrown to the wolves on the week's assignments. If I head to PyCon next year, I hope to present on whether it was successful or not.
I am looking to automate grading ala Open edX style submissions, as the biggest problem I have is not being able to give students a grade/notes until around Friday when I grade.
One trick I do is lecture all of Monday (2 hour class) and then let them work on their assignment for the week on Wednesday (3 hours). Most students don't realize how much time outside of class needs to be spent in the initial semesters of programming. I use that lab time to let them work and act as a helpful tool if they have questions. For example, this week, we'd gone over building Objects, but the idea of constructors are still shaky to some people. Today, when they were working on their labs, I spent some time with the 1-2 students that needed a little extra help understanding the work to get everything.
- bobochan 11y agoThanks to everyone for their excellent suggestions. One of my reservations about going to an automated testing and grading approach is that the course evaluations consistently say that the personalized feedback is an important reason that they took the course. But the fact is that line by line analysis of every submission does not scale, and teaching X times as many sections means that compromises will have to be made. I am not worried about the top and middle thirds of the students, they largely sail through on their own with pretty minimal guidance from me (it is an intro course and many of them have strong backgrounds). The bottom third of the class is new to programming though, so hopefully they will take more advantage of lab and office hour time to solicit help.
- tsumnia 11y agoThe bottom third is where I hope to see improvement with the introduction of typing exercises, lecture exercises (multiple choice/true-false/fill in the blank style questions) and also I include YouTube videos of that week's material. My logic is that like sports, you need to stretch and warmup before doing a physical activity, so the same should be applied to a new concept. If the student is still having trouble implementing the concepts on their own, by having a prebuilt, functional version can help them see how it works. Here's the current exercises for my Java 1 class: http://imgur.com/a/boc6h http://imgur.com/a/boc6h So far, the students are responding favorably to the exercises and the only fall out I've had are students that fail to show up or do any work. Grading wise, the typing exercises are 10%, lecture exercises are 10% and the actual programming assignments are 30%. Since the problems are a smaller chunk of their overall grade, it alleviates the pressures of the 'all or nothing' structure of the unit tests. In my evaluations last semester, many loved the introduction of the YouTube videos and I plan to ask them about the typing exercises this December. I definitely agree on the personalized feedback portion though, that's why I make the second class meeting only programming, no lecture. This way, they can get their hands dirty with an experienced person to help them.
- bobochan 11y agoBrilliant. About 75% of our class time is spent doing exercises in class with me roaming about, or at least it would be if I could remember to stop talking at certain points.
- tsumnia 11y agoSmart! Before I let them loose during the 3 hour lab, I spend about 15 minutes talking about the overall plan of a specific problem. For example, during looping, they had to flip a coin 1,000,000 times and record the results. I explained how Math.random() worked and how if they did "Math.random() > 0.5" they could determine whether the coin was heads or tails. Looking at my current scores: 9 have A's, 2 B's and sadly 1 F
- 11y ago