Programming: Repurposeability

February 23rd, 2009
programming, repurposeability, tech
How much needs to be changed when you find out the problem you thought you were solving differs substantially from the actual problem? Programmers complain about this all the time, generally when it's not their fault. A manager comes in telling you that some cost you thought was negligible isn't. A client finally sees a prototype and tells you you've conflated two similar but crucially distinct categories. It's easy to say "stupid non technical people -- can't they tell me what they really want from the start?", but its not always someone else's fault, and this fixes nothing.

Given that we are always constructing models of problems and nearly always must begin before our understanding is total, times when we must repurpose our code are unavoidable. Then this presents a metric for evaluating a programming style or language: repurposeability. That is, when one writes code in this fashion and finds out that one was solving the wrong problem, how much work is needed to repurpose it to solve the problem one should have been solving all along?

Repurposability is the driving force behind many aspects of good coding style. The avoidance of duplicate code, for example. Say you need to send some debugging output to a file instead of standard output. In java you might have a gui program with hundreds of calls to "System.out.writeln()" that really should be calls to some debug function. So this is a programming style issue. It is also a programming language issue, though. In common lisp one might deal with this problem with a statement equivalent to "in the code called from here, substitute this object for System.out". Similarly in java, you might have hundreds of reads and writes to the object attribute "Foo.bar". The standard arguments for java tell you to make them be to "Foo.setBar()" and "Foo.getBar()" instead, so if you later change your mind you don't have to change all those references to "Foo.bar". The advice is so to maximize repurposeability. But in python one would solve the same problem by using Foo.bar all along and taking advantage of the ability to wrap it in getters and seters later if needed.

I need to think more about what is needed for repurposeability, but it certainly sounds like a useful metric.

Comment via: facebook

Recent posts on blogs I like:

Weird Nerd Moralism

Let's talk about Nietzsche without having read him!

via Thing of Things November 29, 2024

Developing the middle ground on polarized topics

Avoiding false dichotomies The post Developing the middle ground on polarized topics appeared first on Otherwise.

via Otherwise November 25, 2024

How to eat vegan on Icon of the Seas

Royal Caribbean has a new giant cruise ship, Icon of the Seas, which has a large selection of food options.

via Home November 21, 2024

more     (via openring)