(Preface: This post is my opinion only. It represents some thoughts I’ve had rolling around in my head for a while. To free up some space in my brain, I’m draining this thought pool now. I’m in no way trying to tell anyone what’s “right†or “wrongâ€â€”those are decisions based on your own set of circumstances. I could be totally wrong here. Wouldn’t be the first time, won’t be the last time. Feel free to leave polite comments.)
Since last October I’ve been giving a talk on using jQuery in a Metro JavaScript application. It’s been well attended and well received, and it gave me a good opportunity to work with Win 8 through its various releases. After we first finished the sample, I sat there and thought “that’s cool, but who would do this?†Let me explain.
It’s not that I think Metro is going to flop. I don’t—I think consumers, especially those with a Win 8 tablet, will go nuts for Metro apps. Enterprises overall will be slower to adopt Metro, but you can bet we’ll see the best of the best as we approach RTM and GA. I just think most of the Metro apps will be written in XAML, not JavaScript. Microsoft did a fine job with the capabilities of WinJS libraries (especially feature parity between XAML and JS), and when combined with the tooling, Metro JS app development is relatively painless. I proffer two reasons why I feel adding a JavaScript option isn’t as important as it first seemed.
First, there are far fewer web devs in the world than people think. Most of us who call ourselves web devs actually are writing native applications, the UI of which is merely a final output which is displayed in a browser. Most of us have a heavy reliance on a server side framework, be it ASP.NET, Ruby, PHP, Java or whatever. In Metro apps, there is no server framework available to us. I consider “pure†web development to be based on client side Ajax calls and DOM manipulation, coupled with SOA, which is the architecture of a Metro JavaScript app. Ironically, some of the “purest†“web development†you would ever do is writing a native Windows (Metro) app.
Secondly, I’m of the opinion that web devs don’t write native apps not because they can’t, but because it offends the sensibilities that their app won’t (at least in theory) run everywhere. It’s not enough that an app will work on all Windows machines—there are Macs, Linux, tablets and (with a little extra work) smartphones out there. One codebase to rule them all! Remember, web devs obsess over a 1 pixel difference in how FireFox and IE render inputs. To us, the browser is the OS, and is the device. We care not whether Chrome is running on Mac, Windows or Linux (as Chromium). In fact that’s what we find appealing. While an attractive option at first, I think the realization that these are OS-specific apps will slow the adoption of Metro JavaScript.
None of this is not to say that there won’t be some great JavaScript apps produced for Windows 8. There will be. I’m just of the opinion that over time the numbers will favor XAML apps.