Whenever I want to post a programming question, I'm tempted to post it on all four of the above SEs. What's the difference between them? The FAQs I find too skim.
If you consider the history of these sites, it's generally pretty easy to see where questions belong.
It all started with Stack Overflow. Stack Overflow grew to the point where it was best to split off into a few specialty sites to cover some of the "softer" topics surrounding programming. But if you have a specific programming problem that involves the actual act of day-to-day coding, your question likely belongs on Stack Overflow.
There are a lot of activities that a programmer engages in that do not involve actual coding. Questions about software testing, best practices (design patterns), development methodologies; we generally refer to them as "whiteboard activities." For the most part, those questions have a home on Software Engineering SE.
Peer review of your code is an important activity for most programmers. Once you have working code, it is an important part of your professional development to have others look over your code to find hidden mistakes, or just to improve your overall code quality and style. If you're having trouble with a piece of code, your question likely belongs on Stack Overflow. But if you have working code that you simply would like to review with others, your question belongs on Code Review SE.
The Code Golf site grew out of a class of questions that used to occur on Stack Overflow but never quite belonged on the site. The programmers on Stack Overflow enjoyed putting together and participating in various home-brewed programming contests and solving interesting programming puzzles. This one should be pretty obvious; if you are putting together a programming puzzle to challenge your fellow programmers, it belongs on Code Golf SE.
Code Review is for when you want your code ... reviewed.
Code Golf is for when you want to ... code golf.
StackOverflow is for getting your other programming/development problems solved.
Software Engineering is for subjective (not "bad" or "opinionated") questions related to programming and the profession.
This is pretty clear from the FAQs, IMO. If you need further clarification, read their Meta site posts on the scope and read actual questions.
Questions that are all of:
- Relatively recent
- Highly voted
- Not closed
should be good example questions for you to follow.
Hard fact objective answers
Problems usually contain code
Conceptual and subjective issues with software development
Problems usually do NOT contain code
Code Golf and Programming Puzzles
Like the name suggests, for programming puzzles
The questions are made for fun and do not represent actual problems
Questions are about:
Best practices and design pattern usage in your code
Security issues in a code snippet, etc.
The performance of your code