The WebApp developer paradigm
With the adoption of HTML5 and CSS3 in mobile browsers, WebApp development is a serious alternative to native App development. I have spoken about this topic with many people with different backgrounds; native app developers, web developers, server developers, marketing and project managers, etc. One alleged advantage of the adoption of WebApp development that gets mentioned very often is that existing web development know-how can be leveraged. I believe this is a myth, and I’ll explain why:
Web Application vs Web Page
What is the difference between a web application and a web page? The boundaries between web apps and web pages are sometimes blurry, however I believe it is safe to use the following definition:
A web application focuses on functionality, whereas the web page focuses on content presentation.
From a development perspective these are fundamentally different approaches. A [mobile] web page focuses on content presentation. Normally, the logic of the web site it is part of is implemented on the server. The web page contains JavaScript, but it is used mostly for UI effects, input validation and asynchronous data loading. Tasks are mostly form based and often split across several pages.
A [mobile] web app follows a different approach, it is designed to provide a certain functionality. It uses JavaScript to implement the main applications logic on the client side, uses a different set of UI elements, and does client/server communication only to send/retrieve raw data. The more a web app is tailored to handle one specific task optimally the better.
JavaScript Is Not Easy
As mentioned above, the use of JavaScript in traditional web pages is often reduced to small code snippets that handle input validation, dynamically manipulate the DOM in order to create nicer UI effects, or doing AJAX calls to load asynchronous data. Most of these tasks can be made even easier to the web page developer with the use of a JavaScript framework like Dojo or jQuery.
All this has led to the assumption that JavaScript is easy. After all, you can do cool stuff with just a couple of lines of code. While this might be true for web page development, it certainly is not for web app development. In order to understand why not, I will analyze a couple of concepts that are deemed to be important and state-of-the art in professional software development.
- Object Orientation. It is a widely accepted fact that object orientation helps reusing code, applying patterns and generally making software development faster. Also, less code has to be written in comparison to non-OO languages, so it also increases productivity while it helps improving quality. JavaScript supports class-free, prototypal object orientation. This kind of OO is quite different from traditional OO like the one found in Java and C++. Traditional web developers will have a steep learning curve when learning OO from scratch. Existing developers used to traditional OO will have to learn how prototypal OO works. Getting into the details of prototypal object orientation is far beyond this article. I suggest following the link above for an introduction to the subject at wikipedia.
- JavaScript is loosely typed. This means that you don’t have to specify the data type you are working with. The JavaScript interpreter (i.e. the browser) automatically converts between data types during the script’s execution as it sees fit. For developers used to Java/C++ this is quite a paradigm shift. For web developers, this feature will seem to reduce complexity in the beginning. However, lose typing is error-prone and forces you to learn the conversion rules by heart.
- Special features. JavaScript has a couple of special features that might seem cumbersome to both traditional OO developers and web developers. With scoping and closures being two prominent examples. I will not get into the details of these two, instead, please check the following links to get a clearer picture:
What You Need To Know About JavaScript Scope
JavaScript Closures - Browser differences. If you have been doing web development for a while you will know what this is about. Each browser implements JavaScript with slight differences. These differences can make life very hard to JavaScript developers. Sometimes there is no way around some of these problems other than providing separate program flows for different browsers. Please visit quirksmode.org for details of browser differences.
As I hope to have proven in the points above, JavaScript is not an easy language for neither web nor native app developers. Both groups will have a steep learning curve to take before being able to develop real-world applications in JavaScript, making use of it’s features.
The UI Problem
One last thing I’d like to point out is the UI problem. Let’s get back to our definition of a web app and a web page. Web pages are designed for presentation. Web apps are designed for functionality. If you think about a web page and it’s elements, you will most probably think about concepts like navigation, links, tables and forms. If you do the same with an app, you will probably come up with buttons, panels, textfields, toolbars and menus. Can you see the difference? A UI concept for information presentation is quite different than the concept for task-oriented functionality.
Traditional developers are less affected by this problem, as the platform they develop for most probably already offers a consistent UI framework. (SWING for Java, WPF for C#, Cocoa for objective-C, to name a few). The same applies for web developers. HTML defines a set of elements that web pages can render. A lot of libraries exist for the server part of a web page to handle these elements.
There is no standard web app UI framework that works like a native, object oriented UI framework as of today. However, there are very promising projects that a web app developer can use today, two of which I’d like to point out:
While qooxdoo is rather targeted at desktop web app development, Sencha Touch was made specifically for mobile devices. Both are good choices for web app development. However, they impose another hurdle in the already steep learning curve for potential web app developers. A certain familiarity with JavaScript is also required for both frameworks in order to understand the concepts and make the best possible use of them.
Conclusion
As I have shown above, web app development cannot be taken lightly. It is not safe to assume that existing web development know-how can be leveraged in a short time. Web app development has its own profile, which both web developers and native app developers do not entirely fulfill. There is a steep learning curve associated with becoming a web app developer, regardless of the developers background. However, I believe it is worth the effort. Web app development is certainly to become a key skill, especially with the adoption of HTML5 and CSS3 in more and more desktop and mobile browsers. With rich and native-like JavaScript frameworks like Sencha Touch and qooxdoo, web app development has already done a huge step in the right direction. I’m looking forward to seeing a lot of great web apps come up in the near future.

I agree with you that Web page developers will not, in general, be well-prepared to develop Web apps. However, Java developers with experience developing desktop applications can make the transition to Web app development by using Google Web Toolkit (GWT) to cross-compile their Java code into client-side Javascript that is automatically generated in separate permutations for each of the major browsers.
There’s still a learning curve, but this approach addresses your items A, B, C and D above by allowing code to be developed and maintained in Java, with much less attention required toward accomodating the various browsers and their quirks.
GWT renders less relevant the skills of a Web site developer in overcoming browser quirks, and moves the UI away from hand-coded HTML and toward libraries of pre-programmed widget objects. CSS is still important, and would be an advantage for someone with a Web development background over someone with OOP native app development skills. But CSS is a lot easier to learn than OOA/D/P.