Principles
  
    We will use codewalks, a common practice at 
    software companies, to evaluate some of your programs.
    A codewalk is a presentation where you, the programmer, convince
    us, a jury, of specific properties of your program.  You
    accomplish this by presenting your program and answering questions 
    about it.  We are most interested in
    
    - correctness: does it do the right thing?,
 
    - extensibility: how adaptable is it to related tasks?,
 
    - robustness: is it built like a house of cards?, and
 
    - performance: does it avoid poor implementation decisions?.
 
    
  
  
    We will conduct two or three codewalks during the semester.
    Codewalks will evaluate the programs turned in as solutions to
    regular homework assignments.  Each program will receive about 30
    minutes of scrutiny.  The code you present must the be the same
    code you turned in as your homework solution.  Here's the catch:
    You don't find out whether we will conduct a codewalk on an
    assignment until after you turn in your solution for it. No
    excuses or exceptions; you read it here.
  
  
    We conduct codewalks for two reasons, one pedagogic and one
    technical.  The technical reason is that the assignments in this
    course offer a microcosmic example of typical software evolution,
    so this is an opportunity for you to hone your software
    construction skills.  The pedagogic reason is that codewalks offer
    students the richest and most immediate critiques of their
    programs, while giving instructors a very effective way of judging
    student understanding.
  
  
    The real-time nature of codewalks tends to favor simplicity and
    cleanliness over both sloppiness and (excessive) cleverness.  In
    this course, it's extremely unlikely that advanced language
    features will offer either desirable property.  Keep things simple
    and you are least likely to run afoul of questions.
  
      Mechanics
      
	A codewalk is primarily a presentation, by you to us,
	so all the usual formalities of presentations apply (except,
	of course, please don't dress formally for the occasion!).  It
	is not a chat or discussion session.  Treat it as
	you would a formal presentation in any other course.  The only
	difference is the content of your slides.
      
      
	Your presentation must cover the programs that you wrote for
	the assigned homework.  Follow these simple rules:
	
	- Print out the program.  Transfer it to overhead
	  transparencies.  Conduct your presentation using an overhead 
	  projector (which we'll provide).
 
	- Before you print, put some effort into making sure the
	presentation is reasonable.  Break excessively long and unruly
	lines to a more manageable length.  Don't split a function
	body across page break boundaries.  Use common sense.  We
	really are going to read your code.  If the physical
	presentation is unreadable, it's going to be harder to
	convince us of its behavior.  (But don't spend time fontifying
	it and so forth.  Plain Courier is fine.  So is using
	SLaTeX.)
 
	- Other than formatting changes, you may not alter your
	  program.  In particular, you may not change its behavior in
	  any way.
 
	- Bring along, preferably also on slides, auxilliary parts
	  of your homework such as test-cases (if applicable).
 
	- 
	  If an assignment involves software we can test easily, such
	  as a CGI program, please set it up to be accessible from the 
	  Brown computer science department, and bring instructions on 
	  how to run it.  If we cannot run your program, we will
	  consider it incorrect.
	
 
	
    
      
	You should present the complete content of your program.  Be
	flexible in your presentation.  We may ask you to skip the
	details of some part, elaborate on the details of some other
	part, or even re-order your presentation entirely.  Remind
	yourself of the goal of a code-walk.