fantastic link. i spent some time looking into the component idea. it’s unbelievable how timely your link is:
i have been wrestling with this issue for a week or so now. all the books, articles, papers and source code digging, one does to tackle all the programming challenges of a game engine. so much effort. so many dead ends. no magic bullets. i think your blogger mentions this too. and the deeper i dug into the design and testbed process, the worse it got. all i could see was this endlessly growing heirarchy and a very complex scenegraph. luckily i’m not working on a game per se ( my needs are a little more humble ), but my work shares many of the same concerns. clearly, one needs a pattern or methodology able to utilize the computational, mathematical, and human-understandability benefits of a graph, while creating the freedom and complexity which autonomous components working in networks ( and together over networks ) can provide. whew. long sentence.
i have read a few papers on these component based approaches, and also some on asynchronous real time networks like COSA ( which has many similarities ) as possible methods of working. from what i gathered, the component view of development addresses two huge areas of computing: how to exploit the processing power of networked computers and how to deal with the ever growing complexity and bugginess of massive software systems. it’s no accident that this approach is found a lot in grid computing, it looks really expensive. cpu’s love heirarchy. it seems that the component model seeks to do exactly what the developer in the blog was asking for: how can i create complex behaviors out of simpler ones ( ironically a hierarchy ), in a way that will create interesting and complex capabilities for the games system. at the same time, i want to providing a high-level toolbox to use more as an artist’s palette than the programmer’s complex code library, i.e. scripting. interestingly, i ran into this topic while looking at grid-based processing systems.
to me at least, this component-view of programming smacks of something that is next generation, and is very exciting. it’s been around for a while, but it’s new territory in graphics programming. while i don’t pretend to be a CS wizard, the ideas are not hard to grasp.however, what really jumps out when you start looking at the connection models and illustrations of component systems is how foreign it is to the way people design things. the component idea itself is pretty intuitive to understand. the problem though is that while the “component” part is easy to understand, how to make them do things you want to do is not. how do you design with these things? i suspect that this is not so much a problem of the component-view, but more one of the heirarchical way humans think ( at least when we’re designing things )! when the blogger said, “you just have to change your way of thinking,” i think he was totally correct. but that’s easier said than done. this kind of technology may only become practical with the creation of languages and tools designed to translate the heirarchical approach ( we humans really seem to like hierarchy ) into complex networks of autonomous, asynchronous ( even if only simulated ) components doing wonderfully complex things. this seems to be becoming the aim of many new languages and methodologies.
if you think of truly complex engineering projects like say an aircraft carrier, clearly the component based approach is the only way to go. each object has inputs and outputs and does it’s thing. a valve doesn’t have to know anything about heads up displays on the jets, and vice versa. a scenegraph approach to building an aircraft carrier would be crazy, but it’s probably the best way to organize the drawings and plans. the challenge seems to come when applying either heirarchy or component thinking to a totally different goal than an aircraft carrier: an image. those engineers don’t have to render their world, or worry about antialiasing – they get that for free. a game engine must model both interaction and representation, a serious challenge that neither heirarchy or autonomous components seem to be 100% tailor made for. how does one blend them? how does a programmer create a system that they can have some hope of understanding or working with? more important to me, and i think to the blogger you refer to, and perhaps to you, is how do i create a system that i can be really creative with? game engines to me are about interactivity. not just for the end user, but for the mind that created it. i, the designer, want to play with the system and make it do cool things, now. if you have to create a heirarchy, i think the heirarchy tends to bleed into what you can do with it. a hierarchy disincentivises ( had to look that one up ) a fun, creative, artistic approach to make amazing interactive visuals. it’s hard for the programmer to experiment and create or even discover fun new things when you really have to plan everything out ahead of time.
i agree that when you start to really dig into the guts of some of the design and programming challenges of creating interaction and representation, you see the terrible inadequacy of today’s languages and tools. it’s not the tools fault. they just work the way we want them to. we have to figure out something new. as you can see, this really struck a chord with me. hopefully the internet-forum-crank-o-meter on my username hasn’t gone up…
so what’s a guy who needs to build a really fast cubic path renderer supposed to do? lol.