tychoish, a wiki

tychoish/rhizome/ Learning Problems

Learning Problems

2 March 2014

Learning how to make computer software is hard. Not fundamentally hard: lots of people can do it, and even more people do things that are functionally equivalent to programming though they wouldn't think of it as such. But teaching people how to write good computer software is a challenge, and one that I'm generally interested in exploring more.

For a long time, I've been interested in this problem from the outside: I didn't really know how to program in any meaningful sort of way and I was interested in deconstructing the process of making software. Then something clicked and years of tinkering with systems administration and reading about programming languages and practices clicked and while I think I have a lot left to learn, I've started thinking about the problem from the other side.

We accumulate many skills and kinds of knowledge in an incremental sort of way: you study and practice and little by little our brains (and bodies) form new connections and we "learn." Other kinds of learning follow a more "step-based" approach: we practice and study for a long period of time without much discernible change in understanding or skill until at some point we experience some sort of larger improvement in ability.

At least for me (and perhaps you as well,) things like dance, knitting, writing, and most structured/classroom-based topics tend to be incremental, mostly. Other things, like programming (at least initially) and singing/music tend to be step-based.

This isn't to say that step-based areas of focus don't require regular ongoing practice, just that the observable markers of progress may lag inconsistently behind effort and pedagogy.

When I was doing more non-professional writing, I was fond of the school of writing advice that said "the way to learn how to write (fiction) is to have a good story to tell;" when I think about learning to program I think the first step has to be a need to automate something on a computer.

I've even started a wiki page on the topic.

Hackers describe this as the "scratch your own itch" method (from CatB and elsewhere.)

Neither the idea of step-based versus incremental learning nor the notion of using a personal need to drive learning are new, but I think they illuminate eachother well.

Since I stopped being a student somewhat abruptly in 2007, I've become increasingly glad both that my education and personal development has continued and I've had the opportunity to explore things in ways that didn't make sense in a structured context (e.g. "I want to learn about how databases work without formal CS/systems training," or "I want to learn how to sing and withouta lot of music theory.")

For most of the past year I've been pretty heads-down on the "learning to program" project, and I've had a number of interesting problems that I've used to help explore the topic:

Most of the projects that had been open and on my plate for the last few months have mostly wrapped up. There's more work to be done on them, I could do a lot more work, and I think I will, but none of them are lacking a feature that I really need in order to accomplish something that I want to do.

I'm interested in learning more: about writing (documentation, science fiction, etc.), about software development and computing.