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.