The wiki as a guiding light for open software development
Sy wrote this.
The value of the computer
You already know about the value of open source and free software. There are qualities of it which are obviously valuable. There has been a great deal of excellent literature on the topic. Not many people, though, foresee the true value it represents. When people say it is a "Good Thing", not everyone really understand the significance of this statement.
Now I'm not going to go off onto a rant of the value of open source and free software except to say one thing. I believe it is fundamental to our improvement as a species.
Think about it this way. Knowledge, information, communication.. these are all broad concepts which we've been improving at from any angle we possibly can. Biologically we've been developing better tools and methods. Technologically we are doing the same.
The true value of computers lies somewhere beyond their ability to store and process information and somewhat closer to an enhancement of our existing abilities. Furthermore, the true value in computers is with its software. It's the stuff that people interact with and get benefit from. Software is the ever-evolving brains.
I have been horrified for the longest time over the notion that software can become obsolete. All those hours of effort poured into a piece of software only to have the popularity of the platform dry up and blow away.
Software is never quite done, because needs and methods are constantly evolving. So to have a piece of software left at the wayside means that its value will probably diminish over time. Of course there is software which is basically timeless, but examples would be few and far between.
Sure, I could emulate my commodore 64 and find new use in the software, but no matter how good the software is, somehow its longevity has diminished.
Having since found the entire *nix world, I can say that one major reassuring factor is the longevity of its software. Programs written in portable languages with very long-lived concepts has done very well after all these years.
Furthermore, longevity is practically assured thanks to open source and free software. Even if a programmer gets arthritis, their code is available for the next person to continue effort with.
Open source projects
Open source projects are a step beyond just the idea of longevity of software, it takes the idea that a piece of software can be handed down from one person to another to the idea that multiple people can collaborate on the same project.
Sure collaboration has always existed, but because of the interest and availability of the project's software it's easy for someone else to drop by and look inside the code.
So you sit down to write a piece of software. Maybe you're paid for it or you're doing some creative exploration to further your skills.
I believe that learning is an inevitability. One learns as one progresses towards various goals, as one pauses to think and as one sleeps at night. So if we can assume that learning will come when one is ready to learn, let's think about the goal of programming.
The end-goal of the act of programming is to create a perfect piece of software. It's not usually an obvious goal that can be understood before beginning, but it's a concept one drives towards nonetheless.
So if one sits down with the goal of writing a piece of software, and one writes and writes -- as though writing some novel whose ending we have in mind but whose characters have not fully developed -- wouldn't it be nice to have help?
Yes, no, maybe. Help can be intrusive and can derail thoughts that we can't quite articulate yet. But what if that help is a little more streamlined to our needs? Everyone needs a little help sometimes.
When faced with a problem, we search the web, go through mailing lists, forums, sit around on IRC praying for a response.. maybe we even look at documentation. ;)
Some people have found great value in having a teammate next to them calmly following what one does, occasionally mentioning a dropped semicolon or offering a bit of advice. Having someone scour the net for a solution while one works on the next problem is certainly a life saver.
What if, as you sat there churning away at your problems, a solution honed to your problem was posited. No more scouring endlessly for vague references. No I'm not saying that there's going to be a "Google code snippets" or, heaven forbid, a "clippy".
But wouldn't it be nice if one could comment one's code and have a solution appear in the morning? What if instead of posting notes in a forum one could post notes within one's code? What if while working a block of code appeared out of thin air, solving the next logical step in a problem?
Wiki-stye open programming
We already have much value with collaboration. With various people in an project, they can all look at the same thing and commit changes. They review each other's work and can endlessly debate in a mailing list.
Open programming takes the idea of collaboration and opens it up in the same way that a wiki opens up writing.
Over a large document, multiple authors can collaborate. They discuss things on a simple talk page which evolves as their opinions and methods do. The main topic is collaborated on, and everyone's effort meets somewhere in the middle to form a good working topic.
Participants of a true wiki are unafraid of anonymous editing, and see value in those individually reviewed changes. Anyone who is interested can commit even the tiniest change.
So instead of the bureaucracy of founding a team with areas of interest, assigned tasks, team goals and such.. people who happen to be interested can make changes as they see fit when they see fit.
Imagine if programming did the same thing.
Open programming features
What would the wiki concept be like if it were applied to programming?
- Completely online
- A system of editing code online, with an easy way to check out a piece of code or the entire project.
- Easy linking
- Referencing other code is as easy as writing a wiki-link.
- Integrated discussion
- Bug tracking, discussion and voting are available right alongside the code.
- Revision tracking
- Every page has fine revision tracking, allowing complex differences to be generated on a per-portion, per-file or per-section basis.
- Smart checkouts
- Major and minor milestones are assigned so that checkouts can be for the bleeding-edge variant of certain pieces of code and a milestone for the rest of the code.
- Easy overview
- View changes per-person, per-portion of a file, per-file or per-section, also with statistics.
- Milestones and priorities are automatically generated based on flagging and activity.
- Anonymous editing
- Take advantage of even the smallest change by making it as easy as possible for anyone to contribute.
- Moderated and secured
- A complete control structure tracks all changes by all users and anonymous edits. A user and group permissions structure, a complete system of change rollbacks, user and IP (and range) warning, blocking and logging is available.
The wiki is a completely different mindset from regular writing. The reigns of control are still there and yet one doesn't feel the need to keep so tight a grip on them. One reviews those anonymous changes not just for security purposes, but because one is genuinely interested in the development of the topic they just contributed to.
The wiki mindset applied to programming alleviates the concern that a developer is writing a program just for themselves -- open source greatly aided this -- but now the developer is more interested in the open improvement of the software for itself.
I believe that the wiki mindset as applied to open writing is ripe for adaptation into programming and open source projects.