Posted by cayhorstmann
on June 15, 2009 at 9:12 PM PDT
I teach computer science at San Jose State University and found that my department just got slashdotted. An eager student posted all homework solutions for his data structures course, his instructor threatened to fail him, and the rest is history. It's good that there is no such thing as bad publicity. I discuss what it means to learn and teach computer science when all answers to practice problems are a Google search away.
I teach computer science at San Jose State University. My department just
ended up on
One of my colleagues, Dr. Beeson—who, to his great credit, makes
beginning students write lots of little homework programs until they get
them right—got into a tussle with
Brady, an eager student who insisted on
his answers on the internet. I don't want to get into the personalities
here. Beeson can be irascible and a bit overbearing, and the student's claim
that he is doing this to increase his chances for employment rings a bit
hollow. When is the last time you hired someone because of their
program? Even if I did, I'd be wary about candidates who write
(foundEmpty == false)
should vary their problems from one semester to the next, but there are only so
many ways in which you can vary the basics. Consider TicTacToe. There are maybe
ten ways of changing it. Of course, there is no intrinsic merit to TicTacToe.
It's just a vehicle to test nested loops over a 2D array. We like it because
doesn't require a long backstory—students are familiar with it. But let's
ditch TicTacToe if all variations are on Google. What else is there? Magic
squares. Row and column totals. Counting zeroes. Making shapes with ASCII art:
squares, diamonds, spirals. Floodfill. Escaping from a maze. The game of life.
But all of these are on the internet too.
So, what does it mean for teaching and learning programming when the
solution to every beginner problem is available on the internet?
I am all for more code reading by students. Too many students just write
code, and if googling an answer makes them read more code, that's great.
When I learn new stuff, I set myself little tasks to solve. I don't just
google for the answer since that would defeat the purpose of learning. Are our
students like that? Kyle Brady probably is. But I have met a few who just want
to get a good grade, get their degree, and start making money. Others are
willing to do the right thing but lack the self-discipline. Quite a few work a
job or two to put themselves through college, and limited time and financial
necessity makes them go to Google when they shouldn't.
That brings me to the issue of “certification”. When you hire
someone, you want to see that college transcript because you expect some
correlation with ability. So, we as instructors need to give grades, and to
give grades, we give homeworks and exams. All of whose solutions are available
on Google. So, how can we certify that students know what they are supposed
#1. Shut off the internet. Herd everyone in a room with lead walls and make
them do their work there. Or (gasp) go back to paper and pencil. Personally, I
hate doing that. I give bring-your-laptop, open-book, open-notes exams because
I want my students to build up skills that they can use later.
Strategy #2. Starve them for time. That's what
href="http://www.betterprogrammer.com/">betterprogrammer do. Sure, you
could google for hints, but then you would not be able to finish in time. My
students will argue that I use that approach as well, and they do not like
Strategy #3. Interview each student personally and ask questions about the
code. Unfortunately, this is incredibly time-consuming and impractical on a
large scale. (After all, if this was easy, we wouldn't have the
Strategy #4. Forget about coding and evaluate students on their ability to
be creative, express themselves, resolve conflicts in a non-confrontational
way, etc. etc. These are all wonderful traits, of course. But I am reminded of
a faculty summit at, of all places, Google, where eager professors from
reputable institutions shared the latest thinking in computer science
education. At the closing session, one of the Google managers said that this
was all good and well, as long as the graduates can code.
you read those Slashdot comments, have some pity for the poor CS instructors.
Not for having to come up with a neverending stream of practice
problems—that's part of the job. But for having to teach students to be
ever more disciplined. In the past, we could rely on a reward system for
homework assignments. Do a good job, get an A. Thanks to Google, it has become
too expensive to give a fair reward for the kind of routine practice homeworks
that one really needs to build up skills. Now we must train students to do
their homework without resorting to Google, show them nicely what happens when
they don't, and then tighten the screws by the end of the semester, all without
demotivating those students whom we want to attract to the major. This is not
an easy task.
What you don't hear in Slashdot is that Dr. Beeson is actually doing a good
job. He built a system where students can submit their problems until they get
the right answer, and for a lot of students that is pretty motivational in
itself. Obviously motivational enough to get Kyle Brady to come up with answers
that he is proud to share with the world.