I propose the following alternative FAQ baseline:
Computer Science - Stack Exchange is for students, researchers and practitioners of computer science and related fields. If your question is about ...
- understanding concepts of computer science
- solving computer science problems
- applying computer science to solve problems in other areas
- issues unique to the discipline of computer science itself
and is not about ...
- Software and hardware support — various SE sites (this idea is borrowed, with modification, from Raphael)
- the site itself — please ask on meta instead
... then you're in the right place to ask your question! However, there are certain subjects that, while on-topic, are covered in more depth at our sister sites:
- Mathematics — Mathematics - Stack Exchange
- Software engineering — Programmers - Stack Exchange
- Research-level theoretical computer science — Theoretical Computer Science - Stack Exchange
- Scientific computing - Computational Science - Stack Exchange
My question is about software development/programming. Where can I ask it?
General programming questions more likely belong on Stack Overflow instead of here. A good rule of thumb is to ask yourself...
Would an expert in computer science give me a better/different/more specific answer to this question than expert programmers?
If yes, then feel free to ask it here. For more discussion on that topic, see this question on our meta site.
What is computer science?
Although there is no black-and-white distinction between computer science questions and programming questions, questions are considered to be about "computer science" roughly when they can be discussed between two people who don't know any of the same programming languages or application programming interfaces. For an explanation of what CS is, we refer you to the short definition found in the 2000 article, "Computing as a Discipline," by Peter J. Denning, Douglas E. Comer, David Gries, Michael C. Mulder, Allen Tucker, A. Joe Turner, and Paul R. Young:
The discipline of computing is the systematic study of algorithmic processes that describe and transform information: their theory, analysis, design, efficiency, implementation, and application. The fundamental question underlying all of computing is, "What can be (efficiently) automated?"
Note that I have not added appropriate links to this, but you should get the idea. I will now try to argue for some of the strengths of this version, compared to Raphael's, the leading contender:
The first meaningful point of departure is in the first list: whereas Raphael uses "How to apply those to a given problem", I give "solving computer science problems," and "applying computer science to solve problems in other areas." I feel that using the Mathematics FAQ as a template may have led Raphael astray here. Problems in Mathematics are typically solved using Mathematics only; so it makes sense to limit solutions to mathematical problems to solutions relying on mathematics only. However, Computer Science can (and does) benefit from areas which may not be considered by most people to be part of Computer Science, especially those areas of mathematics which may provide useful tools (e.g., graph theory). My phrasing avoids this difficulty by separating computer science problems (which are of interest primarily to computer scientists, and which may be solved using a variety of tools which are not part of computer science, per se) and problems (of interest primarily to others) to which computer science can be applied (e.g., to design an algorithm to compute some interesting result). In this sense, I feel like CS should feel more like the statistics or physics stack exchange sites, rather than the mathematics site.
The next point of departure is in the last point of the first list: whereas Raphael says "History and development of computer science," I say "issues unique to the discipline of computer science itself." I feel that this represents a better catch-all than Raphael's version, which implies a scope limited to historical discussions. For instance, that version could be construed as declaring discussions of philosophy, ethics, profession, pedagogy, etc. off-topic; I assume this is not what the community wants? My version allows more, without (in my estimation) allowing too much. Indeed, I raise Raphael's own criticism of the other candidate FAQ against Raphael on this issue: you can never name all of the on-topic, non-technical, about-CS topics; so why list only a few?
I suggest instead of declaring "programming" (the activity) off-topic, we declare "using [...] computer software" (also "using [...] computer hardware") off-topic. Programming is an activity to which computer science is and should be applied; in the same way that solving a system of equations is an activity to which mathematics is and should be applied. Programming is an activity which virtually all members of this site will have in common. My solution seems more palatable, though still possibly unsatisfactory. Suggestions are appreciated.
To avoid questions about personal, academic or professional discussions, which aren't a good fit anyway, I think this is worth stating. I believe we already had a question that would fail this test... could be mistaken.
I have edited my original suggestion to address issues raised in the comments and in the chat discussion. The major change is in how I propose dealing with the "programming" issue. Comments and further suggestions are welcome.
A better solution than arbitrarily allowing all programming questions, or arbirarily forbidding all programming questions, might be to add a section to the FAQ explaining the special relationship between programming and computer science. It is common on other sites (such as Theoretical CS and English, for example) to dedicate special sections of the FAQ to delicate matters. I propose that this be done for programming on this site, and the edits reflect that.
The Game Development and Statistics sites do a fairly admirable job of trying to explain what programming questions are on- and off-topic there. Based on their examples, I have crafted the text which appears in the edits.