I'm almost done with a new book that I got for my birthday -
This wonderful book actually deals with new facet of science that is just beginning to grow on us - Super Networking.
The idea that networks are found everywhere is at the bottom of this idea - and that these networks all present some basic undeniable properties which can be mathematically predicted. The Internet is an example of one such network. The nerve system is another. Food chains in animals present another example and business connections between companies and dealer are another. They all have in common some basic mathematical principles and share the same mathematical behavior. Its amazing to think about.
I heartily recommend reading it (start with the blurbs/reviews if you like)
Anyway - there are several properties of such networks. One of them is that they constantly grow. The other is that they have "hubs". In the Internet - a site such as google would be a hub - it collects many links to it and links to many other sites. Hubs exist all around us. Scoble is a hub of links - and the blogsphere (in my mind) would definitely constitute a linked network such as described in the book. A network of individuals whom you know is such a network and has hubs - people who have many friends and are connected.
Another law of these networks is that they obey the power-law. In fact - Clay Shirley has written a while ago on the phenomenon of power-law within the blogsphere. Definitely worth a read.
So here's an idea for you - perhaps we can classify the structure of code as a network that obeys the power-law?
Referring to object oriented projects that have classes - we can start to dissect our code into links and junctions.
A class that is used by another class (using a variable instance for example) can be said to have a link to that other class. If that other class is using other classes as well that use this same class together we can see a network of connections forming. Obviously some classes will be used more that others - those will be considered hubs. Since our code always changes we can definitely say that the network is growing (link between classes are added and removed constantly while refactoring). Would our hubs exhibit the power-law? I wonder. And my guess would be "yes".
This idea leads to some interesting questions:
- Some projects are harder to maintain than others due to various problems in the code (unreadable, too procedural and so on). Perhaps we can attribute maintainability points for networks which exhibit power-law properties more than others? Can we then find a way to predict the way a project works and behaves by defining its network topology?
- What would the network topology of SOA based solutions look like? Will SOA based solutions look more like a directed network than a regular growing network? How many maintainability points would they get?
- more about SOA - perhaps if we think networking we can starting to develop SOA based solutions that follow power-law networks topology - that is that various services can choose to talk to other services based on various "attraction points". Such a network is very durable and cannot be broken easily unless the hubs are targeted directly (which does not happen in random failures).
I know I'm not making much sense if you haven't read the book yet but try reading it and them come back to this post and tell me what you think.