Thursday, May 16, 2013

Hand-writing code on exams

Yesterday I posted a question to the SIGCSE mailing list which garnered a lot of responses. I was interested in how my colleagues felt about requiring students to hand-write code on exams. It's a practice I've followed in most of my courses since I started teaching in 1997, and it's something all of my colleagues at Harding still do. Even the Computer Science AP exam requires students to hand-code their solutions.

The reason I asked this question was because this semester I started receiving more push-back than normal from students who complained about having to hand-write code on their exams. One beginner complained that he couldn't write well or quickly. Another said it was too different going from an IDE to paper. One didn't understand why I would ask him to write code that the compiler auto-generates (a getter and setter in a Java class), and another complained this would be the only time in his life that he would be forced to hand-write code, so what was the point?

So I put this to my colleagues: Is requiring our students to hand-write code on exams an out-dated way of assessing our students?

The question received more than 50 responses in the past 24 hours, most of them in favor of hand-writing code on exams. There were a few, however, who abandoned this practice a while ago in favor of exams which were at least partially completed with an IDE in a computer lab.

Below is a summary of the responses. I begin with various reasons why my colleagues have their students hand-write code on exams (the pros) followed by some reasons not to (the cons). At the end I summarize some of the best practices for those who require hand-written solutions and those using an IDE on an in-lab exams.

Pros of Hand-Writing Code

  1. Some instructors simply don't have easy access to a lab, so having their students hand-write code is the most feasible solution. And computers are not always reliable; they might have software problems, crash, etc.
  2. Many students experience much more stress writing code in an IDE under time pressures than hand-writing code because they can get hung-up on syntax errors. It's easier to give partial credit and forgive minor syntax errors like missing a semicolon when students hand-write their code. It's also difficult to control cheating when using an IDE since the computers are networked.
  3. Hand-writing code demonstrates the student's level of mastery without the aid of a crutch. Using an IDE can encourage students to "fish" for the answer... they may try many different things to see which one works without really understanding the problem or solution.
  4. When interviewing for a job, students will often be asked to hand-write code to solve various problems. And many programmers in industry collaborate by writing code on whiteboards without the help of an IDE. Of course the interviewers are usually more focused on the thought process and less concerned about syntax correctness. And coding on a whiteboard is also more about communicating ideas, not the syntax.
  5. Students should not rely too heavily on an IDE because every IDE is different and they are not always available.
  6. Some faculty feel there are some things that every programmer should be able to do, including hand-writing solutions to fundamental CS problems like "how many nodes are in a binary tree?". Surely some computing pioneers like Dijkstra would agree. wink

Cons of Hand-Writing Code

  1. Most real coding is done in an IDE, and writing code on paper is too tedious and foreign.
  2. Some instructors admit to needing the help of an IDE when they program because there are so many functions and differences between languages that it's difficult to remember everything. Why should we expect students to do with less?
  3. Many students can type much faster than they can write, so they are penalized for writing slow. College students hand-write much less today in general, and many feel more comfortable in front of a keyboard.
  4. Grading hand-written code is slow and painful. It's much easier to automate the grading of problem sets in an IDE where problems are either solved or not solved.

Best Practices for Hand-Written Exams

There are some things instructors can do to prepare their students to perform optimally when hand-writing code on an exam.

  1. Make sure students get plenty of practice hand-writing code before the exam so it is less foreign. Pre-tests are ideal.
  2. Make sure students don't have to write really long segments of code, certainly nothing over a page in length.
  3. Make sure hand-written coding exercises focus on the basics, not on memorizing lots of different functions and minutia. If students do need to use a library, include the interface documentation for the library on a supplemental handout.
  4. Beginners should be tested for precise syntax, but upper-level students should be given more leeway. Allow students to write in pseudocode if you are more concerned with the thought process rather than the syntax. (If syntax is more important, award pseudo-points for pseudocode. wink - Richard Pattis)
  5. Let students know that if they can't remember how to do something they can write a comment like "and here I resize the vector, I forget how."
  6. Instructors should hand-write code on the white board in front of students so they can see how it is done.
  7. To quell potential complaints, tell students in advance that they will often be expected to hand-write code in job interviews and on the job when computers are not nearby. Also tell them you will be much more forgiving when grading their code than the compiler will be.

