Thursday, April 26, 2012
« DRM-free books | Main | Using the MVVM pattern requires a framew... »

I am sometimes asked for technical career advice. A common question these days is whether it is worth learning WPF, or Silverlight – .NET and XAML in general I suppose, or would it be better to learn HTML 5 and JavaScript, or perhaps even Objective C?

This is a challenging question to be sure. How good is your crystal ball? Smile

XAML appears to be alive and well – WPF, Silverlight, and now WinRT (Windows 8 – and probably Windows Phone 8 and “Xbox 720” and more) all use XAML.

I look at the WinRT usage of XAML as being essentially “Silverlight 6” – it is far closer to Silverlight than WPF, but isn’t exactly like Silverlight either. Assuming success with Windows 8, WinRT will become the new primary client dev target for most smart client development (over the next few years).

The primary competitors are Objective C (if you believe iPads will take over the client space), and HTML 5/JavaScript (if you believe in fairy tales the concept of ‘one technology to rule them all’).

This is where the crystal ball comes into play.

Do you think Apple will displace Microsoft – iPads will replace the use of Windows – as the monopoly client OS?

Do you think the concept of ‘natural monopoly’ that has caused the Windows hegemony over the past 20 years is at an end – that some fundamental economic shift has occurred so companies are now willing to increase their IT budgets as a % of revenue to accommodate multiple client platforms (unlike the past 20 years)? In which case business app developers should expect to support at least iPad and Windows, if not Android, into the future?

Do you think that Windows 8 and WinRT will be strong enough to withstand the iPad onslaught, and that the natural monopoly economic effect remains in place, so Windows will remain the dominant client platform for business apps into the foreseeable future?

These are really the three options, resulting in:

  1. Objective C slowly overtakes .NET and we ultimately are Apple devs instead of Microsoft devs
  2. H5/js rules the world as the ‘one technology to rule them all’ and vendors like Microsoft and Apple become entirely irrelevant because we live in a purely open-source world where nobody makes money off any platform technologies, so probably the only hardware/OS left is something like Android running Chrome, because it is a 100% commodity play at that level
  3. .NET and XAML remain entirely valid, and life generally continues like it is today, with a mix of .NET smart client work and primarily server-based web work with h5/js primarily used to boost the user experience, but not often used to write standalone smart client apps

My crystal ball leans toward option 3 – I don’t think economic realities change much or often, and I struggle to see where IT departments will come up with the increased budget (% of revenue) necessary to build apps for both iPads and Windows over the long term. It will be measurably cheaper (by many, many, many thousands of dollars) for companies to buy employees Win8 tablets rather than building and maintaining both iOS and Windows versions of every business app.

And I don’t believe in the ‘one technology to rule them all’ idea. That hasn’t happened in the entire history of computing, and it is hard to imagine everyone on the planet embracing one monoculture for software development. Especially when it would be counter to the interests of every platform vendor out there (Microsoft, Apple, Google, Oracle, and even IBM).

Still with me? Winking smile

To summarize, I think learning XAML is time well spent. Today that’s WPF or Silverlight. There is absolutely no doubt that Silverlight is closer to WinRT than WPF, and people building SL apps today will have an easier time migrating them to WinRT later, whereas most WPF apps will be a pretty big rewrite.

But there’s nothing wrong with focusing yourself on h5/js. If you do so, I suggest doing it in a way that ignores or minimizes all server-side coding. If h5/js does take over the world, it will be used to create pure smart client apps, and if there’s a “web server” involved at all, it will exist purely as a deployment server for the client app. The ‘pure’ h5/js/jquery/etc. world isn’t linked to any vendor – not Microsoft, Apple, or anyone. To me this represents a pretty major career shift, because to truly embrace h5/js as a complete software development platform is so demanding (imo) it won’t leave time to retain .NET or other vendor-specific technology expertise.

