In the first half (give or take) of my career I was a Windows C++ programmer. I was a UNIX and Macintosh guy in college, but I only got as far as shell scripting in UNIX (i.e. no application development), and as for my semi-serious Mac programming skills (in Pascal, C, and also 68K asm), jobs for those were few and far between. So I started out accepting a job QA'ing Windows software out of college, since I graduated during a recession and jobs were few and far between period. And then eventually moved into Windows programming. Because Windows was virtually a universal platform, and there would likely always be jobs, and plentiful, in it.
And things have changed, in a number of ways regarding this. While C++ development on Windows seems to have largely dried up leading up to and then being finished off by this recession (excepting a few jobs requiring major experience in C++ on UNIX as well), Windows remains ubiquitous on PC's as desktops and servers, and on laptops. Hence my needing to switch to from C++/MFC/Win32 to C#/.NET. There are more C# jobs than even Java jobs in my area (southern California), and I personally think Java is dying (not helped by Sun letting the language stagnate) while C# is growing (helped by continuing language improvements). So to me .NET has/had become the main platform for desk/laptop computing and servers.
But then there's the mobile world. Of which, BTW, I'm not (yet) a part of (I don't think my Window XP netbook counts), so my views are from someone fairly ignorant of it and looking at it from the outside. There is no one main platform that you can develop for and cover 90-some percent of the market like on PC's. To program for the iPhone/iPad, I'd have to learn Objective-C and their platform's API. To program for Android I'd have to learn Java and their platform's API. To program for Windows Phone 7 I think it's Silverlight (C# and .NET and WPF's XAML markup language I guess).
And just in recent tech news reading, Apple wants a fortune to participate in their applicaton space, Google demands that you use their payment processor (of which they get an additional cut), and apparently Android has not-insignificant compatibility problems even within the platform. And it looks like MS is letting Silverlight die (like Adobe is seeing the writing on the wall and seemingly expects prolly the major reason Silverlight was developed, Flash, to die), with Windows Phone 8 to have yet another separate programming platform.
But capitalism abhors inefficiencies. MS, seeing that they don't, and in fact are far from, being the gatekeeper of the only major platform in this space, are spanning and connecting/associating what they own and what they don't with their forthcoming Metro GUI, and making it (introductorily) programmable with HTML5/CSS/JavaScript (where prolly then to do some really powerful stuff would require delving into their new WinRT platform and it looks like C++ or maybe also C). And now Mozilla is pursuing their Boot to Gecko platform, which sounds very much along a similar line:
"Mozilla believes that the web can displace proprietary, single-vendor stacks for application development. To make open web technologies a better basis for future applications on mobile and desktop alike, we need to keep pushing the envelope of the web to include --- and in places exceed --- the capabilities of the competing stacks in question."
I can imagine developers/companies getting tired of making mobile apps having to be ported to other platforms, esp. when web apps have already begun gaining favor over local apps due to avoiding many of the nightmares in installing/updating and configuring/compatibility with each instance of the target environment. And I think as HTML becomes more powerful, with native application like capabilities, there'll be less of a need to tap into lower-level single-vendor API's. These are like plugins in HTML, which are dying today -- the point at which you leave the virtually universal platform for that kind of computing machinery, is where you start inviting in these potential nightmares.
Back at my second job in 1999 towards the beginning of the dot-com bubble, my career was at a crossroads of sorts, in that COM had become very important on the Windows platform, and I had migrated from C to C++ and had gotten comfortable enough with it to be able to understand COM's concepts, but (now "classic") ASP and web programming had been booming too. I could have gone/focussed on either way, but fate at the time was that the other (non-supervising) developer at our tiny company was further along in learning COM, so he was tasked with pursuing that and I was tasked with learning ASP. Since COM mostly died when .NET settled in, tho I was jealous of my coworker at the time, I think it was better for me.
We're starting the next version of our product at work, and it's a major departure from how it previously worked, and thank goodness the dev team is also doing a major departure from resubmitting the page for everything to heavy AJAX and jQuery usage. I've got some more review of current tech that I want to do for this year, but next year I plan to get another hard drive for my PC and put Windows 8 on it, and get my first smartphone, also with Windows 8, and then delve into the HTML5 and CSS3 business that's picking up steam, and hopefully will be a little further along in compatibility/interoperability/standardization a year from now. Ditto for the JavaScript changes/enhancements/whatever based off the ECMAScript 5 standard.
Scott McNealy once said "the network is the computer". Sort of. I say the future is the web platform, on your computer (in whatever various hardware forms your computers take). We already have a nice separation of structure, presentation, and behavior with this platform. (Which reminds me, also for me to learn next year: ASP.NET MVC.) Beyond this I offer no judgments on whether or not this is the technology that *should* prevail, just that I think it will. Look for language improvements for easier keeping of larger amounts of JavaScript logic under control, and improving IDE help with this like with the more serious languages.
p.s. As a meta comment, the old Slashdot interface for starting a JE doesn't seem to be available anymore (?), but I got to it by choosing to edit my newly-created JE. And it's in this legacy interface that you can actually choose an icon for your burst'o'brilliance, and get the three choices for how far it's shared instead of just the one inscrutable choice of the new.