[Edu-sig] Girls, women and Programming (- and Python)

Clark C . Evans cce@clarkevans.com
Sun, 4 Aug 2002 11:32:19 -0400


| 1) Why are there so few girl and women interested in programming?
| (look, for instance, at the list of partiicipants of all those mailing 
| lists)

In the U.S. this is mostly cultural, programming is a "boy" thing
since it is "technical".  This really irritates me, but both my 
teen-age cousin and my little sister (now in college) quoted me 
this exact idology -- no amount of resoning helped.  Their parents
did them the greatest dis-service by re-enforcing this insane 
cultural division and rebutting me on every turn.  Consequently,
one is now becoming a nurse and the other one is a sales clerk. 
Both of them had the brains to be strong programmers.  Pity.

I'd say the biggest problem leading up to this is that Girls
are typically shorted in Math and Science.  Teachers don't go out
of their way to explain hard concepts and the Girls are culturally
penalized for being inquisitive.  Instead they are focused on 
their Language, Social Studies, and other Liberal Arts classes.

Thus, one of the biggest problems when teaching Girls to program
(as I tried to teach my little sister) is that they frequently 
lack solid Mathematical background, and hence fall short when
facing simple logical constructs; such as the transtive property:
  (A or B) and C  <==>  (A and C) or (B and C)

| 2) How do I get them interested? Which kinds of material, approaches,
| examples etc. are appealing to female students?

Following are thoughts as to how I would do it... they are
not tested and are merely specification.  So please take any
statements given very lightly. 

First, I'd be very concrete.  If possible, I'd start with a 
local shop keeper who has a concrete problem to be solved.  Have the 
girls document this problem in detail, writing out the requirements
and other such things.   This step will "orient" themselves to the
end goal of programming -- to help someone else save time.  I speculate
that once programming is grounded in a real-world need such as this,
Girls will be much more attentive to the learning exercise.   Further,
in this step you are leveraging their strong liberal art background,
thus leading them into computer science from their strong hand.

Next, I'd have them formally write out the requirements in
a language like "structured english".   Unfortunately, the best
text on this subject, Tom DeMarco's Structured Analysis and System
Specification is out of print.   This book in particular has a 
brilliant explanation of what programming is all about -- model building.
And it goes into detail about old-style system specifications; 
which, BTW, use indentation for structure.

Parallel to the thread above, I'd start them off with Charles Petzold's
book CODE.  This is an exquisite introduction to how information is
stored in a computer, how transistors work, etc.   Without this sort of
book everything that Python does is "magic" ... and you want to avoid
magic if at all possible.   For an excersise, I'd start having children
learn to count in binary using their fingers.   Then, if you have a 30
some group; I'd build an adder.  Have each person be an OR or AND 
circut.  Do this outside on the playground so that it's fun.  Have
them pass around blocks with a 1 on one side and a 0 on the other.

Following Petzold's work, I would dive directly into logic and formalism.
For an class here in the U.S., I'd start with and ambiguous sentance
"Tom or Jane will go to the store".  This could mean Either Tom or Jane,
but not Both; or Tom or Jane or Both Tom and Jane.   Explain that computers
are very strict and that they form a "model" or "interpretation" of 
reality.

At this point, so that they don't loose track of their end goal; 
I'd have them re-write their requirements to be a bit more "formal".
At this point, you can teach them about transitive law by simple
use of truth tables, etc.  These sort of things are best done in an
"oh by the way" as if they were just "mere details" as to how the
"comptuer program operates".   Avoid at all costs the word "think".
Comptuters do not think, they operate.  Talking about computers as
if they think just adds to the mysticism and creates fear.  Computers
are dumb boxes that do exactly what you tell them to do.  It's very
important that the student feel like they are in control at all times.

Somewhere around now, you will want to explain the parts of a computer
to your class.  The CPU, the BUS, MEMORY, etc.  If possible do this
in a role-playing manner.  Have one person be the CPU, another person
be the BUS, still another person be the MEMORY (in front of a bookshelf
if at all possible).  Getting a mental model for how a comptuter operates
is very important step that should be tackled before showing them how
to sling code.

This is *alot* of work up till this point, but here, and only here
should you introduce them to slinging code.  Start with small stuff,
and motivate each thing you teach them as part of the "solution" to 
the problem that they started the class with.  Let the program which
solves the shop keeper's problem emerge in front of them.   It's 
perfectly OK for you to write the code out and explain it for them.
Better yet, develop it interatively.  Don't bother about explaining
HOW it works.  If you've done your job up till now (via Logic, Petzold, etc)
it will be obvious to them how it works... they should grasp it
intutitively.   What is important is that a working program is pumped
out very quickly here, don't worry about everyone getting everything.
Once they see a working program constructed before their very eyes
(with them suggesting how to build it), computers will no longer be
magical for them.  And taking away the magic is the most important
thing that can happen.

Finally, you can start-in with your traditional programming course.
Going through line by line how the program written works, and making
improvements to it.   After a short while, then you can start in with
having them do their own creative works of authorship... in groups.
I'd never have them work individually till the very end.  Programming,
IMHO, is a group activity.  Think Pair Programming and XP all the way
through this.   Let the student guide you... they will know what has
to be done, they just won't know how to do express it in code.  With
time they will learn by example.

I hope this makes sense; after teaching a few people how to program
and musing how this would scale to a class, this is probably how
I would approach it.  Kinda non-traditional, but then again, I wouldn't
know what traditional is...

| Do YOU have any experiences concerning this question. Jeff Elkners
| Python-Video implicitly adresses this problem in a very fine way, choosing
| a girl as the main propagator of Python.
| 
| On the other hand looking at a video and reading a tutorial text are
| different things -

I'm sorry that I can't give "experiential" knowlege.  Above is
idealistic thoughts as to how it could work, albeit thoughts which
are extrapolated from many small teaching experiences.

Best,

Clark

-- 
Clark C. Evans                   Axista, Inc.
http://www.axista.com            800.926.5525
XCOLLA Collaborative Project Management Software