I've realized this really just comes down to a misapplication of the original Atwood article. People applying it not recognizing how the nuances and abstract nature of programming make it a different case than cameras and graphics cards. I'm not saying Jeff was wrong. I'm saying the people that are taking an article written in the context of "superuser.com" with all hardware examples, are doing a disservice to stackoverflow.com by insisting programming components are the same thing.
This is a misapplication for a number of reasons:
There's nothing abstract in the camera example
If somebody asked "I need to capture a highly accurate image of a scene in a very low amount of time, would anybody balk if somebody said you need a need a "Kodak"? And before you say yeah, but that's a brand name, what if it's 1889? There's a time lag between when something goes from abstract to common concept. Just because we can take for granted that everybody knows what generalized component concept of "camera", does not mean we have the same thing in programming yet.
He asks a specific question about cameras. But in the case of programming libraries, we're either asking a general question, or we are asking a specific question with context.
For example, when somebody asks "What component can I use to dynamically create a PDF file?", they are really saying "How do I write a Excel document from this data I have?". The fact that they had the notion that the answer is likely an existing library and phrased it as "what component" does NOT make it a shopping question, but instead simply shows a very basic understanding of programming.
This misapplication is dated
In an age of EVERYTHING being modular in a NuGet or npm, "component" as universal as an "if" statement, even what would once have been considered "native" libraries.
**Rewriting "component" questions does not change the answers"
In Atwood's example of "which camera should I buy for low light photography", his rewrite of the question "which features should i look for for low light photography" will result in DIFFERENT answers.
However, in the case for programming components, if somebody says "How do I write data to an Excel file?", they are still likely to get the same references to components. So the guidance here should be to simply suggesting a rephrase of the question rather than closing it.
Asking what we should learn is EXTREMELY subjective, especially in programing
Jeff states: "Thus, when it comes to shopping questions, don’t ask us what you should buy — ask us what you need to learn to tell what you should buy"
I think this ok when a concept is well established. Cameras might be a good example. A question like ASP.NET vs. JSP is well established as dynamic web technologies. But what exactly is the conversion for most component questions? In the case of writing an Excel file, do I really need to learn the openXml standard? In the case of a reading a web response, do I really need to learn the whole TCP/IP protocol?
Dated answers are handled by the voting mechanism
Atwood states that specific answers are only valid for a year. This decidedly NOT true for many component answers. Even if it was, the voting mechanism will take care of that for us, buy letting old answers sink over time.
Follow up questions don't really apply
Jeff gives the following questions that would need to be asked in a true shopping question, but I can answer them all right now for all component questions. As further evidence, I challenge anybody to find any of these questions in the comments on ANY question on Stack Overflow:
What is your budget?
First off, have you really worked with so many of these components that you can give me multiple answers? In any case, I'll take the cheapest one.
Where do you live?
What are your preferences?
Which alternatives will you consider?
When do you want to buy?
Yesterday, I'm already behind deadline.
My original answer:
My discussion on this was closed (Too many closed questions) referring me here to this question.
This is not an answer, but further support for the asker:
It would seem that if there is even the possibility of the question being subjective, it is closed. These days there must be a dozen ways to code something, yet those questions are allowed to stand. Yet the instant somebody asks a "what is a library that will do 'X' it is closed. The irony is that these questions, even in their closed and decaying state, are often the most valuable to me. Sometimes I'll test three or four third party components before I commit to one. This is a time consuming process that I would gladly augment with the vote-validated answers that others might have.
I'll concede that the last one is too general but I left it on there because even if it was free control that does 'X' it still would have been closed.
If these questions cannot be asked on Stack Overflow proper, which subsite should be considered (keeping in mind that the other sides hardly get anywhere close to the SERP rankings that Stack Overflow gets).
Does the asker need to explicitly ask the "subjective" guidance questions to avoid getting closed?:
- Please explain “why” and “how”
- Please elaborate
- Please only share items that you have personal experience with.
- Please post any data you have relating to your experience
Isn't that a mess? Shouldn't we be able to rely on the answerers to follow the guidelines instead and if they violate them make effective use of the down vote button beyond simply being wrong? Why does all the burdon fall on the asker when it's the answerers that should know the rules and how they can best serve the asker without turning them away?
Are these questions even subjective? It is a fact if a component meets a need. "Best" is subjective, but isn't that inherent anyway? Is anybody going to list the item they've already discarded for themselves? Are we really going to let a single adjective decide a questions fate? Isn't this easily cleaned up with comments?
I understand we're trying to avoid the wild west of a forum, but we're not debating politics here. Many of these questions could be answered with "here's what I did and here's why". We could restrict answers to things that are pulled directly from the examples on MSDN, but why exactly do we want to do that?
What is the guiding principle here? If we want to help programmers save time and create better software, then things that stop them from getting to page 17 on Bing should be included.
For those that chose to dismiss my examples as "shopping" questions please explain the difference between asking "How do I create an excel file from .net" (which there are dozens of un-closed examples of and "What is the best component for creating an excel file". Doesn't one question simply acknowledge that the best candidate for an answer is likely going to be a component?
If there is no place for subjectivity on Stack Overflow, what is the point of the voting mechanism?