It looks to me like the demand for Cocoa (Apple application) development is on the rise, and will only continue to move upwards. Mac hardware continues to sell despite poor economic conditions, and iPhones are going to take over the world the same way iPods did.
Right now I'm on a path to learning Objective-C, which is basically a superset of C with some object-oriented conventions added to it, a la Smalltalk. Once again proving that C is the language that all programmers should learn first! I'm very glad my education started with Unix and C, and not Windows and Java (both of which are on their way to becoming dinosaurs, IMO).
I'm even considering going to this year's Apple WWDC in San Francisco... maybe I can convince Robert Half to pay for some of the trip or something?
EDIT: I figure a trip to SF will run me around at least $3000.00... with my current savings and rate of saving, plus that wonderful tax stimulus package, I'd have about half that amount by the time the conference rolls around.
Right now I'm on a path to learning Objective-C, which is basically a superset of C with some object-oriented conventions added to it, a la Smalltalk. Once again proving that C is the language that all programmers should learn first! I'm very glad my education started with Unix and C, and not Windows and Java (both of which are on their way to becoming dinosaurs, IMO).
I'm even considering going to this year's Apple WWDC in San Francisco... maybe I can convince Robert Half to pay for some of the trip or something?
EDIT: I figure a trip to SF will run me around at least $3000.00... with my current savings and rate of saving, plus that wonderful tax stimulus package, I'd have about half that amount by the time the conference rolls around.


Comments
Even though it's not the be all and end all people thought it would be, modern languages tend to be Java, but without all the cruft, rather than streamlined C. Even C# is more Java than C. The only issue Java has is its pseudo interpreted nature which is practically meaningless given even the processing progression of handheld devices. Efficient languages like C are always going to have their place in the smallest devices, but there's a world of programming beyond that and the only things that are bumping Java from that general practice space are evolutions of it.
Do modern languages even use explicit pointers or garbage collection anymore?
Your predictions would have made more sense back in the '80s when Microsoft was on the rise, but Apple's trying to use the same business plan they did 20 years ago, except instead of just battling a single software opponent, Apple's plan requires that they beat EVERY peripheral, hardware, and software maker simultaneously.
iPods and Mac are horrific examples of closed engineering. The single-source Apple plan didn't work back when people were computer-stupid, now they've got a whole generation raised in an open vendor market. iEverything just doesn't cut it. You mistake trendy for trend-setting.
Java development is being relegated more and more to niche markets and industries - it hasn't really succeeded anywhere, and the only companies hanging on to it are the ones that are slow to change or that have made huge investments in it and can't pull away. It may have helped drive development in certain directions and been a great theory, but in practice it is dying out.
C# is dominating because of the MS monopoly; I'm still not convinced that it's any better than anything else MS has done, because it does the same thing you're accusing Apple of - it's closed engineering that leverages a monstrously complex framework that sits on top of their increasingly arcane OS. All MS ever ends up doing is bloating its software more and more; and I don't think this "abstraction" really makes it any easier for people to program - it makes it easier for people to "visually" create drag and drop applications, but they still can't actually solve problems to save their lives.
C is really part of the process; maybe it makes more sense to teach supersets of C because of new paradigms and better ways of doing things that have developed in the last couple decades, but at this point I think teaching Java to people actually does more disservice in terms of teaching fundamentals. C just has too much broad application, especially since more and more peripherals and devices requiring its efficiency and flexibility are coming into use.
Java has the support. C# has the support. You're not reinventing the wheel or playing garbage collector for unneeded efficiency boosts with them. I haven't even heard of someone using Objective-C other than Apple.
As I said, you've got OSes and small devices. Things where you don't have the luxury of a modern programming language. If you're not doing that, you're just shooting yourself in the foot allocating memory and writing your own interfaces that will then only run on one architecture. Even peripherals have less and less need for such efficiency and they'll just continue to grow in that direction.
C's continued use is testament to it really being great at its niche, but that niche is going to shrink if it changes at all, and beyond that it's really a pretty poor choice.
The bigger question is whether we'll ever escape the web as the primary interface for Internet-driven applications. That question is up in the air. Beautiful frameworks like Cocoa and Android make the escape kind of desirable.
I do agree that where internet applications go is the real question with future programming. GMail isn't the most fully featured mail program around, but portability (especially unplanned) is a feature so valuable to me now that the idea of running a thick client for email sounds ridiculous.
Until Cocoa tries to be platform independent it's nothing more than an upgrade to an old way of doing business, which is the entire problem with Apple.
I'm certainly shooting for eliminating the web as an interface for applications. I think it's ridiculous that we keep trying to make it work that way (like using a screwdriver to dig holes or something).
Even a complicated Java application has to handle the lifecycle of its application objects. (Anyways, Objective-C has garbage collection these days.) I like generics too, although I don't think their critical, especially if you use test-driven development.
I would certainly gravitate towards a better language if my requirements could be satisfied by a variety of good framework choices. If your target is OS X users, your only real options are Objective-C or a web application, IMO. I can't in good conscience recommend Swing or SWT when Cocoa is available.
I think if client applications take off, it'll be a streamlined supplement to web interfaces, not a replacement. A lot of web frameworks enforce separation between server and client code, which has the potential to make such porting relatively painless. (A bit of hubris, yes. But a comforting bit at that.)
I don't know if it's possible to escape these particular bonds of commercial software development with the way the world is set up currently. However, one could plainly demonstrate that C (as a language all on its own) pretty much escapes all the strictures of dependence that the commercial interests want to put in place. One can also develop for the Apple platform entirely in C if one wishes, and that will still compile fine within the Objective-C framework.
A few points of contention:
1)
If you define a standard interface for your Internet-driven application, then writing a thin client for different platforms really isn't so bad... Just so long as it really is a thin client with application logic on the server.
2)
You suggest a universally accessible paradigm, but the only thing that fits the bill right now is (X)HTML/CSS and Flash. That's great for some things, pretty crappy for others, and impossible for a few things.
Frameworks aren't intrinsically tied to the OS, so the way I see it, using Cocoa isn't selling out of the universal paradigm. While it is a pragmatic compromise in light of the absence of a good universal solution, you can also see it as a vote to increase the popularity of Cocoa, and maybe have it become universal someday. Again, a comforting bit of hubris, but I think there's a meaningful difference between using a framework and making OS-level API calls.
And then of course there's the whole nascent RIA trend, yet another framework of frameworks built on the client side, which will likely make a lot of those application servers less than necessary. Java is really only "thriving" in the financial and insurance worlds, two places where change is just anathema...
A lot of the hot RIA stuff is generated by server-side code - largely using Java.
I'm playing pundit today, so don't assume my assertions are based on a thorough investigation that includes market research. ;-)
I just wish Google would port Picasa to OS X.
(Damn, I wish I could edit typos.)