Subject: Re: Code Cheats in College
From: Ian Lance Taylor <ian@airs.com>
Date: 14 May 2002 13:52:10 -0700

"Forrest J. Cavalier III" <mibsoft@mibsoftware.com> writes:

> "Jonathan S. Shapiro" <shap@cs.jhu.edu> wrote, in part:
> 
> > The purpose of programming assignments isn't to produce code. That is
> > purely secondary. The purpose of programming assignments is to force the
> > students to master particular pieces of of subject matter. 
> 
> Look at what the students do and spend their time on!  I'm sure that
> they feel that the task of these programming assignments is
> primarily to produce working code.  That is what you must do first.
> 
> Mastering the "particular pieces of subject matter" comes second,
> and only to the brightest students who have the time left over.

Most programming assignments should teach how particular things work.
If they don't, they are bad assignments.

It would be perfectly reasonable to have a ``Programming in Practice''
course in which students contributed to free projects.  In fact, that
would probably be a good idea for future employment.

But in, e.g., a compiler or OS course, students should work on
projects which teach them how compilers and operating systems work.
In a data structures course, students should build examples of typical
data structures.

> How much correct code can a sophomore student be expected to write for
> a single CS course each week?  200 lines?  1000 lines? How interesting
> is 200 lines of code?

I dunno, my courses expected a lot more than 200 lines of code a week
(except for the APL course, which expected 5).  Maybe things have
changed.

> Yes, programmers need to be able to write code when they graduate, so
> producing new code has to be part of the assignments.  But why
> do they start with nothing?  
> 
> How often does any programmer's real-world task start with no
> code in place?

In my OS course we had a toy operating system, and the assignments
were to add particular features to that toy.  I think that was
probably a better way to really learn stuff like virtual memory than
dealing with a complex full featured OS like Linux or BSD would be.

Ian