Best Practices for In-Lab Exams

Several of my colleagues reported bad experiences with in-lab exams, but others suggested ways to do it successfully.

  1. Don't expect students to be able to solve the same number of problems in an in-lab exam as they would on paper. Reduce the number of problems significantly because they will get hung-up on some syntax errors.
  2. Use problems that are easily broken into small discreet steps that are as independent as possible so getting tripped-up on one problem doesn't stop the student from completing other problems. (Note: This is very hard to do.)
  3. Make sure students get practice writing code under time constraints, possibly with pre-tests, so they know they must study and use their time wisely. This will make the exam less stressful.
  4. You may allow students some Internet access to sites like StackOverflow to remind them of proper syntax or to get ideas on how to formulate a solution. Obviously you will have to trust that students are not collaborating, and you will need to ask problems for which no solution can be found online.


Thank you to the many SIGCSE members whose ideas contributed to this blog post. If you think of something else that should be added to the lists above, please email me or leave a comment.

Wednesday, March 20, 2013

March Madness for my CS students

I'm trying something new this year: getting my computer science students to participate in March Madness by filling out a bracket on Yahoo. I have 70 students this semester (10 are female), and so far only 6 have joined in. I'm a little concerned that basketball may not be all that popular among my techie students, but I have just hit gold: March Madness explained with Star Wars:

In case you were wondering, who did I pick to win? With nothing but seeding information, preferences to states I used to live in, and a random number generator, I devised an algorithm which picked Louisville over Georgetown. Yes, there are much better ways of picking a bracket.

I'll update this post once the tournament is over and reveal which student(s) beat me.

Update on 3/25/13

Nine students decided to participate. A few others wanted to, but Yahoo produces some pretty lame error messages and is not helpful in redirecting users to the right place to join a league. I'm currently in first place, but considering my overall points possible is much lower than others', my fall in the rankings is assured.

Update on 4/1/13

Due to some big upsets, I've managed to stay on top. I only picked two of the final four (Louisville and Syracuse), but that's apparently much better than most since Yahoo says my bracket is in the top 99th percentile. Thank you, Syracuse. Did you see the poor kid from Louisville break his leg? It was like watching Joe Theismann all over again.

Update on 4/9/13

Louisville's impressive win over Michigan secured my first place finish. Had Michigan won, one of my CS1 students would have been the winner. Yahoo reports by bracket is in the 99% percentile... probably the best bracket I've ever had. However, I don't think my students were quite as thrilled as I was.

Monday, March 11, 2013

Back from SIGCSE 2013

Yesterday I returned home from the SIGCSE 2013 Technical Symposium in my hometown of Denver, Colorado. This is the forth time I've been able to attend this conference which brings together over a thousand CS educators to share the latest research and innovations in computing education. This year's conference was very insightful, and it was especially nice being back in the city I grew up in. The sun was shining with a comfortable 65 degrees when the conference began, and it was snowing heavily on the final day. You just don't get weather like that in Arkansas.

I quickly wanted to jot down some of the take-away points:

  • Use Live Coding whenever possible, and avoid discussing completed programs which bore the daylights out of students. I currently write a lot of code on the board, but I'm becoming convinced that my students might be better off if they watched me actually code in the IDE and run it.
  • Start using version control in my upper level courses since it makes working in teams much easier, and employers are looking for students who are comfortable using it.
  • Introduce user experience (UX) evaluations in my GUI course. We talk about how the user feels theoretically quite often in the course, but it can be a real eye-opener to witness what a real user thinks about your software in a formal evaluation setting.
  • Integrate one of the nifty assignments or something similar into my CS1 course. I especially like the Twitter Trends assignment which introduces students to Data Science. As the moderator reminded us, "The one thing students are most likely to remember about your course are the projects."
  • The next time I teach a game programming course, use the Kinect which has a great SDK and is available to educators for $150.
  • Will MOOCs be the end of the traditional university? Short answer: No
  • The inverted classroom seems to me to be the future of education. I would love to try it, but I can only imagine the amount of time it must take to create all those videos. Three years ago I spent a few months creating instructional videos for a book publisher, and it turned out to be a much more time-consuming task than I had originally envisioned, especially for a perfectionist like me. And the problem with CS is that our tools and topics seem to always be in flux, so a video may only last you a few years.
  • Harvard's CS50 course has got some great online notes and is even filmed. Next time my CS1 students complain my course is too hard, I'll point them to the CS50 website. wink
  • Microsoft's TouchDevelop is promising for writing mobile apps, but it frustrated me when I tried to use it. For students who are new to programming, it might not be that bad.
  • Zyante's animated, interactive textbooks are intriguing. Must evaluate further for my CS1 course.

