Software Carpentry:

Lessons Learned


Greg Wilson

Software Carpentry Foundation


December 2016

CC-BY logo
Tweet about deer jumping through store window

A proud Canadian

Software Carpentry logo

Basic lab skills for scientific computing

What We Teach

Unix shell

Git / GitHub

Python (or R)



What We Actually Teach

Unix shell

Git / GitHub

Python or R



automating tasks

tracking and sharing


structured data

making work reproducible

Terry Pratchett

If you build someone a fire, you'll keep them warm for a night. If you set someone on fire, you'll keep them warm for the rest of their life.

— Terry Pratchett

Since January 2012

Over 820 two-day workshops

780 instructors

23,000 learners

…and we just hired our sixth full-time staff member

Photo of all Software and Data Carpentry staff

Where We've Been

Map showing where workshops have been run

Lesson #1

Most scientists think of programming

as a tax they have to pay

in order to do science.

And those who don't are not representative

of the other 85%

(Hannay et al 2009)

Lesson #2

The curriculum is full.

And even if it wasn't:

Cartoon of the blind leading the blind

Lesson #3

  • Grow from within
    • Turn learners into instructors
  • Institutional partnerships
    • Single source of funding = single point of failure
Data Carpentry logo

Lesson #4

We know a lot about teaching and learning.

…for some value of "we".

Book: How Learning Works Book: Teach Like a Champion Book: Teaching What You Don't Know Book: Building a Better Teacher


Subgoals improve performance

Practice works best for facts, worked examples for skills

Peer instruction beats lecture

Media-first instruction increases retention

Grades in computing classes are not bimodal

Lesson #5

Most people would rather fail than change.

I.e., they would rather ignore evidence

than change their working practices or business plan.

Sound familiar?

Magazine cover claiming global warming is a myth


Stefik & Siebert: "An Empirical Investigation into Programming Language Syntax." ACM Trans. Computing Education, 2013(11),

Lesson #6

Programmers can rationalize anything

Screenshot of a spreadsheet

This is actually a pretty good tool

…once you normalize for effort
invested in mastering it

And stop blaming users for the fact that
version control can't handle it

Lesson #6

Programmers can rationalize anything.

Screenshot of a complicated Git merge

Git is as horrible as it is useful

Stop blaming users for its shortcomings too

Lesson #7

Correctness isn't compelling.

Because the odds of being caught are vanishingly small.

Graph showing number of workshops over time

But people care a lot about productivity.

Lesson #8

We're smarter together

  • Collaborative note-taking and pair programming improve outcomes
  • Democracy makes organizations resilient


What about collaborative lesson construction?

  • Been using Wikipedia and open source as models
  • Caulfield's choral explanations makes me wonder if Stack Overflow is a better model

Lesson #9

Video lessons: just say no

  • Maintenance greatly outweighs construction
  • And the web isn't a better TV: it's a way to collaborate
The Discussion Book

Thank you.