if you're a good programmer, have good design skills, and can manage a project, it's really not that crazy. the REAL work is design and quality control.
As a programmer who has worked in a variety of situations within finance/trading, I must agree that the key question in efficacy of outsourcing/interning vs professional development is your ability to be the project manager and architect.
Consider a task of implementing the back-end for an already written HTML sign-up process. Doesn't sound too bad, Ruby on rails for an hour, pad a second hour to be on the safe side. I bet you could find a dozen jobbers to bid < $100.
Of course there is alot more omitted from the description then included: integration with recurring billing service, complex upgrade/downgrade proration policies, general ledger accounting, reporting, ability to handle unplanned promotions/pricing changes, .... Not to mention all of the changes in the original HTML pages once people are really focused on them.
A professional knows enough to ask how these follow-on features will be satisfied. A jobber knows that his initial low-ball $100 is a loss leader. At some point the payor will get discouraged and not want to pay for more. How much quality can you expect from someone unsure of being paid at all.
No point in reinventing the wheel, there are many open-source solutions supported by consulting firms. You get a bid from Malaysia for $60K. Is that really what it is going to cost you, or are they low-balling and planning to hit-you on the change requests? Meanwhile the bidding process has taken longer than the time budgeted for the whole job (not uncommon.)
If your task is really well defined, then why not code it yourself? Usually it is specific knowledge, not time. University students are thirsting for real-world knowledge and want to learn Java and a data vendor API, for example. If you want something that really works though, you need to really walk through the code yourself. How are LME forward markets handled? Is the data being processed in a multi-threaded safe way? Are real-world issues such as outage-filling being handled? Being a project manager/architect means alot more than cracking the whip.
I have worked with overseas talent, and I know that no one has a lock on intelligence. So much of getting a good working product is communication, that I found, that even with fluent English, it took 2-3 times as much of my time per employee than for an American worker which negated the cost savings. In my experience, one stops outsourcing at the skeleton stage since explaining the nuances is just too expensive.
I have a friend who ditched his entire American programming staff in favor of some East Europeans. They made exactly what he wanted for 1/3 the money. It took alot longer to get it finished than expected. The tail-end, however, didn't end. Everything that he hadn't personally, explicitly tested didn't work. You might think that your US dollars command serious attention overseas, but smart guys want to ramp-up on the next project everywhere. Since then, he has started all over again, but this time with a very small staff of Americans and very careful, detailed oversight.
Don't get me started in discussing the short-cuts that jobbers necessarily take to get their low bids. Are you really appreciating that the whole thing may have to be rewritten when you want a little change made?
There is also reuse of effort. Did you know that a big piece of the task was scrapping data from a certain website and that your colleague down the hall has some abandoned code for doing it?
How about real-time availability? You get the kid down the street to agree to do it for $1/hour, but not when his friends bring their skateboard. You get someone to work after-hours, but you didn't realize he was getting married.
In conclusion, if you can't really validate the work yourself, if the project isn't trivially small, or if you aren't really exactly sure what is needed, pay a professional project manager/team to manage the work. After all, it is the result you need.