Joel Uckelman on 24 Aug 2001 17:06:49 -0000


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: hosers-talk: too tired to keep working


Quoth "Jon Stewart":
> so, musing...
> 
> Let's make some wild generalizations. All programming code is composed of
> chunks which we call functions. Functions can all other functions;  
> functions can call themselves. All functions have a property known as an
> interface. All functions exist as nodes in a directed graph (possibly with 
> cycles). The interface property determines if one function is connected to 
> another function; since it's a directed graph, this connectedness can be 
> non-existent, one-way, or bi-directional. The functions a particular 
> function is connected to determines which functions this particular 
> function can utilize. 
> 
> Suppose that every function in the graph is connected to some other 
> function; ie. the graph is fully-connected (ie. I forget the real term, if 
> unless the term happens to be "connected"; I'm tired). This is a peculiar, 
> inherent property of the graph. It simply doesn't make sense to add a 
> node to the graph which isn't connected.
> 
> All functions have roughly constant utility.
> 
> Total utility is equal to the particulary utility of a function times its 
> connections, summed over every function.
> 
> Thus in any system, adding an arbitrary function adds at least constant
> utility. As the number of functions increases, we have a linear lower
> bound on utility. 
> 
> Even better, if we are good at designing interfaces, or lucky that our 
> systems seemingly choose fortunate interfaces for themselves, then adding 
> a function might bring about an increase in utility expressed in terms of 
> the number of functions in the graph. If this is the case, we can achieve 
> exponential growth in utility with linear growth in the added number of 
> functions. 
> 
> Why, then, does it seem that we so often get sub-linear growth in utility 
> as the size of our software systems increase?
> 
> Possible reasons:
> 
> 1. Poor interfaces, ill-suited to connectedness.
> 
> 2. Functions vary wildly in their utility.
> 
> Any others?

Some functions may have conditional utility, unless you're doing some sort 
of 'objective' sum-over-all-users utility.

Some functions may have negative utility, e.g., if they're broken or 
useless.

I can add as many of these as I want:

void foo(void) { ; }

And I'd say the upper bound on their utility is 0.
-- 
J.