Brian's Waste of Time

Mon, 03 May 2004

In Defense of the Wheel

Adrian blogged about a tendency for people to reinvent wheels. He points out that it seems to happen a lot in open source. It does, but I am not sure it is a bad thing. He provides an example, five re-implementations of hypercard, none of which are succeeding, and posits that their lack of progress is due to developer resources being spread too thin because of ego problems.

This is a symptom, I think, not the problem. A massive drive, for as long as I have been playng in the software industry, and I suspect much longer, has been to make programming more accessible to the masses. This has succeeded to amazing levels -- Excel can be seen as an extremely high level programming environment. This is also natural, I think, as programming is simply the most precise way to tell a tool what to do. It is not easy to write good software, however. Doing so takes practice. Much like art students copying the work of masters, novice programmers re-implementing the work of masters is one of the best ways to learn.

It is frustrating to watch people reinvent wheels though -- particularly when you know projects which need help. On the other hand, learning is a process of invention (well, Stefano discusses categorization as invention, not learning, but the two are closely twined, and I did enough research on it back in grad school to be comfortable talking about learning as invention if not categorization =). This means that one of the best ways to understand a wheel is to reinvent it. This is why you do labs in school. It also leads to better wheels, sometimes (who wants a cross section from a tree anymore when you can get an all-weather radial?).

To keep it personal and grounded, I'll use my most recent micro-project as an example. I am pretty sure ObjectFilter has been done before. However, it is one of the low hanging fruit problems that Dion mentions as being fast and easy to do with AOP. I am doing it to learn more about AOP (at which almost everyone is a novice) and applying rules systems (at which most people doing it outside of AI are novices) to fine-grained object problems (instead of the classic application to course grained decision making and behavior control problems) and it just so happens that I need the functionality it provides (win for me). Ideally by sharing it other people can learn something as well, and maybe even make use of it productively (win for them). Possibly the ideas will even lead to something widely useful, but for now I'm aiming for the next problem -- which possibly involves putting some rubber around the outside of that hunk of wood to help it get better traction.

0 writebacks [/src] permanent link