[Edu-sig] K-16 CS/math hybrid

John Zelle john.zelle at wartburg.edu
Mon May 9 21:53:52 CEST 2005



Kirby Urner wrote:
<snip>
> Plus we're not always interested in "programming curricula" (for the sake of
> programming).  If the goal is to get physics majors to ramp up in some
> VPython context, to where they can explore mechanics/kinetics interactively,
> within a day or two, who cares if they're not using classes/objects to their
> maximum advantage, and don't write the tightest imperative code.  That's not
> the point.  The point is to learn physics.  Python is good for that too.  
> 
> It's unfair to criticize quick and dirty code that pretends to be nothing
> more.  There's room in this world for one-off scripts that get the job done.
> We all write "code to throw away" or should.  Making everything you write
> read like some CS text book example is a waste of precious time.
> 

This is an issue I've been thinking quite a bit about recently. In my 
own mind, I make a distinction between "programming to learn" vs. 
"learning to program." A lot of the discussion of programming on this 
forum involves using programs to investigate other topics (physics, 
statistics, geometry, etc.) This is pure "programming to learn." The 
point here is not necessarily to write industrial strength code, but to 
learn more effectively and deeply through the programming process.

Certainly, a good deal of the CS curriculum is aimed at the latter goal 
of "learning to program." That is teaching students how to create 
well-designed, properly documented, elegant, efficient, extendable, and 
maintainable software. However, I think that too much emphasis on this 
can be a bad thing, even in CS programs. In the introductory classes, we 
should try to foster a spirit of inquiry and encourage our students to 
experiment and learn through doing. That hacker's spirit can be drowned 
out if it's all about the "mechanics" of "proper" programming.

Programming is a critical foundation of CS, but CS is much more than 
(just?) learning to program. The "much more" is amenable to, and IMHO 
should be investigated through "programming to learn."

> What I'm wondering is how many CS curricula emphasize team approaches, e.g.
> teach extreme programming techniques, other ways to manage largish, scalable
> projects.  This should come earlier rather than later, so some appreciation
> for the conventions of teamwork start tickling in (e.g. why should I waste
> time documenting, writing a lot of test? -- because *you* aren't the only
> reader of this code, duh).

I think virtually all curricula are now doing this at some point. Again, 
I'm not sure it's something one wants to dwell on too much in the very 
first classes. You really can't appreciate many of the techniques for 
dealing with larger projects, things like design by contract and design 
patterns until you are working on projects where those techniques 
actually have payoff. Otherwise, it's just extra burden up front and it 
stifles student productivity and excitement. One exception I would 
definitely make to this observation is test-driven development. I think 
this is a technique that can be addressed early-on and actually helps 
students contruct even fairly simple programs.

> I think Python has the potential to give us *better* CS curricula than we've
> had before, and these better curricula will do more to counter solipsistic
> programming habits.

Obviously, I agree that Python has a lot to offer. I see two main 
contributions. By making it easier to write programs, we can get a lot 
more programming to learn both in the CS curriculum and elsewhere. The 
more students program, the better they become at it. The second real 
advantage is that Python allows students to create much more 
sophisticated programs in a given amount of time. That provides CS 
educators with a much better platform for introducing the techniques 
needed for programming in the large.

--John

-- 
John M. Zelle, Ph.D.             Wartburg College
Professor of Computer Science    Waverly, IA
john.zelle at wartburg.edu          (319) 352-8360


More information about the Edu-sig mailing list