Learning programming at scale
radar.oreilly.com
radar.oreilly.com
I would love to have a code editing system that is as easy as that...I only have to deal with 20-or-so students at a time, so I don't need anything fancier than a way to manage 20-tabs at the same time. Having a way to jump to and collaborate on a student's session in the same way I can Cmt-T through a Sublime Text/Atom project would be all I needed.
IPython notebooks running on a central server is potentially another option for some languages.
edit: if you do find a working solution, please write it up and post it. I'd love to hear what works.
I went to a small college, so my programming courses were typically about the same size, 10-20 students. How do larger sections work in terms of getting feedback from professors? It seems critical, especially early on, to be able to understand the way students are trying to solve problems and then give them guidance how to get there. That seems to require more than "yes/no your code passed the unit test."
The professor would have the grading details on the whole class so if we missed a lot of points on a particular problem, they would concentrate on that for a bit.
If you needed personalized feedback, you could ask the professor questions after class, at office hours, at the discussions section to your TA, or at the TA's office hours. There just wasn't personalized feedback based on your assignments.
Each student does 1-3 small programs per class day, and I grade them all by reading the code and making comments. (I'm grading in another tab as I write this; I have 91 files to mark before 2:15pm today which is the output of a single section for a single class day.)
I've written tools to help me evaluate and make comments on the files extremely quickly. So that's what I do.
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.
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.
Here's the current exercises for my Java 1 class: 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.
Looking at my current scores: 9 have A's, 2 B's and sadly 1 F
I have never had to fail a student, but I have had a few violations of academic integrity that had to be dealt with. One of the few upsides of intensive grading is that I tend to remember specific errors, and a flag always gets raised when I see the same error twice, regardless of how many variable names were changed, etc.