Finally, it was good to see some old friends. For those Denver friends I did not get a chance to see, I'm sorry, but I hope to return soon with my family and catch up with more of you.

Tuesday, February 12, 2013

Quick update

It's already mid-February, so time for a quick update. I'm teaching Internet Development 1 and 2, Introduction to Programming, and Web Science. Looks like I'll be attending at least three conferences this spring: This summer I'll be working with two Harding students on the final year of my WAC NSF grant. Hope also to attend JCDL 2013 in Indianapolis in July.

Monday, December 24, 2012

Merry Christmas 2012

The McCown's wish you a Merry Christmas!


And a belated Happy Halloween! wink

Wednesday, December 19, 2012

Fall semester wrap-up

The fall semester has ended, and I'm wrapping things up and preparing for the spring. I wanted to briefly reflect on the semester as it was quite an eventful one.

The semester started with the grand opening of Phase I of Legacy Park, one of the largest construction projects at Harding in quite some time. The "park" is a combination of uniquely designed apartment buildings. You can see some photos of it here. One of the buildings hosts Searcy's first Starbucks.

Probably the biggest event of the semester was the naming of Harding's next president, Dr. Bruce McLarty, in November. The announcement came with some controversy which I addressed on this blog. Dr. Burks still has another semester presiding over Harding as the official transition day is set for September 20, 2013.

Harding hosted some notable speakers this semester including Karl Rove and Harding alumni Willie and Korie Robertson from the TV show Duck Dynasty. Guess which one completely packed the Benson Auditorium approximately an hour before the talk even began? My wife and I were fortunate to get to eat dinner with the Robertsons and about 200 others before the talk. I went to Harding with Willie and Korie, and I remember Willie as the guy who worked in the bowling alley. I posted their yearbook photos on Facebook, and the pic was featured at the end of a KATV news segment. Yes, I can now say my work has been featured on television. wink

Harding had an amazing year in terms of sports. In August, Janet Cherobon-Bawcom became the first Harding alumnus to compete in the Olympics. She ran the 10,000 meters in the the 2012 Summer Olympics and placed 12th. The Harding football team had an incredible season, finishing 9-1 and playing in their first NCAA playoff game. The Lady Bison volleyball team finished the season undefeated in their conference, and they won the 2012 Great American Conference Tournament.

On a personal note, I had the typical busy semester, but it went well. My oldest son started kindergarten, and that was quite a transition for my wife and I. I can only imagine what it will be like when he leaves for college! I'm thankful to God for his strength in getting us through the ups and downs this year, and I'm excited to see what the new year will bring.

Monday, November 19, 2012

Ladies: Why are you into computing?

It's a well known fact that females are in short supply in the computing field. According to the CRA Taulbee Survey, the percentage of female graduates with computing degrees has steadily declined from 35% in the mid-80s to 11% today. So what is it that attracts some females and makes them persist in a profession that is so heavily dominated by males?

My colleague Scott Ragsdale has been tackling this exact problem, and he is in need of some data. Here's where you ladies can help out.

If you are a female who has completed an undergraduate computer-related degree (e.g.,computer science, computer engineering, information systems, etc.), would you please give just 10 minutes of your time to complete the Female Computing Graduate Survey? Your input is crucial in helping determine factors that can lead to better strategies to attract and retain more women in the computing field.

Thanks!