14
\$\begingroup\$

So I just stumbled upon the tag and I ask myself if this is really a helpful tag. Most of the code on Code Review does reinvent the wheel in one way or another, there is nearly always a library out there which does that thing already, and maybe better.

Given that new users will barely know about this tag and the tag, according to it's wiki, is only used as a "don't suggest libraries" marker, I'd like to suggest another approach:

  • Code on CR should be reviewed, even if we know that there's a library which already does that.
  • Pointing out said library is supposed to be a comment or part of an answer reviewing the code.
  • Answers only pointing to a library need to be elaborate on how it will fit this use case and how the library is to be used in that case.

Ideally a question should have multiple answers anyway, showing different point of views, and "use a library" should be part of it.

What I've seen so far is that if an asker knows there's a library function to do that, there's normally a paragraph included about why the function has been rewritten (does not meet my use-case completely, only training, etc.), which does tell us much more than that tag.

So...is this tag really helpful?

\$\endgroup\$
  • \$\begingroup\$ Out of interest, if this question was prompted by Find a path through a maze then I agree that tag is not appropriate, and I edited it off the question. \$\endgroup\$ – rolfl Feb 7 '14 at 13:38
  • \$\begingroup\$ @rolfl: Yes, that's the question that made me find the tag...but it's about the tag in general. \$\endgroup\$ – Bobby Feb 7 '14 at 13:38
  • \$\begingroup\$ Back when I created this tag, my idea was a way to specify: "yes, I know that I could just call .sort(), but I'm intentionally writing my own sort function" \$\endgroup\$ – Winston Ewert Feb 14 '14 at 3:09
  • \$\begingroup\$ @WinstonEwert: Don't get me wrong, but to "...my idea was a way to specify..." the obvious answer would be "well, use words", like you just did. Intention should also be part of the question. \$\endgroup\$ – Bobby Feb 14 '14 at 8:14
  • \$\begingroup\$ @Bobby, on that line of argument you should burninate all the tags because you could just describe what they mean in words in your question anyways. \$\endgroup\$ – Winston Ewert Feb 17 '14 at 23:29
  • \$\begingroup\$ @WinstonEwert: Touché. \$\endgroup\$ – Bobby Feb 18 '14 at 8:10
22
\$\begingroup\$

Yes, the tag is helpful. I consider it to be useful in the same way is useful.

is for when:

  • you are specifically trying to mimic some system/behaviour
  • you know that there are libraries, language features, etc. that do what you need.
  • you are doing it for academic reasons... to learn, not to profit.
  • there is no expectation that this will be 'production' code.

It means that:

  • offering alternative implementations for the process is not constructive.
  • the desire is to reproduce specific functionality, and that is an indication of the specification for the task.
  • there is no 'goal' for the code, it is not trying to solve a specific problem, so there is no 'big picture' problem
  • it means that the reviewer should approach things from a slightly different perspective... you are not finding a better way to do things, you are educating the asker as to how they are, or are not meeting the implementation they are trying to reinvent.
\$\endgroup\$
  • \$\begingroup\$ For what's worth, I also do not consider the tag [beginner] good, so maybe we have to disagree on that. \$\endgroup\$ – Bobby Feb 7 '14 at 13:31
  • 2
    \$\begingroup\$ I think your points 1 and 2 should, at least, also be in the question itself. The points 3 and 4 should not matter at all to us, we should hold code to the high standards we hold our own code against. It doesn't matter if the code is only an exercise, if it's bad we should point that out. \$\endgroup\$ – Bobby Feb 7 '14 at 13:34
  • \$\begingroup\$ Point 5, given that Stack Exchange always was supposed to be a knowledge base, shouldn't we always point out possibilities to do something different? And if it is only to make the question "more complete" when viewed from the outside? Point 6 should also be in the question itself, in my opinion. I don't get Point 7, but Point 8 is what I tried to express with the different view points. A question that only has one answer pointing towards a library is a bad thing here, code needs to be reviewed, even if it is thrown out at the end. \$\endgroup\$ – Bobby Feb 7 '14 at 13:37
  • 4
    \$\begingroup\$ @Bobby: Re the beginner tag, it's very useful to have some idea of the OP's level of expertise, otherwise you run the risk of pitching the answer at the wrong level. See this question and its answers. (I do think that it's probably better for the OP to describe their expertise in the question, but if the beginner tag is all we get, that's a lot better than nothing.) \$\endgroup\$ – Gareth Rees Feb 7 '14 at 14:11
  • \$\begingroup\$ @GarethRees: Here's an old Meta.SO topic about it. I'm not saying it applies to here, but it's a fine discussion to read. \$\endgroup\$ – Bobby Feb 7 '14 at 14:41
  • 2
    \$\begingroup\$ @Bobby: My answer that I linked to above explains why Code Review is different from Stack Overflow in this respect. \$\endgroup\$ – Gareth Rees Feb 7 '14 at 14:50
  • 1
    \$\begingroup\$ I think the tag can be helpful, but I think that the most important aspect of the helpfulness of it is: Do people use it as intended? \$\endgroup\$ – Simon Forsberg Feb 7 '14 at 23:33
  • \$\begingroup\$ Moderators can do their best to ensure it's used as intended. On SO, I remove the [xcode] tag from posts about 10 times per day. My question would be whether or not this tag is applicable when rolfl's point 1 applies but point 2 does not. \$\endgroup\$ – nhgrif Feb 8 '14 at 18:38
