No - these tags should go!
I have been struggling to describe why I think these tags are bad. There are a number of arguments for, and against these tags. First though, some assumptions I have made (which may not be right)
Assume we are focusing on language-specific implementations of common computer science concepts.
For example, strings are common to all languages. In Java, a class called
java.lang.String is often used, though there are alternatives like
StringBuffer, etc. C# has
String). I cannot think of an object-oriented language that does not have a
String class, and many (all) of the procedural languages I know also have a string-like data type. Interestingly, C is lacking a String concept, but it has the null-terminated
char array which is a close proxy.
For the purpose of this meta question, the Objective-C
NSString class is an implementation of the common
String computer science concept.
Assume that "A tag is a word or phrase that describes the topic of the question. Tags are a means of connecting experts with questions they will be able to answer by sorting questions into specific, well-defined categories." (taken from the tag help page).
An 'expert' in a language-specific implementation of a concept is also an 'expert' in the base language. i.e. an Expert in
NSString class is also an expert in Objective-C
Users of Code Review follow tags they are interested in, and do not follow tags they are not interested in.
All questions on Code Review have a language tag (c, java, etc.).
There is also the title and content of the question which can be used to attract interest in your question.
Right, so, how should people use tags?
Tags should be used to broaden the scope of people who will find it interesting, not narrow it. The base language tag is required, additional tags should be used to extend the interest group beyond the base language.
Tags that are language-specific implementations of general concepts narrow the scope of the language tag, not broaden it. Tags like nsstring or nsarray reduce the scope of objective-c whereas tags like strings and arrays extend the scope of the question beyond objective-c
Given this background, what are the benefits/drawbacks of these language-specific implementation tags?
Arguments for these tags:
- Stack Overflow has them
- People can get the Taxonomist badge
- Can use tags to sub-classify problems
Arguments against these tags:
Code Review is a small site, so there is no need to sub-classify questions.
You can sub-classify the language tag by searching on both the language tag and the concept tag. You can search on
[objective-c] [array] instead .
It sets the precedent that all languages can have a tag for each base class... if we have nsstring we should also have nsobject, and uiresponder and uiview and uicontrol and uibutton, and ..... which are all just for Objective-C.
Then, for Java's Swing, we should have object, component, container, jcomponent, abstractbutton, jbutton. For AWT there will be different tags. For JavaFX it will be different too.
For C# we should have a whole different set of tags just to represent a Button, etc.
Then there's different buttons in QT, like qpushbutton, and other C++-based UIs like TK.
The value of tags is reduced when the volume of tags increases. 'Experts' will have to follow too many tags to follow their topics of expertise. Language specific tags dilute the value of the tags.
For odd instances where your code actually is all about implementing or centers on something that is tightly coupled with a native implementation of a native class, then that is what the question title is for. For example: Implementing a thread-safe NSString would be tagged objective-c - strings - array - thread-safety
This is not related to just Objective-C. This is related to all languages. Should each language get its own tag for general computer science concepts that are implemented in that language?
No. An array is an array, whether it's in Java, bash, C, Swift, Python, or BASIC. A button is a concept, and a button is a button whether it is Java, C++, or anything else.
Tags representing language-specific implementations of general computing concepts should be removed, and replaced with tags that reference the general concept, and the language-tag should be confirmed as well.