CodeProject is an excellent resource for professional and hobbyist developers alike and has created a large and thriving on-line community to meet and exchange ideas. Just like a real community there are certain publicly stated rules[^] (generally called Terms of Service) that should be followed by the community and, because CodeProject is an on-line or virtual community, certain policies[^] that CodeProject follows to ensure the privacy and safety of the community. In addition to these stated rules and policies, any community, whether it be virtual or physical, also develops a certain set of socially accepted rules or customs called mores[^], folkways[^] and taboos[^].
To provide some quick definitions:
Folkways are the patterns of conventional behavior in a society, norms[^] that apply to everyday matters.
A taboo is a strong social prohibition (or ban) against words, objects, actions, or discussions that are considered undesirable or offensive by a group, culture, society, or community. Breaking a taboo is usually considered objectionable or abhorrent.
Types of Discussion Forum
One of the more social aspects of the CodeProject are the discussion forums. There are two types of discussion forums available:
- Article specific
- Community wide
The article specific discussion forums are available at the bottom of each article and should be used to contact the article's author or post questions, comments, or other feedback directly related to the article.
The community wide forums are available directly from the CodeProject home page, using the "Message Boards" navigation link[^]. These discussion forums are broken down by category and then organized by more specific topics in each category. Currently the categories are:
- General Discussion
- General Programming
- Database and System Administration
- Graphics and Design
These forums are not intended to be used to communicate with an author about a specific article. Instead, they are provided for the community to ask specific questions, exchange ideas, provide suggestions that will benefit the community, or generally rant about something and there are specific forums for each of these activities.
In order to keep the forums useful, the CodeProject community has developed a set of folkways, mores, and taboos that could generally be called forum etiquette[^]. Most of the forums have a "How to get an answer to your question" post[^] that always appears on the first page of the forum. Pete O'Hanlon also has an excellent article[^] providing some posting guidelines.
This article is similar to the one Pete wrote, but combines some of the information from the "How to..." posts, Pete's article, some other resources, and my own experiences in the forums.
Deciding When to Write a Forum Post
Before you actually start writing a forum post, there are a few things that you should do instead. These few simple actions will help keep the forums from becoming cluttered with the same questions over and over again and will also help you get a useful answer.
- Search the internet (Google, Live Search, Yahoo! search, or your own favorite search engine)
- Search CodeProject, both articles and forums
- Try to solve the problem yourself first
- If it's a homework assignment, don't post.
The first two are critical to ensuring that the forums don't become cluttered and that you get a useful answer. There are a lot of people here that have been answering questions for many years and programming even longer. For those individuals it is usually very obvious when someone hasn't first attempted to see if the question has already been answered. If you're trying to find information about an error (especially if you have an error code) chances are there is information already available on the internet or in CodeProject.
Try to solve the problem yourself first. I've seen numerous posts asking if something is possible to do in C#, where the post actually contains C# code. Had the poster taken the time to write that code in a sample project in Visual Studio, they would have easily discovered if the compiler allowed the syntax and if it had the desired behavior. In those cases, writing the post probably took longer than it would have to write in Visual Studio and wasted several other peoples time in answering the question.
Finally, if you are posting a homework assignment...don't. If you are stuck on a specific part of an assignment, go ahead and post the question. Be clear that it is a homework question and indicate the specific area you are having a problem with. Don't expect people to actually solve your assignment for you or simply give you the answer. We will point you in the right direction, but that is generally as far as it will go. If you simply post the assignment asking for help you will get a lot of responses but very few answers.
Choosing the Correct Forum
This is probably one of the single most important steps in posting a discussion question. If the question pertains specifically to an article, use the discussion forum for that article; otherwise choose the forum that most closely matches the technology or product you are using or the business/programming problem you are trying to solve.
For example, if you have a question about how to write the most efficient doubly-linked list in C++, use the C++ forum not the VB/VB.NET forum.
By correctly choosing the forum for your question you will dramatically increase the chances of your question getting answered. While there are people that are knowledgeable, and even experts, in multiple languages you have a much higher chance of finding the C++ experts in the C++ forum.
At this point, it's important to talk about cross-posting, multi-posting, and forum off-topic posts. Cross-posting is the act of posting the same question in multiple forums while multi-posting (or duplicate posting) is posting the same question repeatedly in the same forum. Both of these are considered very rude and generally only serve to guarantee that you won't actually get an answer to your question. You may get a lot of responses, but not a lot of actual answers.
Remember, every one here answers questions purely on a volunteer basis and reside all over the world. As a result, people may not (and probably will not) respond in a timeframe you desire or find acceptable. Posting to multiple forums or multiple times will not help you receive an answer any faster.
Off-topic posts are those posts that ended up in the wrong forum. Sometimes this can't be helped, especially if it isn't clear in which forum the post belongs. Make your best guess. If it ends up in the wrong forum, someone will generally point you to the correct one. (They may not always do so in the most polite manner, but that is a consequence of being an online community, which offers some level of anonymity, so try not to take those responses as personal attacks.
There are a few occasions when cross-posting is acceptable, as long as it is done in a responsible fashion. These situations occur when the problem really does span multiple technologies and it isn't clear where the problem exists. In that case, choose the forum you think is most likely to be correct one and post the original message there. In the other forums, post a message with the same title but whose content indicates that the message was intentionally cross-posted and include the "permalink" address to the original message. This instructs anyone who wants to answer that they should provide answers to the original post, thereby creating a single permanent record with multiple pointers to it.
Here is an example of a possible legitimate cross-posted question:
Subject: C++/C# Interop Problems
Message: I am having a problem with some C# P/Invoke interop code calling the Win32 SendMessage API....
Additional Forum: C#
Subject: C++/C# Interop Problems
Message: This message is cross-posted from the C++ forum since it involves both languages and I'm not sure if the problem is in the C++ code or the C# interop code. Please direct all responses to the [original message][^].
In this example, the
[original message][^] text would actually be permalink address of the original message.
Writing the Subject Line
Now that you've decided the correct forum, you need to write a meaningful subject line. Remember, this is usually the first (and sometimes only) impression you have to get someone to help you. Use a subject that clearly and concisely describes the problem. Try to keep it to under 20 words, if possible, and more than one word. The longer the subject line, the more chance for confusion and the shorter subject line the less likely it will be to get noticed.
Use subject lines with complete words, not TxtSpeak[^] or SMS language. This type of "shortcut" language (if it should even be called that) is not always understood by everyone in the community. (Remember, there are people here from all over the world.) Likewise, don't use an empty or blank subject.
In a similar fashion, even though there are people here from all over the world, try to at least form complete thoughts in your subject line and whenever possible follow proper English grammar. I know this isn't always possible, particularly if English is not your first or native language, but English is the "de facto" standard language for CodeProject so please try to be as clear as possible. For the most part, people here are able to figure out what is actually meant but there have been times when they haven't. If English is your first or native language, there is no excuse for an incoherent subject.
Since everyone here are volunteers, they will answer questions in their own time. Everyone understands the problem is probably urgent and that you need help, so you don't need to put that in your subject. There is also no need to shout in your subject. In case you don't know how to "shout" in a forum post, writing in all capital letters IS CONSIDERED SHOUTING.
Some specific words to avoid:
- Help (or any variation on this, like Please Help)
- C# (or any other language name, especially if that is the entire subject)
Some examples of bad subject lines (taken from actual messages):
- Can anyone help me?
- Plz help
- (Blank) (actual post is available here[^].)
- JPEG compression, HELP ME!
Examples of good subject lines (also taken from actual messages):
- What exactly does the '@' symbol do in front of a string?
- How to clear MemoryStream?
- OpenFileDialog example
- Question about Open Source license
So now it's time to write the actual message content. This contains the detailed information about your problem, but don't be so detailed that your question borders on becoming an essay[^]. You need to be specific about what the problem is and what you need help with. Don't simply ask for someone to send you the code to create application that does "X".
Be sure to include any solutions you may have already tried. This helps everyone out as the people who may answer your question know not to provide possible solutions you have already ruled out. If the problem is easily reproducible, be sure to include the steps necessary to reproduce the problem. This helps someone trying to answer the question understand the sequence of events that led to the problem in the first place.
If you must post code, be sure to enclose it in "<pre>" tags using the "code block" formatting option if it is more than one line of code. If you want to include blank lines, they must contain at least one space rather than really being a blank line; otherwise the line will be removed by the formatting logic. For inline code, enclose it in "<code>" tags using the "inline code" formatting option.
Using the code block formatting is extremely important for large code blocks in order to make the code readable. A lot of people will not take the time to read your included code if it's not formatted properly so this may delay (and in some cases prevent) your message from being answered.
If you are asking why a particular portion of your code produced unexpected results, doesn't compile, throws a runtime exception, or anything similar...be sure to actually include the relevant portion of the code. Unless there are security restrictions or trade secret[^] restrictions which apply to that specific section of code (and variable names or function names usually don't constitute security or trade secret violations) don't "simplify" your code by using single letter class or function names; show your code exactly as it is written.
When posting code, don't include the contents of the entire file. Include just the pieces necessary for some to get a complete picture of how the code works in the context of the problem. We don't need to see the contents of the designer generated
I mentioned this while talking about how to create a meaningful subject line, but it also applies to your message content. Don't use TxtSpeak[^] or SMS language in your message. This type of "shortcut" language (if it should even be called that) is not always understood by everyone in the community. (Remember, there are people here from all over the world.) Likewise, don't use an empty or blank subject.
In a similar fashion, even though there are people here from all over the world, try to at least form complete thoughts and sentences and, whenever possible, follow proper English grammar. I know this isn't always possible, particularly if English is not your first or native language, but English is the "de facto" standard language for CodeProject so please try to be as clear as possible. For the most part, people here are able to figure out what is actually meant but there have been times when they haven't. If English is your first or native language, there is no excuse for an incoherent message.
Again, everyone understands the problem is probably urgent and that you need help, so you don't need to put that in your message and there is also no need to shout. (Remember, "shouting" in a forum post is writing in all CAPITAL LETTERS.
I've said this a few times already, but it is an important concept. Everyone here answers questions on a volunteer basis. There is no requirement that someone answers your question. In fact, many questions go unanswered. These questions are unanswered for a variety of reasons, including:
- The message simply gets missed due to the high number of questions in that forum.
- There is no one in the community that can provide a meaningful answer.
- No one was able to understand the question well enough to provide an answer.
Even when someone does provide an answer, it may not be a high quality answer or even relevant to the question. This isn't a paid technical support forum, so, in many ways, the idea of caveat emptor[^] applies. Every one who answers a question generally tries to be as helpful as possible, but sometimes you get responses that are incorrect, confusing, or otherwise unhelpful. Don't take that as an indication that your question isn't important or that the people on CodeProject aren't knowledgeable, they just may not be knowledgeable about your particular problem. (This is particularly true with those individuals who respond to messages by repeating (or "parroting") other peoples responses or otherwise providing meaningless responses. Unfortunately, the majority of these individuals are trying to blatantly increase their post counts and should not be regarded as meaningful and productive citizens.)
You will occasionally see responses that are designed as personal attacks against an individual. Such action is called flaming[^]. This should not be confused with ranting[^], as a rant is generally a monologue that does not present a well-researched or calm argument but rather is an attack on an idea, person, or institution and usually lacks proven claims. Flaming is generally a hostile and insulting interaction between two (or more) users and does not constitute a constructive response.
In some cases, flamers (those doing the flaming) do so deliberately to upset and offend other members of the forum, in which case they are considered trolls[^]. If you suspect you are dealing with a troll, the best thing to do is ignore them. Trolls love the attention (of any kind) and the more responses they receive the more they are encouraged to continue. At a minimum, you can report the post as "abuse" (using the "Report Message" link) to bring it to the attention of the CodeProject administrators. If you do get flamed, try not to take it personally and don't dwell on it.
If someone responds to your question by asking for clarification or saying they don't understand what you are asking don't view that as an attack or a flame. Generally, this happens because someone is trying to help you but needs more information before they feel comfortable/able to provide a meaningful response. Sometimes after such clarifications, the other person is not able to help you at all. Again, this shouldn't be viewed as someone being unhelpful or as an attack; it's generally the case that the person thought they could help but after fully understanding the problem realized they could not.
For those who are actually responding to a post, remember...people here are from all over the world and their knowledge of English may not be as complete as your own. The person posting the question may also not be aware of the subtleties of the English language and what may seem as a correct way to ask for help may appear to you as being commanded to respond. While that may be true every once in a while, for the most part this is due simply to communication and cultural differences. Don't attack someone because they aren't using correct English. If you must, respond by asking clarifying questions or by rephrasing the sentence in question to ensure that it is understood correctly.
Just because your post receives a reply does not mean that reply is an answer to your question. If you have posted in the wrong forum, used a bad subject line, duplicated a post, or otherwise didn't follow the socially accepted rules of etiquette the response may be to tell you of those facts. Even if you posted following all of the rules, you may still feel the response isn't acceptable. If you feel that, be sure to take a look at the response again. Sometimes, the response is a link to a more complete solution, documentation, or may be other ways to solve the same problem. If someone posts a link in their response, be sure to follow that link and read the information presented before deciding that the response was unhelpful.
If you don't understand a response or need more information, simply reply to that response. You don't need to start a new thread (post a new question) in order to respond to a reply. The discussion forums on CodeProject allow for "threaded[^]" conversations, which means that all of the interaction between users about a particular question is logically grouped together in a nested "tree-like" view showing the relationships between posts.
Reposting a Question
Just because you don't get an answer in a timeframe you find acceptable does not mean you should post the question a second time. While reposting a question does move it to the first page of the forum (at least temporarily), it does not guarantee you will get an answer. In fact, the more times you post the same question the less likely you are to receive an answer.
Sometimes, however, it is acceptable to repost a question. This is somewhat subjective, but some general guidelines are:
- The message hasn't received any responses in at least 1 week (and the forum is very active)
- You realize the message is in the wrong forum
In both of these cases, your new message should contain the permalink address to the original message. If the message didn't receive any responses, it may have been because no one was able to understand what your question was, so be sure to try and clarify your questions.
Deleting a Question
In general, it is almost never acceptable to delete a question. This is especially true if the question already has responses, even if they aren't an answer.
If you realize (or are told) that the question was in the wrong forum, post a response or modify the original question (using the "Edit" link) and include the permalink address to the new question.
The only time it is considered OK to delete a question is when the question does not already have responses.
Voting on a Question or a Response
CodeProject has implemented a voting system for discussion posts. While there is always much controversy surrounding the voting mechanisms, please try to use it responsibly.
If someone provides you with a good answer, whether it is directly in the response or by providing a link to the correct solution, "up vote" that message by using the "Good Question" (or "Helpful Answer") link or the numeric voting scale. The numeric scale is a range from 1 to 5 where 1 is "completely bad" and 5 is "completely good".
If a question is completely inappropriate or abusive use the "Report Message" link or "down vote" it by using the "Bad Question" (or "Unhelpful Answer") link or the numeric voting scale with a rating of 1.
Following the established forum posting etiquette will help you get an answer to your question, will help make you a productive member of the CodeProject community and will help you gain the respect of your peers in that community. Always remember, these rules of etiquette apply not just to posting questions, but also to posting responses.
Quickly summarizing the most important aspects of forum etiquette:
- Search the internet and CodeProject for the problem before posting.
- Choose the correct forum.
- Use meaningful, correct and concise subject line.
- DON'T SHOUT.
- Don't use TxtSpeak (or SMS language).
- Be clear when stating your problem.
- Provide code samples when needed, and enclose them in "<pre>" tags using the "code block" formatting option.
- As much as possible, try to use proper grammar and form complete sentences (or at least complete thoughts).
- Don't expect an answer in your timeframe, people here are volunteers.
One last thing worth mentioning: Don't use the discussion forums (either the article specific or the community wide ones) for advertising. If you want to advertise your product, contact CodeProject about purchasing[^] advertising space.