For my part, I’m not yet ready to abandon Microsoft for h5/js, because I think Windows 8, WinRT, .NET, and XAML have a rather bright future. A year from now I think a lot of people will be happily using Windows 8 desktops, laptops, and tablets – and hopefully a lot of Windows Phones, and with luck we’ll be looking forward to some cool new Xbox. I live in (I think realistic) hope that my .NET/XAML skills will apply to all these platforms.

What does your crystal ball say?

Thursday, April 26, 2012 7:58:03 PM (Central Standard Time, UTC-06:00)
Rocky, your thoughts are always helpful as I think about where to focus my learning. I don't have as much foresight on these types of things. That said, my team will deliver its first Silverlight app tomorrow that will replace a portion of our primary VB6 app that has been around since VB2. With four devs (two of which never had any prior XAML or CSLA experience), the process has been quite fun. I am interested in gaining more HTML5/Js experience, but the productivity we enjoyed with XAML (and CSLA) was super. I'm looking forward to more of it, especially with Win 8 tablets.
Tim
Friday, April 27, 2012 1:49:24 AM (Central Standard Time, UTC-06:00)
There is a sifnigicant mass of smart phones, tablets, laptops and desktops that can't run XAML.
Don't you think is relevant for corporations that employees could use the apps from their own devices, from anywhere?
Three year ago portability wasn't an issue, today it is.

What do you think about porting the client part of CSLA to JS?
Friday, April 27, 2012 3:23:41 AM (Central Standard Time, UTC-06:00)
My spin on it :)

The backend is more important than the front end.
XAML, HTML, etc. are just presentation technologies.
CSLA with .Net or Mono provides a very good foundation to use with all of the above presentation technologies in the backend particularly.

The presentation technology to use depends on what the application has/needs to do, however IMO one should instinctively look at the technology with which you can target the most devices and users and that is 'MVC'~HTML5/JQuery at the moment.
Next choice is Mono, after that native (Microsoft-XAML,etc.; Apple-ObjectiveC; etc.)

~~

XAML is more a super HTML, but it is too closed/not available on all platforms/still evolving, as in Silverlight XAML versus WPF XAML versus WinRT XAML, etc. HTML5 is moving towards having XAML capability eventually..

c# is the hot language at the moment... F# seems to gain momentum?

Looks like the Java days could be numbered...

Siegfried
SIegfried Niedinger
Friday, April 27, 2012 4:52:11 AM (Central Standard Time, UTC-06:00)
I would instead learn both HTML/JS as well as XAML/WinRT. It's not hard... I think real programmers should be easily portable given a reasonable time frame. Sure you can't expect a programmer to be "efficient" in both the worlds, but they can become efficient in either of them given a couple of weeks if they are proficient with the technology. With Objective-C, it's the same. Same C with different API, a proficient C developer can become efficient in Objective-C quickly.

Finally I don't think it's our job to speculate on the future. Let the analysts/media create as much hype as they can. Personally I don't believe Desktop/Real PCs are going anywhere.
Friday, April 27, 2012 7:42:17 AM (Central Standard Time, UTC-06:00)
"If you build it, they will come." I think one of the biggest indicators for a .NET/XAML future is the already existing army of .NET developers in the world. Thanks to WinRT, all these developers will have a much easier path at developing for the hot trend of mobile computing. While we will have to learn some new things, it will be significantly easier to learn WinRT than it will be to learn something like Objective C.

I also believe there is a lot of pent up demand from .NET developer for writing mobile apps. And when we can write essentially one app that will work across desktop, tablet, and phone...look out!

How this translates into a future for .NET/XAML is that from day one (actually, even before day one) legions of programmers will be churning out WinRT apps for the desktop, tablet, and phone, and this will give normal consumers a tremendous amount of incentive to choose Win8. If you build it, they will come.
brad rem
Friday, April 27, 2012 8:53:02 AM (Central Standard Time, UTC-06:00)
While interesting to discuss, I think the question is irrelevant (at least for me). A businessman was once asked if English was the most important language for conducting international business. The businessman's reply was the most important language was whatever language the client spoke. A good developer is a polyglot.
Scott Janssens
Friday, April 27, 2012 10:03:10 AM (Central Standard Time, UTC-06:00)
Hi there Rocky,

