I think my Python students are sharing a little too much. There are some students that are definitely doing unique work but out of 18 I would say 12 are relying on others to “lead the way” so to speak. It is actually a little difficult to tell because the programs are fairly short and there are only so many ways to code them. Usually the dead giveaway is the programs that have a list of numbers or words involved have identical lists. It is hard to accuse some of cheating because I know there are students that collaborate on their programs so they are going to end up with identical code. It is the students that wait for a finished program then just cut and paste that I have issue with. The obvious solution is to give each student a unique problem to code. Coming up with 18 unique coding problems that have the same learning objective is going to be a little difficult. Earlier this year I gave each kid a different Taylor series (sin, cos, tan, etc) to program in Small Basic. The only input was the number of terms to compute. I think I will try that again for Python. The code is simple, pretty much just for loops, but figuring the logic is the goal. The real fun comes when I have to grade 18 different programs.
Giving more quizzes is one solution but I really do not have a good method for the kids to turn in quizzes done on the computer. One of the many things I have to solve to get this programming class to work the way I want it. Doing hand written quizzes is a solution but that is just not real. How picky do I get in grading? If a colon is missing does that count as points off? If the kid were typing the code that missing colon would be something the IDE would pick up. I know how I code; type in what I think is the solution then go back and fix all my typos the IDE has caught. I have read a couple of articles on how beginning programming classes should not use IDEs; it allows hacking in code with the IDE making the corrections. I kind of liken this to math without calculators; it can be done and has advantages but they are out weighted by the disadvantages. An obvious solution for the quiz grading is to have the kids program in pseudo code. That has its own syntax issues but easier to handle than the code.
This is one of the fun things about teaching programming. There are just so many ways of doing it. With math at the end of each chapter plan on a test. Usually a nice traditional test that the students can study for, the right answer is pretty much the same for the whole class, and, if pressed for time, there are the canned tests in the book’s teachers’ manual to run through the copy machine. With programming the book chapters (if using a book) are really not the end of a block of concepts, programming is extremely cumulative, studying is a bit difficult because memorization is not a major factor and there is no such thing as a canned programming test. Oh, then there is the really smart kid that looks on-line and finds a different strategy for solving a problem that uses syntax the teacher has never seen before. (I have on of those. For almost every assignment he turns in I learn something new about Python. I know his work is original.)
I figure in a couple more years of teaching Python I will have built up a collection of problems I can hand out that will help reduce the excessive sharing. Right about when I decide to retire.