Given Infinite Minions

My browser home page has a "to do" list and a "to don't" list. The former is things that I should be working on; the latter is things that I shouldn't let myself do (at least, not yet). There's more than this, like fiction I want to finish, but that's a story for a different site. Maybe some day I'll reconcile myself to the knowledge that there just isn't time to do it all. Meanwhile, if you're interested in doing any of these, or already have, please give me a shout.

An undergraduate course in empirical software engineering

This post describes the idea, and this one explains why the time is right.

Teach programmers how to run grassroots get-into-coding groups

Ironically, programmers create get-into-coding groups so that people won't have to teach themselves how to write Javascript, but then reinvent all the wheels when it comes to teaching, running a non-profit, or organizing a community. I think it would be cool to combine the Software Carpentry instructor training course with material on building community organizations to fill in those gaps.

The Discussion Book online

Today's MOOC platforms use the Internet like television. What would they look like if they directly supported some of the techniques described in this useful book?


Allow people to create synchronized voiceovers for HTML slideshows. I've had several summer students take a run at this; the hard part is the authoring tool to add time marks, but as the demo linked in the title shows, the idea itself works.

500 Lines or Less - for science!

Can you write a climate simulator in less than 500 lines of Python? What about constructing phylogenetic trees in less than 500 lines of R? This collection would show readers how science is turned into code across a broad range of disciplines. Each entry is 200-300 lines of scientific code, and another 200-300 lines showing readers how to test simple versions of a broad range of scientific applications.

A Hundred Broken Programs

In the spirit of Johnson's GUI Bloopers, this book teaches debugging by working through a hundred short examples, each showing a different kind of fault, a different method of diagnosis, or a different kind of fix.

The Encyclopedia of Error Handling

How do programmers detect and handle errors? This companion to A Hundred Broken Programs would cover everything from type-checking during compilation to exception handling, rolling back transactions, and re-starting servers.

An Empirical Comparison of the Syntax of Python, R, MATLAB, and Julia

We tried to repeat Stefik et al's study of programming language syntax for languages commonly used in science, but weren't able to get enough subjects. I think it's worth trying again, both for its own sake and to show that this kind of work can and should be done.

Choral Explanations

Just as MOOCs are mistakenly treating the Internet like television, Caulfield's notion of choral explanations has me thinking that I've been mistaken in trying to treat lesson construction as software development. A "lesson" platform that uses Stack Overflow as its model rather than GitHub or Wikipedia would be fascinating to explore, as would collaborative choral software exegesis.

Teaching People to Think Like the Web

Jon Udell's Elm City calendar syndication project wasn't really about calendars: it was about teaching people how to think like the web. I have yet to see a better approach, and it would be exciting to resurrect this project and try again.

Software Tools for the 21st Century

I firmly believe that the Kernighan Trilogy (Software Tools, The Unix Programming Environment, and The C Programming Language) are the main reason that Unix succeeded. I would really like an update that uses a modern operating system and a modern programming language (preferably functional), borrows heavily from PowerShell and the like, and takes Udell's "seven ways" to heart.

Managing Research Software Projects

Your graduate degree is in ecology, but now you're running a three-person team responsible for building and maintaining a hundred thousand lines of code? This book (or course, or whatever) is everything you absolutely, positively need to know after you know how to program. (We've started work on this, but more hands would be welcome.)

Temporal cluster analysis to find actual design patterns

I often use Sajaniemi et al's roles of variables in teaching, but like the classic design patterns, they were "discovered" by eyeballing novice code. I think that cluster analysis of patterns of class and variable use would uncover more patterns, and confirm my suspicion that some of the classics are really just different names for the same thing.

The Undergraduate Owner's Manual

I would really like to run a one-semester course for first-year undergraduates whose subject was themselves. What happens in your brain when you learn something, and how can you learn more efficiently? What's the effect of sleep deprivation on the quality of work? How can you analyze the social dynamics of a classroom, or change them to make participation fairer? How can you run a small group project? Who decides what gets taught at universities and who gets to take part?

In the wake of posts about Shopify's support for white nationalists and DataCamp's attempts to cover up sexual harassment
I have had to disable comments on this blog. Please email me if you'd like to get in touch.