Just met with Ed Kaim and Melissa Hovis of Microsoft and Waggener Edstrom to discuss the .NET Compact Framework. Without violating NDA, I can say that it is my opinion that post-desktop form factors such as phone-enabled handhelds (especially with GPS or E911 location info) and tablets represent a huge market for innovative applications (the TabletPC is programmed with the full .NET Framework, but my point is that it's essentially a post-desktop form factor). Although the .NET Compact Framework does not have everything in the .NET Base Class Library, notably some GDI+ stuff, and does not have all the capabilities of the .NET runtime (notably, COM Interop), it does not represent the same level of "downsizing" that one experiences going from Java Standard Edition to J2ME. In my experience, programming the .NET Compact Framework is very, very easy -- in Thinking in C#, I have an appendix devoted to it, but half of what I say is, "This looks familiar, huh?"
In this meeting I heard something I hear a lot from vendors, though, which is that many programmers have lost their perspective on certain realities. In this case, I was told that developers complained because they could not use the ALT-TAB key combination to switch out of the PocketPC emulator; this makes perfect sense, since when you're running in the emulator, you're sending the ALT-TAB to the PocketPC OS, not to your desktop. And yet, programmers complained. I've also been seeing lately that Web Services programmers are sometimes ignoring the cost of transmitting a call over the network, which is a grave mistake.
As big a fan as I am of the precept that programmers shouldn't be obsessed with hardware, I think it's equally important to realize that we are bound to certain physical and market realities. While CPU and storage costs decrease at Moore's rate or better, things like bandwidth and display capabilities are increasing at much, much lower rates. I'd submit that this creates a certain tension that, in turn, may give rise to the killer apps of the future.