Once upon a time, long long ago, I wrote 8-bit programs in Tiny-C with absolute addressing being the only reality. Then we had Borland Turbo-C with relative addresses and the joys of relative assembly jumps. Enter Windows and the joys of locking and unlocking memory blocks that you must allocated and manage yourself. Then came Visual Basic which evolved into .Net CLR and decreasing awareness of what is happening under the hood.
With VS2010 including F# and enhanced parallelism in .Net4, we actually have to go retro a bit – back to the world of having to understand the hardware. CPU speeds are no longer increasing – I have an old laptop from six+ years ago that ran at 3.2 GHz. This year I updated one of my machines off-the-shelf from Costco.com, an I7-920 with 4 cores and hyper-threading (8 CPUs appears in Task Manager) and 12 GB of DDR3 RAM. This week I ordered from Costco a Phenom II X6 (Yes – 6 REAL CORES) for one of my daughters. This CPU will (according to YouTube demos) overclock to 4GHz.
Many developers struggle to do asynchronous calls and threading. The reality for writing high performance software in the future is that writing for parallelism is not an option but should become stock in trade (along with asynchronous calls and threading).
If you are hiring, I would emphasis specifying experience with all three of these strategies in your job requirements. If you are not fluent in these three strategies, start working on learning them.