July 31, 2006

...Learn TDD with Codemanship

Software Visualisation

Many of the intellectual breakthroughs that have occurred in the last 100 years have come about because we discovered new ways of looking at the world. The fogging of photographic plates led us to the discovery of radiation. An accident with a sequence of still cameras led to the invention of cinema, and with that came many more discoveries about motion and mechanics. X-rays allowed us to see inside a person without the need to cut them open. And now magnetic resonance is enabling us to do that in much greater detail and in 3-D. Radio telescopes have allowed us to explore the edges of the known Universe.

Innovations in visualisation have almost always led to new discoveries. Worlds that were hidden from view - perhaps because they were too small, or too large, or too fast, or too slow - have been revealed to us by our unique ability to extend the range of our eyes using technology.
Whole new branches of science have emerged, like chaos theory from computer simulations of processes that would take millions of years to do mechanically.

So you'll have to forgive me if I can't help feeling that visualisation could be the key to discovery and innovation in software development. We need new ways of looking at software, and from these perhaps new ways of thinking about and creating software will emerge.

Take time-lapse photography, for example. You may well have seen it used on natural history documentaries. Shooting at speeds of as little as 1 frame an hour, when speeded up to 24 frames a second we can see how a seed grows into a mighty oak tree right there in front of our very eyes. We can see how the weather changes, how clouds move and form and evaporate, and how seasons come and go - all in a matter of minutes. And at that speed we notice motion we'd never noticed before. How a tree explodes from a single seed. How winter sprinkles itself across our countryside like icing sugar on a cake.

I have a video camera at home, and I've noodled with the time-lapse features to get some quite amusing effects. I've even done the classic "seedling" shot with a tray of wheatgrass; hours of fun (if you can call creeping about trying not to jostle a camera for 8 hours "fun").

What if you could take a time-lapse video of your code over the course of a project (and beyond)? What would that look like? I suspect it might look like the growth of a tree from a seed. If you think about it, software is essentially like a tree. The language defines branches and leaves, and these are created (and rewritten, and destroyed) in the course of development.

It would be very interesting to see what kind of motion the growth of the code displays. I'd also be very interested to see the code as it grows in other ways - like an X-ray of the code, for example, or a temperature map - to see how its quality is changing as it grows. It would be very interesting indeed to observe code "aging", and to relate the aging process to other factors in the development process (or in the code itself, like the design of the programming language, for example).

This is just one example of what I think could be a very fruitful area of exploration. So convinced am I of the value in visualisation that I am looking to set up a special interest group for people who, like me, are curious (curious enough to actually do something a bout it, I should add) about the possibilities of software visualisation. My first aim is to create my software time-lapse video, possibly using information taken from CVS check-ins and some custom visualisation tools that I would have to build. Maybe this could be an Eclipse plug-in eventually. My "temperature maps" would use design quality metrics to generate extra information on top of the software structure.
If you're interested in exchanging ideas on this, or on getting involved more proactively, please drop me a line
Posted 14 years, 5 months ago on July 31, 2006