- I don't think it is a strict precondition, but I'm sure it helps. I say this because programming and mathematics are very logical systems that require the mind to think in that manner. A good knowledge of mathematics or any other subject that stresses logic will undoubtedly help in programming.
- From my experience (which is limited), I'd have to say no. I know great programmers who never took any kind of CS training, and I know great programmers who took CS training. I personally haven't had any formal computer science education, and as long as one has the motivation to learn (from reading, poking around and trying things out, listening to others in the field, etc), they'll be fine.
- Off the top of my head I'd say "no", but I don't really have any information to back that on...
(BTW, good question! I'll be interested in hearing what the other monks have to say...)