Monday, September 10, 2007

Standards documentation is annoying...

Don't get me wrong, having Standards is a great idea. Being able to clearly communicate how something works is essential to daily life. If we, for instance, did not have the HTTP RFC Standards, you probably wouldn't be able to read this blog entry because every single web server would deploy their own idea of what a website is and there would be no single web browser to handle every single web server. (Or if there was, it would be a couple hundred gigabytes).

No. What irks me is the fact that very few Standards authors actually sit down and write binary data examples. That is, "Here is some sample data" and "here is how to read the sample data" and "here is some basic source code that reads and processes the data". While Standards should be about specification, of which they do a great job already, they should also be able to present an implementation or at least an example that could actually happen.

This is where Standards bodies and a community dedicated to each Standard should meet online to perform the latter. The actual Standard is supposed to be "set in stone" sort of documentation that changes very infrequently (if ever). What I propose to all Standards bodies everywhere is that the published Standard be closely associated with an online Wiki AND an official online forum. Dedicated community and Standards body members can then provide the essential examples and implementation that a Standard does not contain.

A perfect example of this is the C++ Standard. Some time back, some people came up with what I call the STL. Also known as the Standard Template Library, which, at the time, was not part of the Standard itself but was quite popular for providing additional functionality that avoided reinventing the wheel by using C++ templates. The ANSI C++ Standard committee adopted most of the STL into the C++ Standard. I still call this the worst idea they have had to date because the Standards body is defining implementation where they shouldn't be. The reason I think this way is because you cannot extend any of the existing templates (e.g. edit them) without violating the Standard. Because STL was no longer valid for new stuff, another really popular project called Boost has been made. What happens when the ANSI C++ Standards body decides to integrate Boost into the Standard?

The Standard should merely define what it means to be a template...not demand certain templates be included with every compiler. The STL should have been adopted into a Wiki and a related project. That way, it could have gained certain bits of functionality I consider essential. Take a look for a moment around the industry: C#, Java, PHP, Ruby, etc. are all gaining popularity and I say it is because they are not being hindered by Standards. Integrating STL into ANSI C++ was a horrible idea. Instead, the Standards body should have said "Hey, we really like this, let's point it out in the Standard as 'officially recognized' and dump it on our Wiki so the community can continue to develop it." Boost would have never existed.

The other thing I've noticed about ANSI C/C++ is that it continues to be geared for a line printer. This is 2007, not 1970. We have what is called the Graphical User Interface (GUI). You know? Mouse that points at and click buttons and hyperlinks and images and stuff? The ANSI C++ Standard and modern computing are at direct odds with each other. Because there is no central location for building on the ANSI C++ Standard such things like GUI stuff, threads, sockets, database access (!), etc. C++ has fallen by the wayside because to do anything you have to re-invent the wheel. Need socket code? Sorry. You'll have to go write that again despite already having been written thousands of times over and over.

As a result, people see other languages as being "easier to use" simply because those languages provide modern technology more easily. Sure C++ can do it, but you've got to lay the groundwork down before using it (even importing an existing library can be challenging). If another language already has the groundwork code written and included by default, then C++ becomes inferior.

Honestly, I'm not really sure what I'm looking for. Maybe I'm asking for two different things. That happened before when I wrote VerifyMyPC 1.0. I didn't really know what I wanted from the tool. It took a lot of feedback and self-analysis to finally figure out what I wanted and what other people wanted as well. I guess what I want is a Wiki for collaboration to create examples that people can use to understand Standards. However, I also want Standards to be separate from implementations and yet, at the same time, not distance themselves from the real world such that they obsolete themselves. I'm not really sure how to address the latter problem, but it is one that causes languages to become obsolete.

I don't ask for much, do I. :)

No comments:

Post a Comment