This question really becomes can I ask a software developer in Argentina or a software developer in Zimbabwe for a component in a standard way?
Something that acts like I am thinking is how in the construction industry there are industry-specific classification codes, the Construction Specifications Institute's Master Format (CSI). This standard classification of work product codes allows me to ask both construction firms in Argentina and Zimbabwe for Fire Protection Piping according to the 16 divisions of the construction industry coding system. The code for this piping category is 15300.
Can I do that in software? Is there some listing of abstractions and implementations or a mix of the two that we can use to communicate at a higher level? One thing that comes to mind is that I can ask for and HTTP server. A common abstraction that we use frequently to get things done yet is also not implementation specific. Is there a universal address or catalogue in which an HTTP server has a name and a reference number?
Sure, all software is different and needs to be customized to the needs of the user. However, I can ask for a login screen and everyone knows what I am talking about. Has there been any successful or unsuccessful attempts in our industry to take the common components, like the login screen, server hardware, CPUs, network devices, electrical wiring, communication protocols, even different types of programming libraries, and to assign categories and numbers to these things? And, is there a system in wide enough use to enable people from across the world to ask for things in a standard way?EDIT 1
After CandiedOrange and mmathis commented on this question I realized I need to further qualify my inquiry. It looks as though any system I would find would have items on a sliding scale of abstraction and implementation. The categories would likely be more abstract and the individual line items in each category would approach greater and greater implementation specificity and less abstraction. If the line items get too specific then as CandiedOrange pointed out it would end up being code.
So it seems as though this classification index would necessarily be more abstract than the code it classifies, so it would never be exact. It would always be a rough categorization. Just like saying something is an HTTP server does not completely describe Apache Tomcat yet Tomcat could legitimately be listed as an HTTP server.
As such what I am looking for is not like the IDC Software Taxonomy suggested by Christophe because that is a listing of software markets, not software component abstractions. The IDC Software taxonomy is a description layer that could be further qualified by describing the component abstractions used in each market, yet it is not a listing of software component abstractions.
I imagine that the listing of software component abstractions would likely be somewhat market specific but would largely be market agnostic since a component can be used in multiple markets for many different reasons.
Is there a classification system from which I can ask for a particular login screen by saying "Give me a 29305-compliant login screen system, and by the way, here is my color scheme. Make it look good and make sure it works," where the number 29305 refers to a specific kind of authentication system, for example, the password grant flow of an OAuth2 system using JSON Web Tokens?
The reason I look for such a system is to have a less lossy communication protocol between those asking for software and those creating software. It seems that if we had an IT industry component classification system we could communicate much faster and reduce cost of communication as well as the error rate while increasing quality.
The closest I have come is the WAND IT Taxonomy. The downside with the WAND taxonomy is it has no addressing scheme and is not public; you have to pay to even see it. Here is a high-level view from their site:
I consider the WAND taxonomy a partial answer to my question.
- Encodes category names with numerical or alphanumerical sequences or in a consistent, context-specific manner. Though CSI uses strictly numbers in the 16-divisions I have no problem with alphanumeric codes. The category encoding ends up being a character data type anyway because of leading zeroes, dots, and dashes, like the Dewey Decimal System.
- Comprehensive or at least makes an acceptable effort at being comprehensive in our industry.
- Recognized by a generally accepted standards body as appropriately descriptive or authoritative for the subjects covered in the classification system.
- In use by many businesses today.
When I find a satisfactory answer I will update this question.
Response to mmathis's answer and commentsOverall response
The things you said represent where I started from when first thinking about this question. I am still looking for an answer because I haven't yet found a useful solution to the knowledge management question I have.
It seems as though we can conclude that a taxonomy of implementation-specific items would be nearly useless because it would (1) become obsolete on first writing and (2) be nearly impossible to make without specifying the resulting code.
I believe I should have better qualified my question and motivation. It looks like I led you to believe that I am looking for a way to ask for a specific kind of button or a specific kind of login screen. Rather than the specifics I am looking for a system, a taxonomy of sorts, of expert communication that facilitates communicating with abstractions, not specific implementations.
For example, when you say,
So, while it's good to know that your application will at some point authenticate users, trying to say that it will be done via a code-29356 login screen is meaningless
I am not thinking the taxonomy would say a code-29356 login screen and then have the meaning of that screen be implementation specific such as a box this many pixels wide or with a red color. I am thinking the code-29356 login screen would be a definition of an abstraction which contains two inner abstractions of a username control and a password control.
There are some generally understood components, like a login screen or settings page, but they are not useful beyond a high-level description of the application - not nearly detailed enough to start building or ensure compliance upon delivery to the customer.
One of the ways I am thinking such a component taxonomy would be useful would be in knowledge management even at one company. If I as the first engineer at a consulting company develop an authentication system I should somehow file that authentication system in some reference manual somewhere so I can get back to it and train the next guy. Ideally I would have documentation at least on the research I did and sources I used to help me make the auth system. Sure things change, though I make the claim that not everything starts from scratch.
It seems like it would be much faster for a new programmer or a programmer new to a project to learn what is built in the system if there was some sort of mind map of commonly components that described the system. This would apply to networking and hardware
We don't classify login screens or buttons based on codes, but we do classify Oracle databases, and SQL databases, and third-party libraries, and encryption algorithms, and more.
Yes, we classify these things. We have version numbers yet we are missing the high-level, easy to browse list of abstractions under which to categorize these things.