Are you an lvalue or an rvalue?
There are many different ways to describe the “lead or follow“ model. Compiler geeks (whom I used to publicly, and now secretly, aspire to join) might think of this in terms of lvalue and rvalue (setting the value, or reading the value). My favorite way of thinking about this dichotomy is with the dictionary, specifically the Oxford English Dictionary. The venerable OED. Pour a beer down me and I can rant on this for three bowls of pretzels.
The Dictionary
Should the dictionary lead or follow the language? I guess I'm somewhat elitist because I always thought that the dictionary would lead a language's speakers and listeners, writers and readers, to use the language in the one true and correct way. I used the dictionary as a tool to challenge my own common perceptions of language and use, and self-correct as necessary, in order to preserve order and strength and civility.
Boy, was I wrong. A few years ago, I was struck by a TV news story that some word or another had officially been added to the OED. The rationale offered by the talking head was that the word was in common use and thus needed to be captured and documented. That seemed reasonable enough, given that times and tides do change. After all, we certainly want our language to reflect the evolution of our civilization in the years since the OED started capturing these words.
The particular word in the news story, which I don't recall, struck me as a slang-like and even pop-culture-ish. I thought that within 3-4 years, the word would vanish from our common vernacular; it was transient and value-less, so why distract and confuse us humans by capturing it? For me, this tarnished the value I had placed in the OED and its role in the use of the English language.
The dictionary, as a tool for civilization, can be actively used to assure value to the currency of language. When a word is used, it's value needs to be agreed upon by both speaker and listener. The value of a word is its meaning, definition. If the speaker mis-uses the word, the listener fails to understand and the value has not been transferred. When a dictionary picks up a pop-culture or slang word, it is, in effect, giving people the power to create currency, the authority to print money. Yuck.
So here's the thought exercise for you, gentle reader: Should the OED lead or follow the language?
The Dress Code
The “lead or follow“ model can be applied everywhere! Gretchen and Zoe, rvalue'd by Heather, recently assessed their visibility by googling some of the idioms in their world. One of these was, essentially, “what to wear to a Microsoft interview.“ They even suggested deferring to me to answer the question of what to wear with khakis. Which got me thinking...
Is there a “dress code“ for business casual? Following the OED example, we might expect that there is, as a result of someone trying to follow and document it. I have seen books on the subject, along the lines of “Business Casual for Dummies“. There is certainly a de facto code that people follow, typically involving khakis and a polo-style short-sleeve knit shirt. There are subtle aberrations to this code, involving pleats on the pants or strange choices in shoes. If no one was ever fired for buying IBM (an old IT adage) then it's safe to assume that no one was ever fired for wearing khakis and a polo.
Please. I implore you. Define a dress code, don't look for one to follow. Abstract away from the implementation of khakis and a polo shirt, pick up the meta-attributes in that model, and use those to guide you:
- Clean: we hope that you don't stack gnawed chicken bones on your work clothes
- Pressed: shows a measured and moderate attention to appearance without disclosing your OCD
- Cared-for: you take care of your clothes as you take care of your other responsibilities, like, say, your job
- Purpose-consistent: whatever you wear, make sure it makes sense with the rest of what you're wearing; pass on the running shoes with your khakis
What kind of shirt do I think one should wear with khakis? Something suitable for going out and shopping for new and different pants! Please lead in the way you dress, and set an example. There is no rule book to follow, thankfully :-)
The API Reference
Let's bring this back to code. An API is like a word. It serves a purpose and does something specific, and in some cases has friends that it is often used with. We create a system of currency when we create an API. We need people to understand its purpose and use it correctly, so we document the API, its history, its scope, its applicability, its side-effects. We even use it in a sentence (code example) to show its typical use.
Here's your more important thought exercise: What if the API reference evolved over time, like the OED?
Would it be useful to know that GetUserName, in addition to returning the currently-logged-in user owning the process, has been used by some applications to formulate a path for per-user storage? More interesting is that another application might have abused the API and exploited a bug to also get the user's network domain. If the advapi32.dll author wanted to fix the bug, it might mean actually changing the meaning of the API for those that have used it. It's like a dictionary changing the definition of a word, or adding a new definition based on common usage. Can an API be re-purposed? Can the owner ever assert and enforce the original intent?
I don't have a clear opinion on this, I'm conflicted. Misery loves company, so if this problem makes sense to you, please embrace and extend.