Journal Articles

CVu Journal Vol 14, #2 - Apr 2002
Browse in : All > Journals > CVu > 142 (12)

Note: when you create a new publication type, the articles module will automatically use the templates user-display-[publicationtype].xt and user-summary-[publicationtype].xt. If those templates do not exist when you try to preview or display a new article, you'll get this warning :-) Please place your own templates in themes/yourtheme/modules/articles . The templates will get the extension .xt there.

Title: On Re-Inventing the Wheel

Author: Administrator

Date: 03 April 2002 13:15:50 +01:00 or Wed, 03 April 2002 13:15:50 +01:00

Summary: 

Body: 

I'm in one of the research groups at the Cambridge University computer lab. One of the academics in our group has a background in psychology, and he asked himself something like "What makes some people want to program, and others want to do things manually?'' He developed a model that treats it as an investment/pay-off decision - programming takes mental effort, which only pays off if the program works. If you think programming is high-risk (i.e., you think it's very likely that after all that effort you won't get anywhere), then you'd rather do things manually. (He also thinks that programmers may be more risk-seeking than others, but that's probably too much of a generalisation; some of us know very well that we can write a working program, so the risk is negligible.) I want to generalise this line of thought for a while. For "doing things manually'', read "using skills you already have'' (which might include programming skills), and for "programming'' read "learning something new''. For example, if you were faced with a certain development task, do you just hack it out in C, or do you use a library of some sort? What if using that library means that you have to put in a lot of effort to learn it, you're not 100% sure if it will do the job anyway, and it seems a lot easier to just go ahead and re-invent the wheel? Or what if you don't know and want to find out if there's a library "out there'' that will help you - how much time do you spend looking?

Of course, there's more to it than that. The library's code will probably be more reliable than your first attempt, so if you want something reliable then you have to weigh learning the library against spending a lot of effort on getting your own code right (and if the library is still maintained then its maintainers may save you some work in the future as well, such as incorporating better algorithms or adding support for new hardware). But reliability does not always matter; you might just be playing with prototypes that you're going to throw away, or use once and check the result, or whatever, and you might not foresee spending much effort on your own code. Still, you might feel that learning the library gives you knowledge that you can re-use in the future for other tasks, so in a sense the extra effort is 'amortised'.

Whether you think learning a library (or a technique, or whatever) is going to be worth it for the future will depend on how much you imagine yourself using it in future. If it relies on some old operating system that nobody uses anymore (including you) then you're less likely to bother, unless you think that you can later adapt your knowledge to another, similar library with little effort. You can apply similar reasoning to writing your own libraries or other development tools, if it's only you that you're writing them for; if you don't think you'll ever re-use a component then you're less likely to make it re-usable.

In practice there are other issues to consider. Availability is one; if you're a hobbyist programmer then you're not likely to buy an extremely expensive toolkit, in which case the fact that the toolkit exists won't make much difference to you. Some developers don't use tools because they can't accept the terms and conditions, which might limit the distribution of what they produce, or because the tools limit distribution in a technical way (such as by introducing an operating system requirement that the developers don't want, or by requiring non-standard software to be present on the system and making installation too complicated).

You might even find yourself spending effort on looking at existing systems with a view to avoiding the ideas behind them, especially where patents are involved (unless you want to just wait and see if they threaten to sue you), or if you're doing academic research - you're supposed to make "an original contribution to knowledge'', and woe betide you if your examiners think they know of someone who's done it before (even if they described it using words you never thought of searching for); this means that an awful lot of your time is spent looking into what other people have done and making sure that you can say what's so different and special about your idea (ah yes but I used a different user interface!).

Notes: 

More fields may be available via dynamicdata ..