3
\$\begingroup\$

I have to bring up this question again, because I really don't think it is that helpful.

Why is it not helpful?

Because it isn't being used that much!

A search for questions with the words "linked list" and without this tag gave a whooping 356 results. Compared to only 3 results that are actually using the tag.

I think that it is a lot more helpful to explicitly say in your question that "I am aware that library XYZ can do this" or that you "Are trying to learn and wanted to make an implementation of XYZ", than tagging a post .

even if the tag is used on the question, it is still more helpful to write it explicitly in your question.

Therefore I say:

NO, this tag is not helpful!

\$\endgroup\$
  • 5
    \$\begingroup\$ You're arguing that it's not used; not that it's not helpful. Seatbelts in cars would be helpful even if few people used them. \$\endgroup\$ – ChrisW Mar 6 '14 at 0:49
3
\$\begingroup\$

I made this comment several months ago:

Moderators can do their best to ensure it's used as intended. On SO, I remove the tag from posts about 10 times per day. My question would be whether or not this tag is applicable when rolfl's point 1 applies but point 2 does not.

The two points I'm referencing here are these:

  1. you are specifically trying to mimic some system/behaviour
  2. you know that there are libraries, language features, etc. that do what you need.

I think the 3rd and 4th points in rolfl's answer are always irrelevant. I think that point 2 might be irrelevant also. If is going to stay, what's wrong with using it when trying to implement something that already exists, but there's not an available way of implementing it (to your knowledge) without writing the code from scratch?

For example, take the alerts that pop up on an iPhone. Let's say you want to be able to specify the location and background color of the alert (two things I don't think can be done with the UIAlertView class which produces the standard looking alerts). You've written some code to produce your own custom alert which acts exactly like the default iOS alerts... it just looks different. Does this count as ? It certainly falls under point 1... but it doesn't necessarily fall under point 2, because for argument's sake, there's not a library on github that does this to my knowledge. Perhaps I'm trying to develop the first open-source library that lets me do this.


Now, independent of that question, let's look at a case where points 1 and 2 actually both apply. It just so happens that on github I've written a library for connecting Objective-C applications to MS SQL Server. I also know that there is at least one other library out there on github that existed before mine.

The idea of the tag seems to be "Hey, don't post an answer linking me to another library!"

In this specific case, I am beyond confident that my library is better in every aspect than the already existing library. Should I be obligated to tag my question with to prevent answers which link me to the inferior library?

The problem with answers that say "Hey, someone already did this for you!" is that they tend to not actually review the posted code, and they tend to make no effort to demonstrate why the library they link to is actually better than the posted code.


These points are made mostly for discussion, but particularly in light of my last point, I feel that should be burninated, and questions that do no more than link to an existing library and say "You should just use this instead" (without explaining why that library is better than the code asking to be reviewed) should be deleted as non-answers.

\$\endgroup\$
  • \$\begingroup\$ I think points 3 and 4 are the most important. If the purpose of the code is to learn, and is not for production use, then use reinventing the wheel. If the code is not for learning, or it is for 'real' use, then the purpose can only be because you believe your code is the only code available, or it is in some way better than what is out there already, in which case, you are not reinventing the wheel \$\endgroup\$ – rolfl Jul 25 '14 at 23:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .