gnu3dkit-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gnu3dkit-discuss] Development Plan


From: Philippe C . D . Robert
Subject: Re: [Gnu3dkit-discuss] Development Plan
Date: Wed, 30 Oct 2002 00:25:25 +0100

Hi,

On Friday, October 25, 2002, at 07:26  Uhr, Brent Gulanowski wrote:
Fellows,

I will admit right up front that I am a strong believer in design when it comes to any complicated system. I know that in the age of Xtreme Programming I may be a minority, but I'm going to make a short pitch for it (well, short-ish), and maybe some of my suggestions will stick, or at least generate discussions. And those of you who do this for a living, and don't need me to tell you... well, I just want this stuff on record. I'm the last person to school anyone. Phil, I know you're working on something design document-esque in your secret laboratory -- don't read this if it will interfere!

I agree with you, we should coordinate the design and dev work, esp. since I will/do not have as much time as I would like to (to work on the 3DKit).

If GNUstep already has rules about anything here (notably part 3), let's please post a link or a FAQ or something on the website, when it's possible to do so. Apologies and excuses made...

Suggestions for a Development Plan for GNU 3DKit

Every project can benefit from planning of some sort. I think that G3D would benefit primarily from a few particular kinds of documents.

1. Produce a major feature list
This is just an itemization of the features that G3D will offer, from general interfaces and platform targets to extensibility and third-party hardware/software integration and support. Features should be a) ordered by priority and inter-dependency, b) given some kind of rating of how much work each will require, and c) grouped in some sensible way (i.e.: by component or functional relationship). If each major feature (well, those slated for a milestone release, like beta1 or v1.0 or whatever) was broken into sub-features, that would also be good. Then we can look for over-lap and/or conflicts in the sub-features. Finding the right granularity for feature specification can be a dynamic process.

The flip-side of the feature list is the anti-feature list: what the system will not do, ever. Then assumptions about what might or might not happen to the code can be made explicit. It's a separate issue if they turn out to be wise assumptions.

Yes, this would also help newcomers to understand what it is all about. I suggest we create a white paper for this purpose which eplains the 3DKit a little.

2. Identify the functional sub-systems
Software just does work that, without computers, people would do. People in an organization are always broken down into departments and work groups, and I think this metaphor works very well for software systems. Especially when you have OOP and multi-threading, multi-process, or distributed process models: these are already inspired by task management and workload sharing metaphors. Metaphors aren't always appropriate, but they can help visualize a system that is otherwise very abstract. (I've come to see software development much more like people management than like mechanical engineering, except at fine granularity.)

If we want to support plug-ins or other modularity (such as a modularized renderer), it's helpful to identify how this division in the code base will result in a division of task responsibilities. This allows programmers to choose what they want to work on and concentrate on it, if they desire. It helps newcomers to understand the system, including newbies.

I am working on this. I also hope to make things as easy as possible by the layout of the PB project (see the GeometryKit as an example).

3. Specify the code standards
Naming, text formatting, documentation, file layout, repository directory structure, and many other things are done quite differently by different developers, but the project needs to be consistent. The earlier this is specified, the less re-working required.

I think we should just use the GNU standards as it is a GNU project. This requires reindentation of the GeometryKit as well, I assume.... The rules should be available on the GNU pages. We should also add the link to the 3DKit page.

4. Dependencies
Some are obvious and some aren't. This should be quite simple. What environment are we developing in, what language, what tools, what dependent libraries and the like. The fact that it's a library takes away some of the burden. If we extract the renderer into its own module, what's left is probably not far from pure Foundation OpenStep, I think, which is great. But even extracted, the renderer will deserve some boundaries to be defined around it. For an OpenGL renderer, what version of OpenGL? What extensions are we supporting?

Hmmm ... this should go into the white paper mentioned above as well, no? But to give a final answer the design has first to be finalised.

5. Construction Plan
The last main thing might be to map out the order that the first set of features should be addressed -- the first batch of essential features all have the same priority. I'm sure Phil has some idea of what order he wants to lay things out, whether it be down-up, top-down, or some other approach. I like a kind of top-down iterative blend, myself -- sketch the skeleton, then add the internal organs, muscles, nervous system, blood vessels, skin, sensory implant junctions, bionic limb attachments, kung-fu grip -- you get the idea.

I'd recommend we avoid mixing implementation discussions in the development plans, if at all possible. I was just reading the OpenSG "Design Document", and it (the document -- not the project, I hope) must have really fallen apart while they were writing it, since it's a total mishmash of fine detail speculation. It's virtually unreadable. They talk about bit mask word sizes in the midst of describing the thread synchronization objectives!

I try to write a first version of such a white paper covering many of these issues within the next few days. I will then post it via CVS and hope that others will jump in and provide useful feedback/additions/corrections.

Finally, I don't recommend anyone sitting down and single-handedly writing some monster document and then presenting it to be argued over and finally ignored or made obsolete. I recommend lots of debates on the discussion list, and I recommend some kind of format standardization to presenting sound bites for features, systems, code standards, dependencies and construction plans. I've already submitted a few attempts at features/goals -- to the wrong list, I fear. But if the design work is modular and collaborative, the discussion list will suffice for the documentation of our intentions. I surmise this is why Phil made the three distinct mailing lists in the first place.

I read your emails, it was not the wrong list..:-) It's just that I try to sort out my thoughts and then I will come up with a preliminary idea which I hope will cause some heavy discussions. From there we can plan the further development process.

I also understand that it is hard to jump into the project w/o having any real code. I really try hard to change this ASAP. I am sorry that it takes me so long...

What I do hope to do, when there is enough design-oriented material on the list, is to then assemble something, perhaps even a system to pull information out of the list archives dynamically and assemble it into a rough draft, which could be edited for clarity and cohesion. If we could identify a skeleton for the development plan documentation, like with section names or, even better, a numbering system, this data mining process would be dramatically simplified. But it's just an > idea.

This would be really nice. Maybe you want to write a list of topics in a first move which can then be discussed here so that material for the draft can be generated for all these subjects?

-Phil
--
Philippe C.D. Robert
http://www.nice.ch/~phip





reply via email to

[Prev in Thread] Current Thread [Next in Thread]