I think we need it, to separate strictly programming questions from those about FrontEnd, Mathematica set up and administration, etc (of course, I must disclose that I am an interested party for this tag :)). Saying that we don't need it is like saying that we can't define what Mathematica programming is.
That said, I can see why it disturbs you, because we currently don't have more specific guidelines as to which questions are appropriate to tag as programming . I would think, that the main reason for this is that this tag is often more appropriate to be used after the question received one or several answers, because it is not always clear a priori that answering a given question would involve non-trivial programming challenges.
So, my suggestion is to tag a question as programming question in case if best / representative answers to that question involved non-trivial programming efforts. Such questions do not necessarily have to be restricted to those whose formulation implies their strictly programming nature. For example, some questions on visualizations often receive answers which have beautiful and interesting code. Also, for some questions which look like programming questions but end up being answered by, e.g., a straight-forward call to a built-in function, the programming tag could perhaps be removed after the fact.
To summarize the main idea of this answer, I believe that there are useful tags which however often can be properly assigned to the question only after it has received good answers, and I think that programming tags belongs to this category. This implies a somewhat more complex tagging procedure, where the tags are reviewed after the question has been satisfactorily answered, but it looks like for many questions this is happening already anyway. Let's keep in mind that the purpose of tags is to simplify and improve search, and it is not required that we always use all proper tags ahead of time.
While @Istvan correctly criticized my description as subjective, I will try to make a shorter summary. I think that the question can be tagged as programming question, if it's code and code of representative answers contain any of the following:
- Large (more than, say, 20 lines, and often several functions) amount of Mathematica code, which serves its purpose, in the sense that it can not be easily reduced to fewer lines without missing some of the defining properties of the solution (e.g. efficiency or generality)
- Implementation of reasonably generic new functionality, which can be used in (many) more situations than the current problem.
- Implementation of interesting algorithms and / or data structures
- Good example of program design, where by splitting a problem into right sub-problems and using appropriate tools to "glue" it together, an extensible and modular design is achieved.
- Interesting new abstractions or instructive use of some known abstractions (e.g. linked lists, OO-style, strong types, etc, etc)
- Interesting and possibly novel uses of language constructs. In particular, using certain combinations of them to achieve things which are not easy to achieve by other means.
As already mentioned, this is still a subjective description. However, I still think that such categorization is possible. To put it short, any nice piece of code which achieves something not easily obtained by gluing a few built-in functions together and adds to one's "personal library of good programming examples" should qualify. Another possible definition: anything which can not be obtained by pure "plug and play" experimentation performed by an average beginner or intermediate-level user who happens to have read all Mathematica help, tried / understood all examples and has a photographic memory. :)