Not in the Calendar


Greg Wilson

Software Carpentry Foundation


January 2017


Version 1.3



What doesn't exist can tell us a lot about what does.

Once Upon a Time…

  • Support programmer in university computing center
  • Saw smart people stumble because no one taught them basic skills
  • Complained until told to put up or shut up
  • First Software Carpentry class ran at LANL in 1998
LANL Software Carpentry, July 1998

Time Passes…

Dr Dobb's Journal
  • Book review editor for Doctor Dobb's Journal
  • Hundreds of textbooks on compilers, but no textbooks on debuggers or debugging
  • Or build tools, or package managers, or…

More Time Passes…

  • Asked to teach a course on software architecture
  • Looked at two dozen books and other people's courses…
  • …but no textbooks describe actual architectures
Beautiful Code AOSA Vol 1 AOSA Vol 2 POSA 500 Lines

How Learning Works

  • Started reading the education literature in 2011
  • We know a lot about learning and teaching
  • But most faculty have never been taught how to teach
Surprised Fluttershy

We Can't Get There From Here

  • "Computer Science for All" is a great rallying cry…
  • …but meaningless because most programmers have never been taught how to teach either
Learning goes both ways

Computer Science

Computer Science Strong Opinion

  • We know a lot about software and how it's built
  • But students aren't taught empirical methods
    • Biologists spend 6 hours/week in the lab
    • CS students do one experiment in four years
Making Software

There's no shortage of material

For Example

[I couldn't find a picture of Fluttershy as a mad scientist]

Machines Learn What We Teach Them

  • "Machine learning is money laundering for bias"
  • Because bias isn't part of the discussion of algorithms
  • Just as harassment isn't part of the discussion of distributed systems
    • Impossible to solve…unless you're the Olympics.
  • Same cause: programmers aren't taught how to empathize
Angry Fluttershy

What's the Pattern?

  • Smart people stumble because no one taught them basic skills.
  • No textbooks on debuggers or debugging.
  • No textbooks describe actual architectures.
  • Most faculty have never been taught how to teach.
  • Most programmers have never been taught how to teach.
  • Computer science students aren't taught empirical methods.
  • Programmers aren't taught how to empathize.

What's the Pattern?

  1. Gentlemen don't get their hands dirty.
  2. "Knowing X" = "knowing how to teach X".
  3. The world is basically OK the way it is.


  1. Have students get their hands dirty.
  2. Teach teaching.
  3. Make Empathy 101 a required course.

Proposal #1: Get Their Hands Dirty

  • They already program…
  • …but design courses are stuck in the early 1990s
  • They don't take advantage of the billions of lines of software that are now openly available
  • Or capitalize on the current craze for data science


So let's do that.

Proposal #1: Empirical Software Engineering

Given version control repositories for six software projects, determine whether long functions and methods are more likely to be buggy than short ones.

  • Requires tool use, model building, and statistics
  • Encourages students to do, so they understand and value, so they engage
  • Fits into existing curriculum
  • And it's culturally defensible

Proposal #1: Empirical Software Engineering

  • Doctors do science
  • So they know what
    it has to do with them
  • So they teach it
    to the next generation


Stop asking CS students to pretend to do a project
and have them do science instead.

Proposal #2: Teach Teaching

  • Create programs in CS education modelled on those in math and physics education
  • Create the teachers our schools need…
  • And the students we wish we had
The Blind Leading the Blind

Proposal #2: Teach Teaching

Start with a single course


Why yes, they will be doing science in this course too.

Proposal #3

  • I no longer believe that we will fix this
Women in CS
  • But we can raise up a generation that will

Proposal #3: (Also) Teach Teaching

Teach the context

Learning goes both ways

Proposal #3: (Also) Teach Teaching

People of East Asian or South Asian ancestry make up 8% of the general population, but 60-75% of undergraduates in Computer Science at major universities. Write two 1000-word position papers to argue pro and con the proposition that this proves people of European descent are naturally less capable of abstract reasoning than their Asian counterparts.

And then compare and contrast your arguments with those made about female under-representation in computing.

There's More…


  1. Browsercast
  2. The Discussion Book online
  3. 500 Lines or Less - for science!
  4. Close Enough for Scientific Work
  5. A Hundred Broken Programs
  6. Re-do Stefik for Python, R,
    MATLAB, Julia, and Excel
  1. Choral explanations
  2. Elm City
  3. The Encyclopedia of Error Handling
  4. Managing Research Software Projects
  5. The Undergraduate Owner's Manual
  6. Temporal cluster analysis to find
    actual design patterns


For more information…

But If You Want to Work on Things That Really Matter

Note: this is already out of date


Thank you.