TL;DR: I have categorized ~140 tags. I believe some categories should be used more and some categories should be used less. Goal is to make it possible to use tags to find related questions, as well as providing objective tagging criteria for these categories, rather than "my question is about tag". I also believe making tagging more objective will lead to making titles easier.
What tags should I stick on my question?
It sounds like a simple question but right now it seems like anything related goes.
I have a theory that tags belong to specific domains. And within these domains there could be hierarchy... so I went through the tag pages and categorized them. Bear with the tag wall with me here. Tags sorted in order of domain, then in order of usages. If a tag is categorized wrongly, please try to discuss it in chat, for I fear I will make many mistakes and we'd lose the focus I am trying to obtain in the discussion about which tag goes where.
Tag pages referenced: The first four + the enum tag. That is, every tag that has 73 usages or more. It's possible I have missed some lesser used tags that would fill categories on their own...
Tag domains
- Language used. javac#javascriptpythonc++phpcrubyhtmlsql.nethaskellcssruby-on-railsobjective-casp.netscalabashvb.netvbaf#perllispschemeclojurecoffeescriptgo
- Interface used. consolewinforms
- Programming paradigms used. oopdesign-patternsmultithreadingunit-testingmvcfunctional-programming
- Programming constructs/features used/implemented, which question is about whether it's properly used. stringsarraydata-structuresloopclassesrecursiondatetimetreeregexlinked-listmemory-managementconditionsfunctionsasynchronousfile-systemgenericsinheritancequeuestackdependancy-injectioncollectionsdictionarysingletonintegertimerpointersinterfaceenum
- External resource/format/protocols used. databasejsonimagexmlfilecsvhttpexcelemailsocketurl
- Problem with code to be solved. optimizationperformancealgorithmsecuritythread-safetyconcurrencytime-limit-exceeded
- Task code does. programming-challengeparsingsortingprimesvalidationconvertingmathematicsgrapherror-handlingioexception-handlingtemplatesearchcombinatoricsformattingauthenticationevent-handlinganimationnetworkingplaying-cardscachebitwiseproject-eulersimulationlogging
- Thing code will be when done. gameapiformlibraryplugin
- Type of question. interview-questionscomparative-review
- Details of Asker. beginnerhomeworkreinventing-the-wheel
And lastly...
- Tags I don't know to place.
random (seems used for both use of rng and implementation of rng)
matrix (eh... if your code makes use of...?)
entity-framework (sounds like a library, but it's ORM. Where's the orm tag?)
cryptography (Again, something code makes use of, but doesn't implement) - Tags I have placed, but am not sure of.
.net (Language used, but it's not a language in and of itself).
classes (that a paradigm or a construct?)
ruby-on-rails (I made it a language, but maybe it's just a library?)
linq (I probably did everyone a disservice by saying it's a library)
So, now that we've classified the tags, let me ask you...
Which tags do you want to see on a question?
I want a language tag. And a language version tag too, if applicable. If you use a library, I don't really care, unless your question is about the proper use of that library. System targeted is something I don't really see as important... but maybe I screwed up on that category.
Then, when I know what language your code is, I wanna know two more things: First, what your code DOES, and what your problem is.
And that's something I'm missing here.
We have tons of tags for programming constructs such as strings and loops and functions and integers... but I'm not seeing any tags for things like "cleaning up my duplication", "improving my naming"... "making my public interface more usable"... We have very little "problem" tags. Maybe that's what the title of the question should be, though. Although... we tried that, and it leads to "Please improve my badly-xxx-ed code" titles. Not sure if that's what you want.
So let's talk about each domain.
Language Used
I NEED this on a question. No language, no review.
Language Version
This helps a lot. A strange thing happens here though - questions tagged python3 are obviously also python questions, right? So... do we even need the raw language tag, then?
Library / Language specific feature
I believe these should only be included when your code relies HEAVILY on them.
System Targeted
Helpful when you use system specific features. Otherwise, there's probably better tags you could apply.
Interface used
Erm, this is relevant how?
Programming Paradigms used
This has major overlap with Programming constructs/features. I dunno. I guess you should only include them if you have a question about them - else we could stick oop on a LOT of java questions.
Programming constructs used
This one, same thing applies; only tag if your question is about proper use of or you implement that thing. Else we could start tagging each question with classesfunctionsloopstrings.
External formats used
This one seems really important when combined with a "task code does" tag. javaparsingcsvperformance tells you a LOT about what the question is gonna be like.
Problem with the code to be solved
When you have a specific concern, tag it. Answers are likely to address that concern, so if I wanted to learn about detecting security flaws, I could browse through a combination of problem-tag and language-tag and learn interesting things.
Task code does.
This is helpful to understand the code. It's also a natural way of categorizing and I like it. It can define the problem domain and with it, the range of input, output and processing that may have to occur. I want to see more of these tags. How helpful they'll be I don't know... but they seem like a natural category.
Thing code will be when done.
This seems irrelevant. So it's a library, a plugin, a widget, a thingmabob, a application, a software-as-a-service thing... does that really matter? game and form seem to have some merit though, but maybe that's because they tell you what the code does.
Type of question
Yeeeeah. I dunno what to say about these. Do we need them? They seem really meta. Trigger words like "meta-tags" aside, I'm just not sure if the type of a question is something that you want to search on.
Details of asker
To me, these tasks don't make any sense, after a little thought. beginner, homework, reinventing-the-wheel... They actively seek to inhibit the responses provided to the question. Personally, I feel these should be replaced with one single tag: learning-exercise - for when you wrote the code to learn, rather than to accomplish a task or build a product. This allows us to review actual replacements of system classes too - things like high-performance libraries. There the answer to "why did you build a linked list, they already exist" is "because they're too slow, and I can do better".
Rant about those 3 tags aside, with a learning-exercise we just migrated it from a "don't be harsh" to a "code-purpose" tag. It's not supposed to do things, it's supposed to teach you things.
Back to the question;
What tags should I stick on my question?
It is my opinion that a question should have at least...
- A language tag
- If applicable, a language version tag
- A task code does tag
And should have, if applicable
- A problem tag
- A library tag
- Format tag
And then if you still have space left, you can add extra tags.
Why?
Because I feel that right now, tagging isn't clear yet, but more importantly, I feel there should be more focus on using existing questions to learn.