99% of programmers are law-abiding citizens...
When dispensing advice, people often pluck the proportion “99%” out of the air as a way of saying “overwhelmingly likely.” As in:
- 99% of the web applications out there should use an RDBMS as their back end store, not some roll-your-own persistence mechanism, or;
- Iteration works just fine for 99% of the things you do with collections, or;
- 99% of businesses should run on lock-in, proprietary operating systems and platforms.
Now 99% is obviously a junk number, just like 199/200
. But let’s hand wave and say that it’s close enough to the truth. What does that mean?
For example, if you’re deciding how to build persistence into a web application, what does “99%” tell us about using an RDBMS? I’d say, not very much. For starters, if you build seventy web application in your entire career, there’s a fifty-fifty chance one of them should have used something other than an RDBMS.
That tells me that you can’t discard other options and just say that “every web application should use an RDBMS.” 99% is a lot of them, but not so many that we can afford to ignore the 1%.
If we were buying one hundred stocks, we would do very well if ninety-nine of them make money and one loses… unless the one loser loses us more money than the other ninety-nine make for us. When it comes to technology choices, we don’t just make a single wild bet (“every application will have an RDBMS”). We have the option of investigating the application and our options before making a choice.
So when I read a SWAG like “iteration works just fine for 99% of the things you do with collections,” I make a mental note to look for the 1% of the cases where iteration doesn’t work.
They may be few and far between, but they’ll pop up enough to make knowing how to use map, reduce, and recursion worthwhile.
That being said, “99% of businesses should run on lock-in, proprietary operating systems and platforms” is a very interesting case. There’s really very little cost in learning how to roll your own persistence for the cases where an RDBMS is not the right choice (even if you need transactional semantics
). And it is surprisingly easy to use map, reduce, and recursion… it turns out to be easier than iteration, not harder
But learning entire platforms is
an expensive proposition. It may make sense to focus on one platform where you can accumulate high expertise. After all, a programming language takes ten years
to master, can an entire OS and its ecosystem be any easier? And even if it is possible to learn a new platform on the fly, employers may prefer to hire for experience rather than pay you to learn
That doesn’t tell me that you should go with the 99% solution. The 1% of companies out there that are best served with other technologies still need to hire employees, engage suppliers, and purchase software that runs on their systems. Game theory tells us that the optimum strategy for a worker, contractor, or supplier is to roll a one hundred sided die and pick the 1% platform if they roll a “one.”
What I find really interesting is that the marketplace is highly inefficient. Given one platform having 99% share, far more than 99% of the people will choose to “specialize” in the 99% solution, creating a commodity marketplace. The very few that serve the 1% of the market enjoy disproportionally higher salaries and profits.
For this reason, when I read that 99% of the web applications should use an RDBMS, I am very interested in the 1% that shouldn’t… and figuring out how I can manoeuvre myself into a position to build one. And the news that one company has a near-monopolistic lock on the business operating system business? I consider this an opportunity for those of us comfortable with the alternatives.
So the next time you hear the magic words, “99% of…”, I encourage you to do as I do: start asking questions about the other one percent.