Slashdot Mirror


Resources for Programming Course TA?

cndrr asks: "I'm a Teacher's Assistant for intro to Java at my university again this fall. The last time I taught, all the TAs had students turn in their assignments through email. I'm thinking about scripting a site that will let students turn in their programs automatically and in some cases, run the program and (based on the output) automatically grade it. Has anyone else TAed and found a good solution that they would recommend?"

97 comments

  1. Don't do it. by Andrew+Sterian · · Score: 4, Insightful

    You'll waste as much time setting up and tweaking the system as you will doing it manually. Automatic submission and sorting into folders by course section is simple enough, but running the program and automatically grading the output??? That's madness.

    Besides, trying to distance yourself from your students as much as possible by using technology is the exact opposite of what teaching is supposed to be about. If the students know that a real human will be reading the output and providing constructive feedback, they're much more likely to take it seriously.

    1. Re:Don't do it. by AuMatar · · Score: 1

      Its also a security nightmare- you'd be compiling and running unknown code. Not a good idea.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    2. Re:Don't do it. by Anonymous Coward · · Score: 4, Insightful

      You'll waste as much time setting up and tweaking the system as you will doing it manually.

      It really depends on the setup at his school. When I was a TA, we had one "head TA" who would take care of making automatic grading tools, and as a result the rest of us probabaly spent a lot less time doing tedious grading then we needed to.

      Besides, trying to distance yourself from your students as much as possible by using technology is the exact opposite of what teaching is supposed to be about.

      Agreed, but when grading programming assignments, part of the grade comes from being able to produce the correct output, and a good automated grading tool can make sure that students are graded consistently on that. Sure, you should still grade on style and give feedback and all that, but when strictly grading the output, who really cares if it was graded by a machine?

    3. Re:Don't do it. by kbielefe · · Score: 4, Insightful
      It's not madness. I actually preferred my classes with automated output checking, for the following reasons:
      • It forces the teacher to make very clear program specifications.
      • It forces the teacher to make a reference implementation of their own assignment, so they will see for themselves where potential problems are.
      • Teachers provide some sample test cases and solutions, so that students can get instant feedback on the correctness of the program, even in the middle of the night. The final grading used those test cases, and some surprise ones to make sure the students thought about the entire algorithm and didn't just write to the test cases.
      • The automated grading only ever counted for maybe 70% of the grade. I never had a class with automated grading where a human didn't check for style, implementation, simple mistakes, etc.
      • The grader can still look at the output of failed test cases to provide constructive feedback, but they don't have to waste their time looking at it when the student got it right.
      • I always knew exactly what a certain percentage of my grade would be, before I turned in the assignment.
      As for implementation, all you need is a script that compiles the student's program, runs it against the test cases, then does a diff against the output from the reference implementation, and records how many test cases passed.
      --
      This space intentionally left blank.
    4. Re:Don't do it. by wed128 · · Score: 2, Insightful

      If he were to implement a system like this, i'm sure he'd use a secure sandbox. When teaching programming courses, anything more complex then "hello world" should be run as part of the grading process.

    5. Re:Don't do it. by feed_me_cereal · · Score: 3, Insightful

      If any student taking this class is good enough to circumvent the security for grading, they don't need to be taking the class and certainly don't need to worry about their grade.

      If any student taking the class actually tried something like this, they would be severely busted as all the evidence would be right there in their code (so long as the system is like ours, where submissions are handled and logged externally from where they're tested).

      --
      "Question with boldness even the existence of a god." - Thomas Jefferson
    6. Re:Don't do it. by Novus · · Score: 1

      Considering that this is a Java course we're talking about, setting up a sandbox is easy and effective; use a policy file with only the permissions the student's code needs (for simple programs that don't need file I/O, a blank policy file could even be enough). The result should be roughly as safe as running Java applets on the net and for the same reasons.

    7. Re:Don't do it. by Plautius · · Score: 1

      I see alot of people whining about automatic grading or how this guy is trying to avoid work. It doesn't sound like he's trying to avoid work at all! An automated testing script can be very beneficial to the students because it defines the assignment very strictly and will save them time and effort re-writing the front end of their program and focus on the real core concepts. Besides, with these huge classes that intro courses tend to have, the automated system will save him time organizing and, hopefully, give him more time providing constructive feedback. Source grading can suck worse and be less informative. One professor I knew of at a top 10 academic institution would only accept hand-written source code (!) and would mark one point off for every mistake you made starting from a start score of 100. Forgot a semi-colon at the end of a line, minus one point. Off by one error in a loop, minus one point. Papers came back literally illegable and scores ranged from 100 to negative 100 depending on his mood. Who the heck gives negative scores?!? It made determining grades at the end of the year impossible for the students and -1 marks were not accompanied with any helpful annotation so the only choice was to go in and ask what was wrong. Needless to say a guy who grades like that was not a pleasure to deal with in person. On the other hand, I've had automated grading systems which were like a dream. The instructor provides a skeleton which will compile within the grading framework but fail all the unit tests. As you work you fill in and extend dummy functions which were placed to make sure the assignment would work with the grading scripts. We could compile and recieve automated scoring from our accounts so that there were no nasty suprises after turn in. Finally, each assignment was returned to us with a detailed scoring from the automated script, which often included more detailed tests, followed by notes from the TA explaining what we did wrong if we missed points, issues with style, etc... So to summarize: 1. If you make a script, make sure the students can test compile and provide some basic sanity checking tests. 2. You still gotta mark up the code so that the students can really learn something. 3. No crazy negative scoring!!!

    8. Re:Don't do it. by CliffEmAll · · Score: 3, Informative

      As we try to teach our students, use the best tool for the job. In my opinion, that means only using automated testing when necessary. I am teaching a course (Programming in C & the UNIX Environment) the first time this summer. (I was fortunate enough to be granted a research assistantship when I was accepted to grad school, so I was never a grader.) I was offered the use of some automatic collection and grading scripts developed by someone in the department decades ago, but I decided to avoid them.

      In my case, grading does not constitute a significant percentage of my teaching and prep work. I only have 5 students in the class. Although this system would have saved me some time, I remembered my own experiences with a professor when I was an undergraduate. I do not know whether or not this professor used automatic testing, but he was rather draconian about things being written exactly the way that he would have written them and that they produce exactly the output that he envisioned. Unfortunately, I have learned from trying to complete his assignments and from my experiences in industry that it is extremely difficult to completely and unambiguously write a specification document. Furthermore, I wanted my students to be able to use their creativity in their assignments -- I instruct them, for example, that their program should produce certain pieces of data as their output, and that these should be organized in some tabular form, but I do not require that their output look exactly like mine. Thus, automated testing would be of little use.

      That said, you asked for resources, not to be talked out of it, and I assume your situation is significantly different from mine that the benefits of automation outweigh the drawbacks. The collection part is easy; either write a script they can call to copy their files to some specified destination, or write one that goes out at the submission deadline and copies from a standard location in their home directories. On UNIX, require the students to include a makefile with the all target. I am not very familiar with Java, but I presume they have a similar cross-platform approach. Assuming that all of the programs read from standard input and write to standard output, the testing part is also rather straightforward. Write your own implementation of the assignment. (An important step in any case!) Write some input files as test cases, capture your implementation's output for each of them, and then compare them to the output produced by the students' code with diff. For added security, do the entire compilation and testing steps in a chroot environment.

      If you adopt this though, remember that you still have to look through everyone's code, even the ones that pass all tests. Hopefully you are grading for style in addition to correctness, and you need to verify that students aren't plagiarizing each other.

      Good luck

    9. Re:Don't do it. by James_Aguilar · · Score: 1

      On top of that, in my experience, we don't normally chillax _with_ the students while grading.

    10. Re:Don't do it. by kalidasa · · Score: 1

      Yeah, because plagiarizing another student's code and changing the names of the variables requires great genius.

    11. Re:Don't do it. by wik · · Score: 1

      Especially when students change "left" to "l" and "this" to "that". Many of them never bother to compile afterwards.

      --
      / \
      \ / ASCII ribbon campaign for peace
      x
      / \
    12. Re:Don't do it. by pclminion · · Score: 1

      That's great and all, but wait until you're taking a compilers course and are subject to the restriction that your generated code be precisely identical to some reference code, because grading was automatic.

      I'd say while taking that course, I spent 20% of my programming time on making the output CORRECT. The remaining 80% of the time was spent making it EXACTLY MATCH the reference. What a pointless waste of time.

      And to anybody about to suggest that I gained experience "programming to an exact spec," well, you're right -- but that wasn't exactly the topic of study in this course! I could have spend 80% of my time learning more advanced concepts but instead pulled 10 hour sessions trying to figure out why my temporary variable kept getting assigned the name "t6" when the reference code's variable was called "t8." Puke.

    13. Re:Don't do it. by feed_me_cereal · · Score: 1

      that doesn't really have anything to do with circimventing security to change your grade, though. Actually, the automated graders make it *very* easy to catch cheaters this way. I always look over each sheet by hand, and if the grading script comes up with the same errors (or no errors) on two different submissions, I check them against eachother. I bust 2-3 people a semster this way.

      --
      "Question with boldness even the existence of a god." - Thomas Jefferson
    14. Re:Don't do it. by kbielefe · · Score: 1
      I agree that automated checking would be pointless in the case where there is more than one correct answer, unless the grader checks for all possible correct answers. I had an artificial intelligence class with automated grading that worked that way.

      Ironically, both my undergrad and graduate compiler courses had very little programming. Doing compiler optimizations by hand for a whole semester can really make you appreciate compilers.

      --
      This space intentionally left blank.
    15. Re:Don't do it. by cecille · · Score: 1

      The problem with strictly grading the output though, is that sometimes you end up really screwing students for no reason. We had one class that tried this, essentially it would just hit it with some input and then see if the output was correct. You had 10 chances to submit, each one that got rejected was 10% off. I can remember two very distinct problems with the system, the first being the TA's lack of spelling ability and the second being a ridiculusly strict guidelines on the output, some of which was not covered in the handout properly. In particular, I remember getting 10% off because I spelled the word correctly, and the program had the incorrect spelling (got that one back), and another time getting -40% (that's right...NEGATIVE 40%) on an assignment because I couldn't track down the difference between my output and the "correct" output from the system. In the end, it was a problem with whitespace characters (I'd used two spaces or a tab or something, can't really remember). That was absolutely the worst course I've ever taken. If you are planning on writing one of these things, you really have to put in the time to get them right, otherwise they can be more trouble than they are worth.

      On the other hand, when I TA'd, we put together an automatic submission system (no testing, just submission), which worked great. But the key part was that in the end we had a real person grading it, the log system caught everything, and the prof was really good with the students who he could see logged in and were having trouble submitting.

      Moral of the story is be careful, and don't rely too much on the automatic system to deal with the students for you because you'll never get it perfect, and the students WILL complain if they feel they are being ripped off.

      --
      ...no two people are not on fire.
  2. Do the work. by mukund · · Score: 3, Interesting

    I'd rather you manually grade it and provide valuable remarks to your students about their programs.

    If universities were all about automated stuff, students can very well learn from course textbooks such as those prescribed by ocw.mit.edu by themselves. They go to university so that they can interact with their professors, get their amateur evaluated properly to shape their future work, and collaborate with their classmates.

    --
    Banu
    1. Re: Do the work. by gidds · · Score: 1
      Well, quite. Have a machine grade the programs, and you might as well have a machine write them.

      (Of course, you'd then need to write a program to write the programs...)

      --

      Ceterum censeo subscriptionem esse delendam.

    2. Re:Do the work. by MindStalker · · Score: 1

      Thanks for reminding me of ocw.mit.edu. Saw it a while back when I simply didn't have the time and quickly forgot. Good stuff! :)

    3. Re:Do the work. by Anonymous Coward · · Score: 0

      I disagree that automated service wouldn't be beneficial, though usefull comments are always a plus. The University of Nevada, Reno uses a system for some of their courses where the students submit their programs electronically. This then compiles them and runs them against a number of test cases. The results of these test cases are given back to the student immediatly with a diff of the output so that they can go back and fix their program before final submission. This provides the student both immediate feedback and the ability to correct problems with their programs before they make a final submission. When the final submission is done the programs are run against a larger number of automated tests and then the TA sends out emails detailing the final score for the program. This works well, but the TA (in my experience) doesn't actually look at the code to see why tests were failed. Though the TA is available to answer those types of questions should the students bother to ask. The first time students use the Submit site is with CS 302 - Data Structures. This may not provide enough feedback for intro to Java students, or it might, it really depends on if this is the first programming class the students are taking or not. I'm assuming it is the first cs course simply because many universities have moved to teaching Java as the first language.

      Now, I can't recommend the software that UNR uses because if I remember correctly it was written by a grad student, and the interface really needs some work. I can recommend the process however. One of the biggest benefits of this type of process in my opinion is that the student is provided with immediate feedback, and with test cases that the student likely didn't think of. Additional information from the person grading the project would be a bonus.

      Additionally we can address the fact that this is an intro to java class. At this level collaboration with other students is probably a bad thing. From what I've seen of people taking classes at this level is that they will do the minimum amount of work required, and if they can get a partner to do the work all the better. This is especially true of schools (like UNR) that require all engineering students to take at least a basic programming class (CS 135/201 at UNR). A perfect example is a civil engineering student friend of mine that took the class during a shortened summer schedule, got his partner to do most of the labs that they could figure out, and then had me review all the labs that they couldn't figure out. He didn't learn anything from the course primarily due to collaboration. What he does remember is using namespace std; simply because std was funny to him.

  3. Beware automatic grading... by keesh · · Score: 1

    Automatic grading apps are, uh, somewhat prone to breakage. I know at least one university that uses them found that certain students just wrote programs that did sneaky tricks rather than the assignment at hand (fork off a child process that sleeps for a bit then overwrites the grade file, then just output whatever). Perhaps more effort to do a one off program that way, but far less in the long term.

    Said students got to keep the grades, too...

    1. Re:Beware automatic grading... by Nutria · · Score: 1
      Automatic grading apps are, uh, somewhat prone to breakage.

      Programs with bugs. What a fscking novel revelation!

      (fork off a child process that sleeps for a bit then overwrites the grade file, then just output whatever)

      What that means is that their security process sucks eggs.

      --
      "I don't know, therefore Aliens" Wafflebox1
    2. Re:Beware automatic grading... by l33td00d42 · · Score: 1

      fools!

      one of the benefits of Java: security! not only could they not do malicious things, we had defenses against DOS: time limit and non-instant execution. Instead, submissions were queued up and executed one at a time. also, if you refreshed the status web page faster than was automatic, you got demoted in the queue. :) typical wait time: 10 minutes or something. people submit way too often if there's no wait time. you need to get them to do a little thinking before they just tweak stuff aimlessly and submit again.

      also, we found out that running the same set of test cases each time was a bad idea and folks could circumvent writing a full implementation. our solution: randomly choosing test cases.

  4. Umm... by Angst+Badger · · Score: 2, Insightful

    Are you sure it's a good idea to let students execute arbitrary code on your unattended machine?

    I mean, I know *I* would get ideas...

    --
    Proud member of the Weirdo-American community.
    1. Re:Umm... by conJunk · · Score: 1
      exactly, that was my first thought when reading the quesion. telling kids "log on to my box and run whatever code you came up with" sounds like recipe for disaster, and a potential huge liability:

      student's mom: "why doesn't johny have a grade for your class?

      you: "well, um, i had this idea about asignments, uh, and now i don't have anybody's work

      mom: "lawyer!!! i want a lawyer!!!

      just read through it, seriously, it'll much easier than unbreaking whatever the kids wind up doing to you
    2. Re:Umm... by feed_me_cereal · · Score: 1

      If you would "get ideas", then you wont be taking an introductory java course. Besides, it would be arbitrary java code, which makes it harder, and besides even all of this, if the submission system was set up right, you couldn't help but be on record for your attempt, and would then be busted severely.

      --
      "Question with boldness even the existence of a god." - Thomas Jefferson
    3. Re:Umm... by Anonymous Coward · · Score: 1, Insightful

      I've TA'd 3 Intro Java courses that use automated grading and I've never had anything bad happen by running the code. In fact, I've never ever heard of that happening at my school with anyone. It's not very common that kids in an introductory programming course have the know-how to destroy your computer when they can't even get a for-loop working the way they want.

    4. Re:Umm... by kuperman · · Score: 2, Interesting
      Are you sure it's a good idea to let students execute arbitrary code on your unattended machine?
      From a security standpoint, that generally would be a bad thing to do. However, there are a few simple things that can be done to minimize the problem. In addition to the sandboxing mentioned elsewhere, you can create a normal user account that is the "grader" account. The TA/Instructor copies the source into that account and then can run it and will have no more privs than the student did -- so any badness that happens could have happened by the student directly.

      I mean, I know *I* would get ideas...
      And that would simplify the grading of your assignments for the rest of the class immeasurably. You'd be out of the class with a failing grade and probably either suspended for the semester or expelled from school. Depending on the school's Acceptable Usage Policy (that sheet you didn't read when you got your account) and the level of crankiness of administrators, you'd have potential criminal charges brought up against you.
  5. RoboTA. by Anonymous Coward · · Score: 1, Funny

    "I'm thinking about scripting a site that will let students turn in their programs automatically and in some cases, run the program and (based on the output) automatically grade it. "

    Grade what? If they can automate it, then you're out of a job.

    1. Re:RoboTA. by Metasquares · · Score: 1

      For a TA, that is a good thing - more time to do research :)

  6. A Student Perspective - DON'T DO IT! by AaMcT · · Score: 2, Insightful

    I had a class last fall in which the prof used an automatic grader. He had a couple page document describe all the nit-picky formatting requirements we had to follow so that his automatic grader could run it. And, if we missed even a signle req, we got docked for it (generally in multiples of 10% of the assignment). Many people scored below-average to failing on their first couple of assignments because of this system, even though their code was flawless. So, please, please don't use automatic graders. They're more trouble than their worth, and you students will appreciate and specific comments you give. Even if it runs perfectly, comments can still sometimes be useful to make it even better.

    1. Re:A Student Perspective - DON'T DO IT! by InakaBoyJoe · · Score: 1

      Formatting requirements are *not* nitpicky. Wait till you graduate and have to read and extend your coworker's code. Then you will understand why formatting standards are used.

      Students always complain about this stuff, but the bottom line is, if you're not comfortable paying attention to details, you should consider sociology or something.

    2. Re:A Student Perspective - DON'T DO IT! by Novus · · Score: 1

      Having formatting requirements is one thing; punishing students equally or worse for (for example) indenting incorrectly and writing broken code is another. In my opinion, errors that can be fixed by a well-known script or program (e.g. indent) with no harmful effect on the functioning of a program should under no circumstances be conflated with anything that leads to incorrect behaviour of the program. Both my superiors and my students agree with this sentiment.

      The last thing we need in the software business is an influx of programmers with obsessive attention to formatting detail who don't really care whether their code works!

    3. Re:A Student Perspective - DON'T DO IT! by InakaBoyJoe · · Score: 1

      > In my opinion, errors that can be fixed by a well-known script or program (e.g. indent)

      Then why didn't you just run the script on your badly formatted code before you handed it in? Sounds to me like you lost a couple of points are trying to blame the grading scheme after the fact.

    4. Re:A Student Perspective - DON'T DO IT! by An+Onerous+Coward · · Score: 1

      I disagree with your evaluation of the "importance" of following a specification. Specifications are often crucial to making programs interoperate, and if the specification says you can't have blank space at the beginning of the first line following such-and-such declaration, then having blank space there really does constitute an error in your program.

      Automatic graders are better for both students and teachers, because the teacher/TA can focus on the essence of your program, and let the machine worry about the repetitive grunge work that ensures input A delivers output B. That should mean that the teacher can actually talk about your algorithm, coding practices, etc.

      I do agree that it's frustrating to get docked for seemingly "nitpicky" things. Out of fairness, I think a teacher using an automatic grader ought to provide some data sets and the expected output. Even better, provide a reference implementation, so that the students can come up with their own test cases. But in real life not every standard has a reference implementation, and then your only recourse is to obsess and nitpick your way to conformance.

      --

      You want the truthiness? You can't handle the truthiness!

    5. Re:A Student Perspective - DON'T DO IT! by Novus · · Score: 1

      You're missing the point entirely. The grading is supposed to evaluate a student's skills and provide feedback for his development, not evaluate whether he can follow an arbitrary set of instructions that are mostly subjective in origin to begin with that can be performed by a reasonably simple program.

      As far as I can remember, I've only had one programming course where whitespace conventions were enforced and, even then, the effect on the grade was much less than the penalties mentioned here. Over here in Finland, a TA trying to punish students for using the wrong indentation would almost certainly find himself swamped by students' complaints irrespective of whether the grading scheme were known before submission or not. This, of course, doesn't prevent me from being a stickler for correct indentation, but it makes it unreasonable for me to demand it of others.

    6. Re:A Student Perspective - DON'T DO IT! by SJS · · Score: 1
      Having formatting requirements is one thing; punishing students equally or worse for (for example) indenting incorrectly and writing broken code is another.
      That's why you go through and apply weights to the various things you're scoring. "Consistent indentation" might be worth, oh, 3 points ( 3 = consistent indentation, 2 = minor lapses, 1 = made an effort, 0 = randomness ), while "accomplishes the task" might be worth 30 points.

      In my opinion, errors that can be fixed by a well-known script or program (e.g. indent) with no harmful effect on the functioning of a program should under no circumstances be conflated with anything that leads to incorrect behaviour of the program.

      In school, you're trying to teach the students several things at once. The only way you have to teach a student to write clear code is to penalize them when they fail to do so; and it's best that this is done early, before they acquire too many bad habits.

      Consider -- any reasonable coding project will have a Coding Style Guide. (If you come across a project with more than three programmers and there isn't at least an informal Coding Style Guide, run like hell. You'll save yourself a lot of grief, unless, that is, you enjoy tracking down stupid little bugs.) Getting a student used to this early is important.

      Further, imposing formatting constraints is good for the novice programmer -- the easier code is to read, the easier it will be for someone to help them with their program. Students who plop down some ugly code and say "It doesn't work, can you help me?" do not get the same quality of help as students who have taken the time to format their code consistently. (And it's not uncommon when you tell a student to go away and come back after they have cleaned up their code (by hand) that they return to say that they found the error.)

      Finally, it's in the grader's best interest to look at readable -- read, well-formatted -- code. More time can be spent on figuring out where the student almost got it right. A grader's time is limited, wasting it on trying to parse ugly code isn't what the grader is being paid for. A student who tries to make a grader's life more difficult than it needs to be should reap what they sow.

      The last thing we need in the software business is an influx of programmers with obsessive attention to formatting detail who don't really care whether their code works!

      The last thing we need in the software business is this continuing influx of programmers who so despise writing that they format their code randomly, choose terrible variable, function, and class names, and eschew comments. The mantra of "so long as it works, ship it!" results in buggy and hard-to-maintain code.

      So while we may not want programmers who obsess on formatting to the exclusion of all else, we most certianly do not want any more programmers who disdain all formatting. It is possible train a programmer with an obsessive attention to formatting detail to produce code that works; it's far harder to train a programmer with a pathological disdain for formatting to produce maintainable code.

      If a programmer can't follow instructions, their code may compile and run, but it ain't gonna do the job.

      --
      Pick One: http://www-rohan.sdsu.edu/~stremler/sigs/sigs.html (Note - disable Javascript first!)
    7. Re:A Student Perspective - DON'T DO IT! by Novus · · Score: 1
      There seems to be some misunderstanding here.
      That's why you go through and apply weights to the various things you're scoring. "Consistent indentation" might be worth, oh, 3 points ( 3 = consistent indentation, 2 = minor lapses, 1 = made an effort, 0 = randomness ), while "accomplishes the task" might be worth 30 points.
      ... Which is exactly the point I was trying to make (and pretty much the way I grade, too).

      Finally, it's in the grader's best interest to look at readable -- read, well-formatted -- code. More time can be spent on figuring out where the student almost got it right. A grader's time is limited, wasting it on trying to parse ugly code isn't what the grader is being paid for. A student who tries to make a grader's life more difficult than it needs to be should reap what they sow.

      Formatting is only a minor part of coding conventions. I'm not saying that descriptive variable names, sensible division into classes/functions and so on are unimportant; quite the opposite. Students who convert a simple problem into 700 lines of gratitious bit-shifting (for no apparent reason other than a desire to save a few dozen bytes of data space!) will only be told that their program doesn't work, I don't understand why and I don't care about finding out as long as it's unreadable (except in the unlikely case in which it works, of course). I can fix sloppy indentation in about five seconds (assuming I even see it in the first place!); figuring out a confusing design can take hours or even days and I don't have that sort of time.

      I don't see any point in trusting students to indent properly; I prefer to reindent their code before reading it. If they've been indenting manually, the place where their program logic breaks due to a missing set of curly brackets (for example) is likely to be the place where their indentation is also wrong. The problematic students aren't going to follow coding conventions anyway, and student/assistant relations are certainly not going to get any better by imposing strict coding conventions.

      Enforcing indentation rules manually becomes more or less obsolete once version management systems and/or editors with built-in formatting abilities become more prevalent. indent, for example, happily converts between brace placement styles and suchlike, too. Even though programs have been traditionally expressed as character streams, it may become more useful to work in terms of abstract syntax trees (visual programming systems have been doing something like this for ages, but have little mainstream support for many other reasons). In this case, indentation is an aspect of the editor, not the code.

      Coding conventions can, in my view, be divided into fully automatable rules (whitespace, indentation, capitalisation, brace positioning, suchlike) and requirements for design knowledge to be visible in the code (descriptive naming, commenting, etc.). The former are the sort of thing that editors or some other program really should handle for us and probably will in the future (and, with some configuration, already do!); the latter need human input that can't be avoided without a complete rethink of the whole way we program. Which sort of skill do you think we as teachers should be concentrating on promoting?
  7. Suggestion ... by Monkelectric · · Score: 3, Insightful

    How about doing your job instead? Automated turn in is fine, automated grading is bullshit and a perversion of academic principles.

    --

    Religion is a gateway psychosis. -- Dave Foley

    1. Re:Suggestion ... by Dachannien · · Score: 3, Interesting

      If part of the assignment requirement is that, upon being run, your program should produce a specific output, I don't see where there's a difference between having a human run the program and determine whether the output is correct, and having a script do the same thing.

      Sadly, automating any part of the grading process means you end up giving a lot less feedback to the students concerning their errors, but that's the prerogative of the instructor and assistants. In some classes, however, the student-to-TA ratio is so large that it would be impossible to grade every homework manually.

      Also keep in mind that some TAs don't actually get paid for their efforts - and those who do usually make peanuts. At some schools, and in some academic programs, being a TA is a required part of your graduate degree. And since they're working on their own degree, the TAs actually have a lot of their own work to do in addition to grading hundreds of homeworks every week.

    2. Re:Suggestion ... by Novus · · Score: 2, Interesting

      Fully automatic grading breaks down quite badly if there is a possibility of students making small mistakes that cause large amounts of tests to fail (or, conversely, big mistakes that cause few tests to fail); in this sort of scenario (and concurrent programming is one of them), you really want a human to assign the final grade by identifying the underlying mistake/bug instead of the symptom/failure. However, having automated tests that are designed to expose common problems is a good thing.

      Of course, if you like giving out failing grades for messing up input or output formats while letting blatant errors in mutual exclusion pass by with minimal impact, you can do automated grading based directly on test results. Trying to make the computer deduce the actual mistake from the test results, on the other hand, can be quite painful (this is essentially automated debugging, which may be possible to some extent; see Andreas Zeller's work on Delta Debugging).

    3. Re:Suggestion ... by EmperorPenguin · · Score: 1

      The OPs "job" is to educate students not to work hard doing repetitive busy work. Automating repetitive work is working smart, not hard. Now the TAs should take the time saved and spend it working with students one-on-one.

    4. Re:Suggestion ... by Red+Alastor · · Score: 1
      Fully automatic grading breaks down quite badly if there is a possibility of students making small mistakes that cause large amounts of tests to fail (or, conversely, big mistakes that cause few tests to fail);
      It becomes less of a problem if you let students use the grading system. Write test cases and send them to students, they'll know in advance how many of them pass and will be able to modify their program appropriately.
      --
      Slashdot anagrams to "Sad Sloth"
    5. Re:Suggestion ... by Monkelectric · · Score: 1
      Exactly. And its also how students graduate writing all their programs as one function. Ive seen perfectly "correct" programs that were 3000 lines of if statements, that could have been accomplished with 200 lines of code.

      At my place of business, we just hired a junior engineer (over my sternious objections) who just graudated from college and asks questions like "How can I compare variables?" ... I have to think that automated grading is part of the problem that creates people like that :)

      --

      Religion is a gateway psychosis. -- Dave Foley

    6. Re:Suggestion ... by Novus · · Score: 1

      Giving the students some of the tests does decrease the chances of irrelevant errors; however, you run the risk of students writing programs to fit the tests instead of the specs; in other words, their mistakes are going to be ones that your tests don't find. At a minimum, I'd keep the more complex tests to myself.

  8. no-no by Anonymous Coward · · Score: 1, Insightful

    Automatic grading is unethical.

  9. So... by Anonymous Coward · · Score: 2, Insightful
    Let me get this straight. Professors no longer teach most classes, they're too important to teach something so basic I suppose, and have dumped that task on TAs. You, a TA, are now too lazy/unwilling to do this as well and instead are trying to farm it out to an automated process?

    1. Re:So... by An+Onerous+Coward · · Score: 1

      Laziness? Automation isn't laziness. There is no virtue in spending hours doing something that can easily be automated, and it's a shameful waste if the time could be used more productively. In this case, time spent verifying inputs and outputs could be better spent reading and critiquing student code, meeting with students to answer their questions, or maybe just not sitting around scanning over reams of student program output, making sure the right answers are hidden somewhere in there.

      Now if he'd asked about the best way to farm the work out to a TA in India....

      --

      You want the truthiness? You can't handle the truthiness!

  10. Automatic grading? by Anonymous Coward · · Score: 0

    I've TA'd programming classes and I wouldn't suggest automatically grading anything. The classes I've graded for haven't had very difficult assignments and it's usually very easy to generate the correct output. I let them know that I *expect* them all to have correct output and I grade based on their code.

    Setting up a site sounds like a good idea, though, and having it run and compare the output is a good idea that will save you a lot of time, but that should just be the first step.

  11. My school uses a combination by WatchTheTramCarPleas · · Score: 2, Insightful

    We have an automated submission system that requires the program to compile for subnission. It also has the capacity to run the program and check its output (command line stuff only). It also ensures that the work is turned in on time and that it contains all of the files required (unless of course we are given an assignment giving us free reign on the class structure etc.) Though, the TA does go through all of the code levaing coments where appropriate and those comments have been a massive help. Overall I like my end of the system, and I can see how it could be likede on the TA's end. With those considerations, if you believe that you wouldn't waste more time setting a system up than you would save with it ,I would go for it.

  12. All my classes do it by xWeston · · Score: 2, Interesting

    Have any of the previous posters actually attended a large university in the computer science program?

    Every class I've taken at UCSD does some sort of automatic grading on the programming assignments. It would be impossible to grade everything otherwise... Last quarter we wrote a compiler that ended up being a few hundred KB of source. There were over 200 test cases ran by the autograder.

    All of the assignments are turned in from a unix prompt using a TURNIN command after prepping for the appropriate class.

    The class I'm working on now (Operating Systems, using NACHOS) even has autograder() methods in the skeleton of the code that are used during grading...

    I agree for a first class some feedback and hand grading might be necessary, but even with autograding you can add comments after looking at the code that causes similar test cases to fail.

    1. Re:All my classes do it by Damathon · · Score: 1

      "Last quarter we wrote a compiler that ended up being a few hundred KB of source."

      A few hundred KB of CUP/lex autogenerated source... c'mon, don't let people think we're reinventing the wheel over at UCSD. =P

  13. WebCT, university script by eli2k · · Score: 1

    Does your university have a subscription to one of those software scripts, such as WebCT? It's usually used to post lecture notes, assignments, and provides a bulletin board for questions. It also has a submission section (for WebCT) that allows students to submit their assignments by a certain time. Then you can download them all, each file separated into student accounts, and compile each one and grade.

    1. Re:WebCT, university script by An+Onerous+Coward · · Score: 1

      You're either paid to shill for WebCT, or you must just really, really hate the guy who wrote the original question. As in "he killed my family and I'm out for revenge" hate.

      Why not just hunt the guy down, blind him, chop off a few extremities, and leave him in a ditch? It would be a kindness in comparison to WebCT.

      I haven't had the best experiences with their software.

      --

      You want the truthiness? You can't handle the truthiness!

  14. One size doesn't fit all by Frequency+Domain · · Score: 1

    Some amount of automation is helpful to avoid being swamped, but I don't think that a fully automated process can do the job. I require my students to generate an executable jar for submission, but also provide unit tests to them for the early assignments. Stage one of grading is to run a script which runs each of the jar files against the unit test. I then print the programs and mark them up for formatting and style, paying particular attention to those who ran afoul of the unit testing stage. Later in the course I start providing a spec and making them write their own unit tests, but I still use my own unit test modules for grading.

  15. I second that... by Eckzow · · Score: 0

    I agree. At U-M we pretty much autograde everything. As an added bonus, most classes require you to not only submit the source to your program that compiles and then passes the tests, but you're required to submit testcases that are then run against intentionally buggy programs written by the instructors.

    This way you get a score not only based on how well you completed the task, but also your ability to write high-coverage test cases--and considering how many corner-cases get exploited these days, teaching kids to write their own test suites sounds like a great idea to me.

    As for the malicious code factor, since all of the testing is done on a remote machine and you receive reports by e-mail, you'd have to either A) have inside knowledge of exploitable holes (in which case you're proabably a TA already) or B) write code that performs recon and reports back to you. Since I know our TA's at least scan through people source code submissions, writing recon code would probably get caught. Our school's Honor Code would not be very forgiving at that point etiher, you'd likely find yourself looking for another school to complete your degree at.

    Bottom line: grading by hand is great until you've got 150 pipelined CPU simulators to go through by hand. Automated grading is an easy solution.

  16. Do it, but don't do *only* it. by feed_me_cereal · · Score: 3, Interesting

    For you and all the other people saying human eyes are better than a computer for grading:

    They don't need to be a substitute, and they can help a great deal in doing a lot of the manual checking you would be doing anyway, as well as the organizational part. I'm a TA, and I use a script to check for just about every simple mistake I can think of, and then I go over every assignment by hand, with a printout of my test-script's results. The script doesn't so much grad ethe work, but point out any output that might not be exactly what I expect, over an assortment of tests. The students often comment that these scripts, which I also hand back with the assignments along with output from the scripts, help a lot to identify not only what their problems were, but what sorts of things they should have in mind when writing their programs. I then *carefully* go through their code by hand to insure they were using good style and didn't coincidentally happen to pass any test with code that isn't technically correct.

    When you have over 60 students in a class and have to grade long programming assignments every week, these scripts are essential to getting my work done in a timely manner. My personal attention and comments are not replaced by my scripts, but are enhanced by my scripts. My time spent grading is made *more* effective.

    Also (for cndrr): I might be able to provide the main part of the script we use, I'd just have to check with my instructor. The test scripts we use are fairly easy to write using it, if you don't mind doing it partially in scheme... (our department is in love with that language). Let me know if you're interested.

    --
    "Question with boldness even the existence of a god." - Thomas Jefferson
    1. Re:Do it, but don't do *only* it. by iMaple · · Score: 3, Interesting

      I was a TA for a programming course and we had managed to get a fairly automated system running very smoothly. It was a huge class with 7+ TA's and the submission script automatically alloted each TA his/her share (randomly to ensure fairness). The automated test script required TA intervention for student program. It complied and ran the program and compared it to the standard output and displaying the output with a fail/ pass result. If the test failed , it opened the souces files for the TA to review. And finally the TA would have large list of errors to chooses from (with optional comments), and predefined penalties. The final score was just written to a CSV text file (one for each TA).

      This cut down the time required by almost 80% . The correct programs were easy to grade (automatically) and most programs with 'standard'(expected) errors did not take too long either. Once a while some one would have weird errors and the TA's would have small challenge finding those. It was the most fair system I could think of and took care of most of the drudgery without being unfair (the only important caveat was to make sure that test cases for the tester script were solid and the students couldnt cheat their way out, by pre defined responses).

    2. Re:Do it, but don't do *only* it. by l33td00d42 · · Score: 1

      7 TAs == huge class? ha! our CS2 class sometimes had 800 students (across all sections) with about 40 TAs. We also did all the stuff people are discussing: automatic instant feedback, security manager, trapping I/O and stuff like System.exit(). for non-instant feedback assignments, we had a graphical UI for assigning grades and adding comments for parts of the assignment based on test results run in the same VM. it would then email grade reports to the students and output codes to be copied and pasted into the Web interface, which was fancy itself: MOTD, scheduling office hours, limiting TA permissions to their section, deadline enforcement, per-student granting of extensions, etc.

      by the way, this was CS1322 at Georgia Tech ca. 2001. i don't even know how much of the stuff is left. hmm... WebWork still seems to be up.

    3. Re:Do it, but don't do *only* it. by Anonymous Coward · · Score: 0

      < snicker >. Webwork is `fancy'? No comment...

    4. Re:Do it, but don't do *only* it. by SlickCow · · Score: 1

      The funny thing is that you posted a comment that says "No comment..."

  17. The CS Department At Yale by Vengie · · Score: 2, Informative

    Is very much automated-submission and grading -- or at least was from 00-04. Some professors do the grading by-hand (i.e. they run scripts by hand) but the majority of classes I took where you turned programs in, there were scripts that graded you that you could run part of yourself. (i.e. there were "public" and "private" scripts that used the same interface.)

    In a large part, it depends on how big your class is, and if you plan on continuing teaching. One professor, (whom I idolize) has been doing this long enough to have set up an extensive and all-inclusive framework. Can't go (too badly) wrong when you roll your own, but YMMV.
    -b

    --
    When in doubt, parenthesize. At the very least it will let some poor schmuck bounce on the % key in vi. (Larry Wall)
    1. Re:The CS Department At Yale by Anonymous Coward · · Score: 0

      Out of curiosity, which professor was it that you liked, if you don't mind posting? I'm no longer at Yale, but used to be there (not as a student) and never had any in-depth experience with most of the professors. I did audit classes by Zuckerman (whom I liked quite a bit) and McDermott (whom I had little time for at the time, so it's hard to form an opinion on). I also remember Krishnamurthy and knew, by proxy, Scasselati. I also heard Eisenstat was good at low-level stuff.

      Anyways, I ask because I may be back there for a bit, and I'm always interested in knowing who the good professors are in case I decide to sit in on some stuff.

      Cheers!

  18. Re: Very True by shidarin'ou · · Score: 1

    I always made the grades up off the top of my head at the end of the semester, and found it much more fitting with academic tradition and principals.

    hehe, jk.

  19. Required Environment? by theonetruekeebler · · Score: 1
    Are you doing graphical programming? If so, skip this.

    If your students are all writing CGI-style programs, maybe reading and writing a file or two, why not set up a Linux or FreeBSD box for them? Open ftp and ssh for them and require them to build their programs there. Your requirements for each class will be that they compile and run their programs on your server, do a run under script(1), then hand in all source, output, data and log files via a script you wrote called handin assignment [file...], which copies [file...] into your directory $assignment/$studentid/[file...]. Since handin is suid, write it carefuly: It should contain no mkdir or similar commands.

    This will be good for everyone. They will pick up the rudiments of Unix and using remote computers. You will pick up the rudiments of Unix administration, and all your class stuff will be in one convenient directory tree per assignment.

    Just for fun, you could write yourself a little program called comment that lets you mark up their source code -- their stuff will be in mono and your comments in mono italics . Print 'em up and give them back at the beginning of class.

    Make sure the students have access to a good variety of editors, including a couple of dumbed-down ones like pico.

    The downside is that you'll spend a day or two going over the rudiments of Unix, and have to do some early handholding for them, but it will pay off in the end.

    --
    This is not my sandwich.
    1. Re:Required Environment? by Sharth · · Score: 1

      and then a kernel exploit will come out and your box will be fucked the day when all of the assignments are do for some major project. And poof, things are now pushed back. Oh, and they probably deleted the logs of them doing this as well. And the logs weren't remotely stored because we're talking about someone new to *nix / bsd.

    2. Re:Required Environment? by theonetruekeebler · · Score: 1
      Excellent point! We should also do all our classes via e-meetings because if you put all those people in a room together one of them might have a knife or a gun and start attacking all his classmates, and the attacker will get away with it because we're talking about someone new to hand-to-hand combat.

      Obsessing over the worst possible outcome is usually a waste of time. We're talking about a system where only students have accounts. And it's a beginning programming course, for crying out loud. In Java, no less.

      A lesson on security is beyond the scope of this post, but if you're feeling paranoid, you may wish to examine options like mounting the users' FS noexec (I don't think .class files don't need the execute flag). Undoubtedly the school has a policy about unauthorized computer use: Make it clear that system crackers will fail the class, get expelled, yadda yadda yadda.

      But on the whole such measures are not necessary: Students generally recognize that it's not in their best interest to interfere with the progress of the course and their education. Not once in my computer science studies was a class's server compromised by a student. Telling students they're being entrusted with a responsibility has a remarkable positive effect.

      --
      This is not my sandwich.
  20. short answer by drac0n1z · · Score: 1

    you are getting paid to mark the papers, to identify problem areas and to solve those problems for the students, you have to provide feedback to them. if you want to be lazy and skip on doing that please dont ever accept a teaching responsibility, i had to teach several friends how to program in java since our lecturer was lazy and incompetant. somewhere someone will have to take the responsibility. work out how much those students pay per class and per evaluation and you will quickly realise you are trying to screw them over. i am a student.

    --
    This is my sig.
    1. Re:short answer by An+Onerous+Coward · · Score: 1

      How is he supposed to identify your weaknesses and give your code individual attention when he has to spend all his time poking at the binary, making sure it gives the outputs it's supposed to? There's no reason to resent a teacher or TA trying to reduce the busywork associated with grading dozens of submissions. It's a simple fact of life that most all of us are trying to do too much with too few resources, and if you can free up that much instruction time by simply formatting your outputs properly, then it's a valuable investment for your time.

      --

      You want the truthiness? You can't handle the truthiness!

  21. Version control: your greatest bacon-saving device by dsandler · · Score: 3, Interesting

    In COMP 314 (Rice University's sophomore-level programming & algorithms class, taught this past spring by Prof. Dan Wallach) we TAs solved this problem with Subversion.

    An important part of real-world programming is teamwork; in 314 we embrace this and randomly sort students into groups of two for pair programming. The groups change for each project, and each project group gets a spot in a svn repository set up for the course. ACLs keep groups from peeking at one another's changes (for example, see this team list, which is actually just a slice of our Subversion access control file). Students were required to tag their submissions for each of the project milestones: specification, prototype, final; this was how students submitted code for these deadlines. From timestamps we could easily see which groups incurred "slip hours" for late turnins.

    There were a number of reported incidences of lost work or conflicting changes which would have been disasters if not for svn, which saved their bacon. Groups that learned to check in early and often knew that accidental deletions or disk failures posed no threat to a successful project submission. A few enterprising teams even used tags and branches to help organize complex development efforts. In all, it was quite a successful adventure and we'll probably do something similar in the future.

  22. grading by source by Anonymous Coward · · Score: 0

    In one class I had a prof who would sit down and read the source and grade based on what he saw. He never ran a program but could (almost) always tell you exactly how the program would behave. The class was rather impressed by this. Most of my other classes did the auto submit and grade thing.

    Except.... He gave a failing grade to one program I wrote - he said it wouldn't produce the desired output. We argued for a while and I finally agreed but insisted we run it to find out for sure. It did exactly what it was supposed to do but neither of us could figure out why. The program involved recursion.

    -E

    1. Re:grading by source by Chris+Pimlott · · Score: 1

      Did he amend your grade then? I mean, if you don't understand how your own program worked, you don't deserve a passing grade, even if it did work correctly.

  23. you might need this too.. by hasrat · · Score: 1

    Considering it's an intro class, I am sure lot of students will unintentionally end up with similar programs. http://www.cs.berkeley.edu/~aiken/moss.html

  24. Source checking by VGPowerlord · · Score: 1

    I don't know about everyone else, but the instructors that I've had for programming will read through the code first before compiling and running it.

    There's 3 reasons for this. 1. To make sure you followed coding standards. 2. To make sure you weren't doing something destructive. 3. To make sure you were actually using the programming constructs that the instructor wanted you to.

    To expand on 3, for simple programs like you run into in an Introduction class, it's possible to do a recursion assignment using iteration. Or to use if/else if/else where you were asked to use switch/case. Reading the code will catch these things. Just checking the output won't.

    --
    GLaDOS for President 2016! "Well here we are again. It's always such a pleasure." -- GLaDOS, 2011
    1. Re:Source checking by Novus · · Score: 1

      Of course, it's possible to run the source code or some suitable intermediate form (Java bytecode is very nice for this sort of thing) through a program that checks for illegal constructs (for example, for or do/while loops in your recursion example) and checks for adherence to coding conventions. Writing this program is left as an exercise for the student... I mean, assistant.

      As I already mentioned, a good sandbox (OS or VM level) should handle the security aspects.

      The real reason to read the code is that testing doesn't (usually) tell you what the actual bug is, just its symptom(s). Unless you know this, you can't give proper feedback or grades.

  25. UC Berkeley Does It by Josuah · · Score: 2, Informative

    Berkeley's been doing this sort of thing for years and years now. I'm sure someone there can help you identify software that can do what you're looking for. Unfortunately, I never TA'ed while attending, so I don't know what they use.

  26. Tufts University, provide by myc18 · · Score: 1

    The Tufts Department of Computer Science use a homemade software called "provide" (Professor Alva Couch wrote it) It is a simple online grading utility. This program allows simple submission and online grading of electronic assignment submissions in Computer Science and Computer Engineering courses. It is specifically designed to be easy to use by graduate students working on their own, to leverage faculty resources and decrease faculty workload in managing grades. In production in EECS, not publicly distributed (1998-present).

    Assignments can be graded manually or automatically. The Intro to CS and Data Structure instructor usually write an automatic grader for assignments. Programming style is graded manually. For algorithm, graphics, and theory assignments, students submit them via provide. The TA then grade the assignments, put in the grades, and students run a command "progress" to see their grade of their assignment. Many students say that the process work quite effectively.

  27. Well, you could always ask other proffessors... by Neko-kun · · Score: 2, Informative

    One of the grad students at my school developed this system as his masters project...

    Don't know if it's of any help but you might try contacting a Dr. Sun since he was the advisor.

    It doesn't automatically grade the homeword, but it does let you set time limits and since it uploads directly to the server, you won't have to deal with students saying they got the wrong email address.

    The system, currently, is only for homework and old code retrival but many other things are planned for it.

  28. Funny Story by Cassini2 · · Score: 2, Funny

    We had a T.A. automatically grade assignments at the school where I worked. He wrote an automatic scanner to count the number of words in the comments, and to automatically run the programs and compare the output. He then assigned grades appropriately, computing the grade only on the number of words in the comments.

    He then quite proudly stood up in front of the class as explained to them what he had done. He had no idea what was about to happen. Essentially, everyone in the class simultaneously worked out that it didn't matter what they put in the comments. They just needed to boost the word count. The class turned red and almost rioted. The professor's jaw dropped.

    The professor recalled the assignments and had them regraded by a different T.A. After that day, the original T.A. was never allowed to mark another assignment.

  29. How about... by GoodbyeBlueSky1 · · Score: 1

    How about not being a lazy bastard and doing what you're paid for?

    --
    why? forty-two.
  30. Write some own unit tests by dysfunct · · Score: 0

    I'm a student at the University of Technology in Vienna, Austria. Since we're lots of students it wouldn't be feasible grading the assignments of a few hundred people by hand.

    Some courses use an online grading facility where students just log in, submit their assignments over a web interface and receive an email how they scored. Some other courses give you a shell account on a UNIX box. Your programs are expected to compile in this environment and you can submit subdirectories of your home directory using tools they have written themselves. This concept is used from simple java classes in Inruduction to Programming to simulated CORBA stock trading clients and servers in Distributed Systems.

    As far as I have seen everything behind the scenes is fully automated. Some systems just run your class in a sandbox with a java security manager, feed the application several test inputs, compare the output and error handling to the specifications of the assignment and assign scores based on that. Others invoke your classes via Reflection and run about 20 - 50 JUnit test cases against some components as well as the entire application. You get an email with simple descriptions of the test cases, whether the specific test case went through OK or failed and if available exceptions that were triggered.

    As for cheating: they used different test cases all the time, some were to some extent randomized so that static output wouldn't work. They also use similarity checking tools to find suspiciously similar submissions and asked students whose submissions got flagged to come and explain the code to them (afair there was a discussion about such similarity checking tools on ask slashdot not too long ago). The tests of such courses contain simple questions about the environment and tools they should have used to see whether they have written the code themselves.

    I'd recommend you to write such an automated grading tools yourself. It shouldn't take more than some simple JUnit tests and a bit of perl code to set up a clean environment, run the tests, evaluate the results and write them to a database. Just don't forget to set up a java security manager so that nothing can compromise the test environment and restore any resources like files and databases the submissions have to access to their default state in case someone screwed up. Or you could do it the academic way and get grad students to do all the work.

    --
    :/- spoon(_).
  31. TRY by ragnarok · · Score: 2, Informative

    At RIT we used a program called "try", developed by one of the professors there. You can download it from his page: http://www.cs.rit.edu/~kar/software.html

    --
    Search first, ask questions later.
  32. Automarking/Manual and the big negative by Merlin_1102 · · Score: 2, Informative

    I am also a TA for an introductory course to JAVA. I am not sure how many others here are but I have found auto-marking to be essential. I am a single TA and I have 180 students. Each assignment has 3-4 substantial programs. Trying to mark them all by hand would be impossible given time limitations. I do have to agree with others though in that feedback is always nice. Therefore what I have done is I mark half of each assignment and the other half is automarked. I have automarking compare output given input and allocate this to a mark called 'Correctness'. I then mark certain functions (usually the harder ones assuming that if they could do these ones they could do the others). This way the students still get feedback. I also encourage them to come in and see me if they have questions so we could go over it together in more depth. The test cases are also put online (after all assignments are in).

    The submission system I use however is unix based. So the first or second tutorial/lab we run is all about how to submit your assignment through unix. We have had a website submission system in the past but we found this negativly affected some students who in third year had yet to touch unix at all.

    Just as a warning though, I have found with introductory courses, no matter how many times I tell them to output something in a specific way, the students will not do it. I usually have my automarking scripts do a 'diff' with multiple possible answer or ways of formating an answer. They will still fail all the test cases forcing me to hand mark anyways. I have even given them Strings in provided code to use and they will either change the output, ignore it, or have extra output. Sometimes I just give them 0 in the correctness area. The main reason for this is the students don't care. Some are just in the course because there program requires them to have one CS course.

    Therefore, if you plan on doing this then you might want to consider having final results stored in a variable, and have them make a public get method. That way you can simply redirect standard out to something like /dev/null when you run their code to get the final result, and then set it back to the screen and use the get method to output just the result. This only works in the case of computing numbers though.

    Anyways, good luck with whatever you decide to do

  33. UTexas TA here: do it. by OpenGLFan · · Score: 1

    If you're TA'ing, you should have the Java-fu to do it. It's not hard. We used one for our classes, and we worked out a really nice compromise.

    When the program was submitted, it was compiled and trivially rejected if it failed to compile. This is worth the price of admission right here, since people whose code "compiles on their machine" get multiple chances to recognize the error of their ways. (Some people think students should get points taken off for this; that's a philisophical discussion I won't go into.)

    We ran it in a separate TA account so that if one student does "rm -rf *" he doesn't hurt anything before he's escorted out of the department.

    There are a suite of tests that are run on the program, and a score is given, generally 10 points per test. That's the "base score." Now, if your students are good and your assignments are fair, with multiple tries and different outputs at least half the students will get 100. The point of the "try until you get it right" method is to guide the students to the right answer.

    Then the TA hand-grades the non-100s in the traditional way, but he doesn't try TOO awfully hard, because the students get the opportunity for a "regrade." The TA steps through the grading with the student in person, explaining what went wrong.

    This is a great solution for courses that use homework to get students to explore the language and possible solutions; it may not be the best solution for classes where the grades for homework are significant.

  34. Plagiarism Detection(Slightly OT) by Anonymous Coward · · Score: 0

    In my introductory engineering/programming classes at Purdue University, the professors/TAs use a program called MOSS to check for code plagiarism. Apparently it's free to use; just email them to get an account.

  35. Re:Version control: your greatest bacon-saving dev by joshdick · · Score: 1

    At Drexel University, our CS department has students submit assignments by checking code into an SVN repository, too. The advantages of this are many.

  36. Why are you asking? by smith6174 · · Score: 1

    I don't know what your qualifications are to be a TA for this course. I was a TA for an intro to object oriented programming course using Java during my junior year. I also don't know what the difficulty level of your course is, but that should not change my opinion. 1. The students in this course will most likely put alot of time and effort into these assignments. 2. I would hope that YOU could implement a system like the one you described with an equivalent amount of effort. 3. I would hope that your STUDENTS, after taking this course, given adequate guidance and framework, could implement a system like the one you described. If you are suggesting this system as anything other than a progress indicator for students to test early drafts of their work, I would seriously reconsider your role as a mentor/teacher/guide. At this point in a student's education, it is most important to reinforce good habits. As far as some of the other comments posted here are concerned, I am worried about the level of education others are receiving. Get your acts together folks! Students will live up to, or down to your expectations of them.

  37. Junit, ANT, and Subversion by Anonymous Coward · · Score: 0

    why not just have each student submit a branch to subversion, then have a bunch of test cases that pass or fail?

    You could then use ANT to pull each version in series, compile it, grade it, etc.

  38. Check out the Stanford CS106a program by John+Harrison · · Score: 2, Informative

    Stanford's CS 106a class is famous not only for being a popular class (1/3rd of all Stanford students take it) but for producing amazing TAs as well. When I took the coursea long time ago not only did the TA had grade a print out of your code, but they then scheduled a 15 one on one session with you to talk about what you did right and how you could improve. This sort of mentoring in the intro to programming course preped students for writing more complex code for other courses and meant that TA resources in later classes could concentrate on the topics at hand and not have to worry about spaghetti.

    The TAing program became so famous that Silicon Valley companies would recruit people that had been TAs and pay big bucks for someone that had been head TA.

  39. 7 points on why this is not such a great idea by deltacephei · · Score: 2, Insightful

    1) At least one student will either be lazy or make repeated mistakes trying to get their submission into the correct format. Because you are the TA and have no power, students will complain to you and demand that you make a special exception for their code. You'll find yourself making multiple variations to handle all the ways people screwed up your basic turn in instructions.

    2) Studying code from other people is yes time consuming, but very valuable for you as a student. You will see patterns of solutions emerge and you'll see first hand where people had problems, and where they are inefficient. This gives you excellent data to share with students during recitation. It's valuable for everyone to discuss the different ways the problem was attacked and you being in the position of seeing everyone's code can make thoughtful assessments of what were ultimately good and bad choices.

    3) Spending time automating can turn into a black hole; better to just spend time automating a turn in procedure that sorts people's submissions into folders.

    4) Why not put testing the code onto the student's shoulders? If you have the need for seeing output why not instead post a series of expected inputs and outputs and ask students to turn in results that document this. Yes, it is more work for them. But becoming careful about work and careful to check it before turning in is or should be a key goal in a programming course.

    5) Too much automating can set you up for grief from the professor if several students privately go complain to him or her about your choice. If they perceive your methods are unfairly depriving them of points, even if it is not true, you'll get complaints and depending on the character of the prof, he or she may not defend your actions and choose to make you out as a bad TA.

    6) Take care not to go against the prof, it would be advisable to directly ask what their opinion is - it is after all their class.

    7) Studying the code, rather than pushing it through an automated checker, is a good way to see who might be cheating and unfairly copying code. It's also quite hysterical to see the lengths that some desperate people will go to hide this from you like changing variable names and being very fancy with comments, but logic is logic and after looking at code you'll see cheaters really easily. Unless it's a group assignment where this was allowed, cheating shouldn't be tolerated. Some TAs have automated searching for cheating in coding assignments - perhaps this might be a better use of your time.

    Good luck and have fun with those late night emails begging for help 8 hours before the assignment is due...

  40. Grade Based on Output? by Anonymous Coward · · Score: 0

    You'd automatically grade based on output? Are you serious? So if you asked students to reverse an array and print it out, they could simply print the array out backwards and that would be adaquate for you? The correct results should be part of the grade (obviously), but much like a Physics or Math problem, how they get the answer is just as (if not more) important than the answer. As a TA, it's your job to look at your student's code.

    Please quit asap or let us know what university/college/devry you're at so we can avoid hiring anyone from there. TIA.

  41. My experience by Anonymous Coward · · Score: 0
    I'm not quite sure what a TA is, but I'm guessing it is similar to a tutor here in an Australian university (takes a class of around 15 people, teaches them in a classroom format, and also in a lab, marks their assignments). I'm both a tutor and a student, so I know both sides.

    Automarking is used extensively by most of the computing courses at my uni, the course I tutor does things quite well: Assignments are submitted through the command line, where they are run through some scripts to make sure they compile and pass a few simple tests (if they don't, you can still submit them, you are just warned). There is a reference implementation of the assignment available for execution (web based and commandline versions). When it comes to marking, one guy is responsible for writing the automatic test cases, though he usually asks tutors for things which should be tested (also we have done diabolical things like making students submit test cases, and just using students test cases to do the marking... and more diabolical things like separating the assignments into modules, and pairing the modules of different students together (*)).

    Tutors (and students) are responsible for making sure the auto-marking was correct. If the tutor sees a mistake, they can notify the automarking guy or over-ride the mark. If the student makes a small mistake (e.g. leaving out a space in the output) which makes them lose heaps of marks, then the tutor can modify their code and re-run all the tests over it, then manually penalise this mistake. The modified code is given back to the student, with comments by the tutor. This also ensures that a mistake is only penalised once.

    The tutor also reads through the code and marks it for style. A strict style guide is given to the students which describes the little things (e.g. bracing styles, naming conventions etc), some of these things are tested for by the auto-marker, but this is just for the tutor's benefit (it doesn't change marks, just notifies the tutor). They are also marking for big-picture style - a clear algorithm, well broken down, no repetition etc. The tutor puts comments in the code in specific locations to point out the positives and negatives.

    The students can then collect their assignments (commandline again), the collected assignment contatins:
    * Code that was marked, including comments (and any changes made by the tutor)
    * Diff of output and expected output for all test cases that were failed.
    * Summary of automarking tests.
    * Mark breakdown
    * Final comments by tutor

    Students are free to challenge marks, and seek further explaination of stuff. The auto-marking test cases are made available for downloading so students can reproduce the tests.

    All in all, this system works pretty well. I don't think any students feel ripped off by being automarked, and by having lots of tests applied, the marks can be quite granular (more granular than I expected, given that typically a program either works or doesn't), and the tutors can spend their time looking at the important stuff, rather than running tests by hand. I obviously took this system for granted though, I assumed that all universities would be doing something similar (at least, all computing departments).

    So yeah, this system is available to all the computing courses at my uni, though some subjects don't include as much of the time consuming stuff. (In later years, you often get assignments which are purely automarked).

    (*) Mixing and matching of student modules is a fairly big task I think, but pretty cool. The system is made of modules A and B, so each student write A, B, testA and testB. The purpose of the test* modules is to test another student's modules - if student1's testB module passes student2's B module and student2's testA module passes student1's A module, then you can match those modules together, and any marks lost or gained go to both students. If a student's test* module fails another student's module, then they have to come to agreement about wh

  42. Automated Testing/scaffolding vs Automated Grading by MntlChaos · · Score: 1

    I see multiple ideas here. First, automating of submission handling. This is a good thing. All it does is reduce errors and speed up grading.

    Second is automated testing. This is good for when you can test for the program working in general and also for specific errors you anticipate. However, this automated testing should NOT just be plugged in as a grade. Instead, a thorough review of the code should be performed. Not only does this help provide better feedback, but it helps you to spot cheating. Finally, there are those programs that just won't run properly for one reason or another. These are the fun ones. When I was a TA I first downgraded them due to the failure to submit the program in fully working order, then did what I could to get it to run, and based an additional deduction on what I did (or not, in the case of ambiguities in specifications). If I still could not get it to work, I made a severe deduction and let the students schedule a time to meet with me so that they could demonstrate what their program did.

  43. Purdue by EightBits · · Score: 1

    Purdue's CS department uses some sort of automated submission for their CS assignments. You submit your code, it actually runs algorithms on it to see if it is *too* similar to other students' assignments to help find cheating. Simple things like merely changing variable names will NOT make it through this system. I know a CS roommate of mine had to submit his homework with all source files and a makefile. The entire project had to compile and run in a certain environment to which the students had access. The automated submission process actually put the program through compilation and execution and provided input and checked the output.

    I will say to the naysayers out there: Get Over It! No one is arguing that the students need feedback. No one is arguing that automated grading is not without it's own problems. However, automated grading is very useful on some levels and it's here to stay. There is nothing you can do about it. We still need instructors/TAs to look over code, for sure. But, with hundreds to thousands of students submitting code and no budget to hire the manpower to manually grade the submissions (some exceeding 10,000 lines) we're left without too many options. Let the TAs cover style and other forms of manual checking on the small code the students submit early in their studies, as in 100 and 200 level courses. Even then, make sure it is only on the small projects. Asking a prof or TA to look over 1000+ line submissions for hundreds of students each week is asking the impossible. And, I think there is nothing wrong with asking students on the 300 and 400 level to be content with just getting the program running correctly. In their jobs, they will be given tasks which must be completed by the deadline. When they whine and complain to their employers that they should still be given some praise for their uncompleted task because they *mostly* got it done, they will be fired. Automated grading could help them with this. The program works as advertised or it doesn't.

    And, as an aside: write it yourself. I wouldn't want to take programming from a school that didn't have people capable of writing an automated grader.

  44. TA Suggestions by SJS · · Score: 1

    Use CVS or other version-control system. Set it up so that each student gets their own module, and each student has access _only_ to their module [if individual assignments -- group assignments should naturally be set up for group access]. Then you can obtain and compile the code by performing a checkout rather than the student running a turnin program.

    Teach 'em how to use Make or Ant. Specify the directory structure and the name of the build-control file. This lets you automate the "checkout, compile, run" process. Give them the script that does this, so that they can test this part of their process.

    Then go through the assignment, and make a list of everything you told 'em to do and not to do. This includes stuff like "every file will have your name, the class, the assignment name, and the date in a comment at the top of the file' -- the finer-grained the list, the easier it is for you to grade. Go through this list and assign weights to the items on this list. Adjust the weights so that you come up with something reasonable -- you don't want to have an assignment that is worth 191.125 points.

    As you're teaching a Java class, take advantage of the Java sandbox. Take a couple of days to learn how to use the policytool to create a policy file. If it's pure computation, stdin/stdout are good enough; otherwise, it's easy enough to set up filesystem access.

    The start of your script should cat the documentation -- GRADER.NOTES file, README, whatever. Then it should cat all of the source files. Then it should compile the program. Then run the program w/ the appropriate policy file, with the inputs as desired. (Don't give the students _all_ of the possible inputs, but just a couple.) Capture all of this (script is a good tool), and print it out.

    Inspect and markup the printout. Do NOT get hung up on correcting their crappy code. Do not let their crappy code slide by, or the next assignment will be just as hard to inspect. (And they'll get in the habit of writing really ugly code, which is a habit that's really, really, really hard to break, and they'll say, with all seriousness, "if it's hard to write it should be hard to read", and I'll just have to stake them through the heart when I encounter them.) Use the checklist.

    At least 1/3 but no more than 2/3 of the grade should come from passing the tests. You're teaching 'em HOW to program, which involves following instructions, abiding by constraints and specifications, and writing readable code.

    My problem was always that I spent too much time showing 'em how to do something right, rather than marking it as a problem and letting 'em come to me in office hours.

    Finally, speaking of office hours, determine your appeals policy. Do not, ever, discuss the assignment with an individual student in class. They should come to your office during office hours to discuss, and _there_ you can point out why "if ( expression ) return TRUE; else return FALSE;" got them dinged, or why "i++; // incr i" does not count as commenting in your book. (The caveat being... if a sizable fraction of the class did the same sort of stupid error, that's a sign you need to cover that topic.)

    P.S. The version-control history is a useful tool for tracking down cheaters. When three people with very nearly the exact same code commit the entire project the day it's due, that's supporting evidence.

    --
    Pick One: http://www-rohan.sdsu.edu/~stremler/sigs/sigs.html (Note - disable Javascript first!)
  45. Automarkers by Deliveranc3 · · Score: 1

    Automarkers are the WORST thing in the world.

    First semester the automarker wouldn't accept unless the output was character perfect!

    Took off a mark each attempt too!

    Spending more time making sure . _ and ,'s are in the right place is the worst way to get students interested in computing.

  46. Make it a public interface by staplin · · Score: 1

    When I was a TA, one of the things that seemed to make the most difference for students was help them find the problems in their code on their own. Few of them came to talk to me about any comments I ever wrote on their submissions.

    If you expose your automated grading system so that anyone can run it (at least with some subset of the standard test data and expected results) you let every student check their grade as they go. You also make it more like the real world.... run your program against several data sets, and try to characterize the behavior that amkes it fail in certain situations. Once you know what makes an aspect of your program fail, you know where to go dig for solutions.

    If it concerns you that they won't work any harder than they have to to meet the passing grade, make sure you save out some dedicated grading data sets that expose the more tricky boundary conditions, and that your students know that.

    If you want to be proactive about helping students that need help, track the number of submissions and the associated scores. If you see someone entering a lot of submissions without seeing a steady improvement in their score, they've likely hit a roadblock and may need some questions answered. If someone is seeing steady progress to a bug free solution, give them a pat on the back.

    It seems like this could be more than just a tool for automated grading, but also a tool for giving students immediate feedback (think standardized unit tests as a grading method), as well as helping keep track of students' progress and which may need more individual attention (but may not be asking for it).