First let me start off by saying that I am one of the many who have been following your teachings for a very long time now. I have been using CSLA pretty much forever, both the COM and .NET versions, both the code as well as the principles, and as a result I have to say I have been pretty darn successful. Remember that red big fat Wrox "VB Business Objects" book, the cover of which showed a picture of a guy who was deep in thought? That still is one of my favorite books.

Regarding this question, unfortunately I have to disagree. Right now I absolutely believe without a doubt in my mind that right now, not tomorrow or yesterday, HTML5/ASP.NET is the way to go, and that it should be chosen over WPF and certainly over Silverlight. And this is coming from a guy who has done pretty much nothing but rich client development (WinForms, WPF, SL, VB COM Forms) his entire career, using CSLA of course :). Had you asked this question 1.5 years ago, I would have done a 180 and given you the opposite answer. I would have told you that SL was without a doubt the client platform of choice. I was madly in love with SL, especially the later versions that brought it more in line with WPF.

But then the ipad came out. Everyone fell in love with it, even MS. Apple basically declared war on the plugin and labeled it evil. Everyone went kookoo for the ipad. MS and Adobe both caved in and so now we are seeing the beginning of the end for the plugin, including SL. In my opinion SL is dead, which is a shame. Some people like to argue the contrary but the fact that there's never been mention of SL 6 is testament to the fact that it's over for the SL platform. When SL4 barely came out there were already talks about SL5. Not so when SL5 came out.

I understand that XAML skills carry over to Win8/WinRT. That is fine. But the problem is that today, not tomorrow, if you need to create a new system, there really are NO "good" XAML choices available. Neither SL, WPF, or WinRT are good choices for new systems today.

Obviously I can't develop today for WinRT because WinRT is not out. And even if it was, the system's reach would be severely limited by the fact that WinRT only runs on Win8. Who's going to have Win8 installed? We barely got Win7 machines not too long ago. I know it is wishful thinking but MS should have somehow made it possible to install WinRT on Win7 machines, just like .NET can be installed on various Windows versions, even if the install is huge. At least this would have opened up the possibility of doing WinRT development today for new apps in the corporate environment. And for the sake of argument, let's assume WinRT was out today and did run on Win7, it's my understanding that when compared to SL and certainly WPF, WinRT is really lacking on the feature set, so I question whether it is even possible to develop a relatively complex LOB application in WinRT, but I can't say for sure. So for new systems today WinRT is not an option at all for many of us who will not have Win8 for a while, or maybe even at all. If the past is any indication of the present or future, Win8 adoption in the corporate environment may all together be skipped until whatever is after Win8. In the past, successors to successful operating systems have rarely had much success. Windows Me and Windows Vista are two classic examples. Don't get me wrong. I like WinRT. I like what MS is trying to do with Win8. But for new apps we are just not there yet.

Next comes SL or WPF. If I am building a new system today, how can I with a straight face tell my customer that time and money should be spent writing the new system in a technology that is basically obsolete? I know, I know... I understand that both WPF and SL apps will run on Win8 but let's just say I don't want to create something new today that on Win8 is going to have to run in "desktop mode", whatever the heck that is. I understand that if written in SL the app can perhaps be easily be ported to WinRT, but for heaven's sake I can't say that to a customer. We're building a new system and are already making plans to port it to a new platform?

