This is a really, really broad question. You might want to check out this topic.
I've had to remove this as the question is too broad. Please narrow it.