# Workflow for Code Submission

Next year will be my first year teaching AP CS A. While I've spent a lot of time preparing by choosing textbooks, picking an IDE, and writing the syllabus, I'm not yet settled on my workflow for how to push out assignment instructions/starter code and how to collect work back.

I registered for GitHub Classroom with an education account, but I haven't yet had a chance to explore its resources and would like to hear from those who have used it. I can easily collect files via our LMS or Google Classroom. I just have doubts that that method is the most efficient for either me or my students. Also, this past year, CS50 took care of the distribution code, so I didn't have to worry about that. Now I do need to consider how I can get files to students efficiently if needed.

What workflow do you follow for the submission of student work, particularly in the context of Java files? Do you provide students with starter code? If so, how?

## 3 Answers

Here is my system. I give it top marks for ease of sharing, but one downside is that it does not do any kind of autograding without some scripting on my part.

I purchased a paid subscription to Dropbox. This allows me to set up read-only folders. At the beginning of the term, I copy/paste all of the names from the course into an Excel spreadsheet and collect an email address from every student for a Dropbox.

I then create a series of folders using a .bat file (I am a Windows user), generated with a function like ="mkdir ""APCS 1 - "&A2&", "&B2&"""". This creates lines like mkdir "APCS 1 - Johnson, Cathy" I copy and paste this group into a .txt file, rename it to .bat, and - voilà! - I can double-click to create a directory for every student in my class section. I run the batch file in some subdirectory of the Dropbox folder so that they will ultimately be sharable. I then go through and share each of these folders with the respective student with write privileges.

Finally, I create one last folder, something like AP Computer Science Section 1. I then copy and paste the email addresses themselves into the share box for this folder, but only allow read priveleges. Now, I can drop my assignments into to class folder (which is basically instantaneous), and I receive my submissions through their private folders. I get everything timestamped, and don't have to log into any websites to get the assignments.

One more side-benefit of this arrangement is that when I need to send a file to some student, we already have a shared folder that I can drop it into. No need for emailed attachments.

• Why not do all of this in google drive and make it free? – thesecretmaster May 30 '17 at 1:51
• I haven't explored Google Drive well, but I'm not averse to making changes. Does it allow for direct mirroring of directories on my personal HD, and proper read/write privileges? Right now, all of my student submission folders are highly organized, together in a folder that I can access and grade from while on an airplane without internet, which is a freedom I enjoy. – Ben I. May 30 '17 at 1:54

I wrote a series of posts on how I use raw GitHub with my classes:

Part 1 - Introducing your students to GitHub by using it as a method for distributing code to your class.

Part 2 - Having students submit homework and small assignments using GitHub - this has them adding content to GitHub and sets the stage to teach them about "playing well with others."

Part 3 - Taking the kids from working on solo projects to collaborating with classmates and leveraging things like version history

Part 4 - Talks about some of the pedagogical benefits I've discovered while working with Git and GitHub with my classes.

• Thanks for posting the links, but links without any context aren't considered answers on this site. Take a look at How to Answer for the rules around link-only answers—links are great, but we prefer it if the answer can stand on its own. You can edit to add some context around the links, so that people searching for their answers don't have to be redirected to another site. Also, as thesecretmaster mentions, links can often break, which would mean that future visitors can't gain anything from the answer, which would be unfortunate, as the ideas seem great. – Aurora0001 Jun 15 '17 at 11:11
• I appreciate the desire to have inline content but to be honest, I spent a good amount of time writing those posts and don't really have the energy to basically transcribe my content to another site (although I'll add a bit of context to my answer later). I'd also note that your comment about links is really saying "use my silo instead of your silo" neither of which may be long lasting and while I understand your desire to keep all the knowledge under your roof, I don't know if that's really healthy for the CS Education ecosystem as a whole.. – Mike Zamansky Jun 15 '17 at 11:50
• If both sites thrive, it's not "use my silo instead of your silo" it's "use our silo and your silo" that way, no matter which site the curious goes to, they will find the answer. If either site fails, temporarily or long-term, nothing is lost. Think redundancy. Also, for shorter information a full copy is useful, yes, but for larger content, such as your blog entries, a summary, or encapsulation, is usually good enough. The character limit on answers wouldn't allow you to post all for entries here anyway. Something that will help the answer to remain useful should the links ever fail. – Gypsy Spellweaver Jun 15 '17 at 15:49

On CodeHS we have a very streamlined system for submitting and managing student work. You can use our courses, or if you want, create your own assignments and starter code. The students can run the Java code all in the web browser (or if you'd like in your own IDE), and then when they click submit it goes into your grading queue. No need for folders, emails, printing, scp, dropbox, it all just works. You can easily run it and test it, you can also create your own graders if you'd like. There's also an easy to use grading queue for doing code review on each problem which can be customized how you like.

I think in a lot of cases it is helpful to provide students with some basic starter code, but that can vary depending on what type of assignment you are doing.

• How does the workflow of the grading itself work? – Ben I. Jun 14 '17 at 21:03
• You'll have a queue, or you can choose to grade by student, by activity, by course. One option is to go problem by problem. You can first see the student has passed the automatic checks. Then you'll be able to review their code and send by any comments before jumping to the next student submission. You can also use "Fast Grade mode" -- which is helpful when you are very familiar with the problems and are commenting mostly on coding style. You'll be able to say a problem passes or send it back to the student as needs work. – jkeesh Jun 15 '17 at 23:21