Once again, SL and WPF are dead. They have been superceded by WinRT. And this is fine. I have no beef with this. This is just how the game works. Same thing happened when WinForms was taken over by WPF and then WPF was taken over by SL. Again, this is natural and I have no problems here. The problem with WinRT however is that it requires Win8. At least when WPF replaced WinForms, WPF applications could run on any machine that WinForms apps were running on, assuming the correct .NET version was installed. With SL it was even better because the SL install was tiny and could even run on MACS. But not so with WinRT. We can't just install WinRT on Win7 and start real development today.

So given the lack of XAML choices, what's next? HTML5/ASP.NET of course! When I say HTML5 I also include JS/CSS. For ASP.NET I favor MVC over web forms. Am I happy about this choice? Of course not! Even though I have not done much web development, I have done enough to understand how simpler it is to build applications using win client platforms. But for new systems today, this is the better option in my opinion. We've all heard the rumors about how evil web development is, many true, but recently I did some ASP.NET MVC work and honestly things are ALOT better than they were before. It could be ALOT worse. Regarding JS, it's not that bad. Sure it's not ideal but it's on the developer to write good JS code, even OO JS code. It can be done. Back in the COM days I did alot of VB development so I understand what it's like using limited languages. It is what it is and you make the best of it.

One last thing, regarding item #2 you mention above, anything is possible. At this point nothing really would surprise me. I don't think universal use of HTML on the client would eliminate vendors or competition among them. Maybe I am interpreting this point wrong. We would still vendors to provide the best HTML development experience possible (designers, controls, etc...). And of course there's the whole server side aspect of web development. Even though HTML is rendered on the client, its production is usually server side, so vendors can still compete there. On the JS side, vendors like MS ****REALLY***** need to improve their JS code editors. Just because the language allows you to do crazy things does not mean we want to. For example we need VB "option strict" and "option explicit" equivalents. Etc... So even with HTML client there's still plenty of room to fight and make money...

Just my not very thoughful ramblings....
Giancarlo Aguilera
Friday, April 27, 2012 7:49:21 PM (Central Standard Time, UTC-06:00)
Giancarlo - I can't argue with your logic about not using XAML (WPF, SL, WinRT, whatever) if you're primary audience is not within a corporation's network. But for many in a Windows-based corporate environment, XAML still makes great sense even if it isn't likely to receive any more updates from MS. It is now stable and provides an extremely rich and productive environment in which to build apps. I, too, like what I've seen recently as I've started taking a look at ASP.NET MVC (with HTML5/Js). But not every corporation needs to build *all* of their enterprise apps in HTML. Have a particular app that someone would like to use on their mobile device? Then use ASP.NET MVC with jQuery Mobile or something similar.
Tim
Monday, April 30, 2012 7:50:59 AM (Central Standard Time, UTC-06:00)
I will dare to make a few predictions:

Microsoft has currently overpriced development and hosting tools (regarding the current state (say, the expansion) of free and open-source technologies and frameworks). Companies developing with free technologies (JS, PHP, MySQL...) can make better offers than MS companies, so the market will eventually tell.
They've caught Steve Job's message about "HTML5 as the future of development", but unfortunately didn't get those about cheap apps for everyone (even developers-developers-developers).

I suspect, in a few years from now we will barely mention some of today's technologies, because it was always so with the clash of the giants (VHS vs Betamax etc.)
There will definitely be a winner in this, and we have to choose it wisely - it's the meter of our carriers.

Also, there are technologies not mentioned here.. Although some of them have been owned by companies that have a history of pretty poor decisions.. Some other companies are superb in decision making, but with low browser penetration. That should eventually change...

Also, I suspect that in a year or so - after the HTML5 bubble explodes - people will become honest to themselves, and admit they need "something stronger" in the means of performance. So the state of available browser plugins will be re-scanned.

I know, maybe it's too hard to tell what technology will win. So, perhaps the best solution would be to learn them all ;)

Oh, forgot to tell that I am a .NET developer, as well as Javascript, Actionscript, Flex, Unity and PHP developer.

Danko Kozar, SW architect
Comments are closed.