Computer Science, at a deep and fundamental level, is broken, and that applies not only to software but to hardware. One of the reasons that I have this feeling is that after programming for the past 25 years the field hasn't really changed. The conversations aren't any different. You could substitute 'Windows API' or 'Borland CGI' for 'HTML and CSS' and you'd be having the same exact conversations I had 15 or 20 years ago. We still struggle with leaks, be it memory, or file handles, or threads, or whatever. We still have race conditions. We still struggle with software that grows linearly in features but exponentially in complexity.
I've been struggling to find a way to express this concisely. The best way I've found so far is to ask:
What part of the computer in front of you is fractal?
The answer is none of it, yet in nature, which has been at this game of computation for billions of years, everything is fractal. We're doing it all wrong.
Posted by Stuart Sierra on 2008-12-12
Posted by Andrew J. Leer on 2008-12-12
Posted by J. Benlin Lee on 2008-12-12
Posted by Travis on 2008-12-12
Posted by Jens Ayton on 2008-12-12
Posted by Aaron McDaid on 2008-12-12
Posted by walter on 2008-12-12
Posted by Rick Thomas on 2008-12-12
Posted by Andrew J. Leer on 2008-12-12
Posted by deworde on 2008-12-12
Posted by Bert on 2008-12-12
Posted by jmdeschamps on 2008-12-12
Posted by Rick Thomas on 2008-12-12
Posted by Mark Bernstein on 2008-12-12
Posted by Benoit Fleury on 2008-12-12
Posted by Kevin Marks on 2008-12-12
Posted by Jason Watkins on 2008-12-12
I don't think 'fractal' is useful nomenclature for what you're talking about, and your use of it puts you in the company of dilettantes.
The study of fractals for their own sake is almost exclusively the domain of interdisciplinary hand-wavers. Anyone that can say the words 'chaos theory' without a lot of ironic inflection and audible shrugging is not worth listening to. Anything that divides or multiplies tends to exhibit some self-similarity — while that might make a good whoa moment for the intoxicated or teenage, it's not a particularly productive insight.
It looks like you're attempting to say that the history of progress is somehow fractal, something that's already been explored (even using software). Just because it feels good doesn't make it true or even useful.
Posted by Fred Blasdel on 2008-12-12
<br>
and <p>
elements.
Posted by Fred Blasdel on 2008-12-12
I agree with Jason and some of the other commenters above: this hope for solving all our engineering/CS problems by emulating nature to create a system that auto-magically evolves itself beyond the bugs we, as humans, inherently build into things that we design smacks me as being close to the singulatarian religion: hoping for a "raputre of the geeks" where the technology will hit some tipping point where it, on its own, cures us of all of our problems.
Most of the big challenges in engineering come from basic aspects of human nature, whether that be the difficulty of coordinating large groups of people in complex efforts (such as the standards processes behind HTML and CSS) or, as jmdeschamps points out above, how just darn intractably hard it is to invent new things. At best, the things we build can be useful tools for helping us work on these problems more effectively, allowing us to create new more effective social structures and giving us more inspiring materials to work with. And, in that regard, technology has done pretty damn well in the last 30-40 years. From the personal computer enabling an explosion of digital artistry and literacy to the internet enabling new models of open collaboration, technology has made a relatively large and relatively positive impact on human history and potential.
Any quest for technology that will fundamentally alter (or, worse, replace) human nature is not only doomed to failure, but a major waste of a discipline that, at its best, is dedicated to the high and serious purpose of giving humans tools to use in the long and slow quest of working to better understand and improve their world.
Posted by Greg Borenstein on 2008-12-12
Posted by Rick Thomas on 2008-12-12
Two thoughts - one reason that you can replace Term A with Term B is that every so often we have a new generation of software developers that have come of age knowing B rather than A, and they attempt to solve all of the same problems with B that the previous generation attempted to solve with A, while most of the A developers (now IT managers) just shake their heads and say "But we already solved this!"
The web is fractal (deeply, with one estimate putting its fractal dimension at 4.1). Most stand-alone programs aren't. My belief is that web programming as a consequence is in fact profoundly different at a deep level to programming Windows, for instance, and that we're only just beginning to appreciate the significance of that. We've spent the last decade+ trying to treat the web as an imperative architecture and it isn't, and I suspect that the hard work of understanding how to truly program the web is only just beginning.
Posted by Kurt Cagle on 2008-12-12
Posted by Rick Thomas on 2008-12-12
Posted by Justin Sheehy on 2008-12-12
Posted by Nx on 2008-12-12
Really interesting post. My gut feeling is that something is wrong with the way we build software, but can't put my finger on it. I've also been fascinated about software vs nature, but with no real conclusions drawn so far.
I was casually quizzing my girlfriend, who diagnoses diseases at a cellular level, to get an understanding of how nature designed our bodies. I was interested in seeing if any of it would be useful to software development.
Some things that I gleaned were very interesting. For example, there is a huge amount of message passing going on. The parts that emit messages aren't aware of each other, and different receivers react to messages in different ways, some completely ignore them!
Similarly, the body has two channels for sending messages - the slow blood stream, and the lightning fast nervous system. Each being better for a particular purpose. This allows for slow, less important communication like preparing muscles for flight (takes < 1 minute), and then for fast, critical stuff like ensuring the lungs keep breathing (signals sent/receive in nanoseconds).
Cool huh!The body also distributes knowledge around so that no individual part does too much. In our DNA, there are cells that do nothing else but go around checking that the other DNA cells are healthy. If not, they instruct those cells to die. It's amazing when you look at how nature separates responsibilities, builds in redundant failover mechanisms, and allows for loosely coupled communication.
Anyway, it's all interesting. And it reminds me of good OOP design a bit. I suspect we have most of the right tools for software development, but could take a few good design lessons from our mother nature.
PS - The excessive use of bold is for scanners!
Posted by Tobin Harris on 2008-12-13
"software that grows linearly in features but exponentially in complexity" - nice observation. It's worth noting how easy it is to get chaos in a system - all you need is some kind of delay (or something isomorphic) and non-linear feedback. Software is full of these characteristics, especially once you bring in the human element.
I agree to some extent with Michael, the Web does have some fractal features - see timbl's notes on the fractal Web.
I imagine this feature of the Web will become 'stronger' once grouping of resources (beyond e.g. per-domain/site) is used more, avenues for this include URI Templates, named graphs (sets of RDF statements collectively identified with a URI) and POWDER.
What I'm not so sure about is how this relates to CS as a field. The subject of the life sciences is fractal, but does that mean the study of life sciences has to be fractal too?Posted by Danny on 2008-12-13
I would add Atom to the head of your list of grouping mechanisms - grouping happens passively today and much more as we use Atom for general collections.
"does that mean the study of life sciences has to be fractal too?"
Bit of a deep question for a blip response, but here goes:
One can argue that the relational steady-state of any human discourse is fractal - that which remains as a historical change in the way we think and act. To reach that point there must have been an iterative adjustment process affecting local and global. The resulting forms are fractal. That's a useful observation in this domain if fractal math can be used to model or characterize the discourse, or to usefully scaffold discourse. Other iterative forms may serve as well.
Posted by Rick on 2008-12-13
Riffing off of Tobin Harris' comment, I found the book 'The Plausibility of Life' rather insightful regarding evolvability.
Another way of looking at it is what makes genomes resilient and generative (such that mutations and recombinations are still very likely to produce a viable organism, if perhaps one less fit), rather than brittle.
It's hard to summarize exactly what I got out of the book, but there are lessons buried in there about designing infrastructure and frameworks that are similarly generative.
Posted by Michael Bernstein on 2008-12-14
Posted by gena on 2008-12-14
Posted by Stu on 2008-12-15
Posted by Michael R. Bernstein on 2008-12-12