I will use the term hard programmers here to describe people with background in server-side development and compiled languages like C++ and Java, who have never been involved in real web development. I first stumbled across this term when I was reading the book ppk on JavaScript.
Being surrounded by hard programmers myself, I found that describing all the specifics, processes and tendencies of web development to them is a challenging task. There are fundamental differences how traditional and web applications work. If you do not believe me, look at two questions that looks akward for web professionals, but are commonly asked by hard programmers:
- When will HTML5 be ready?
- Is it possible to use HTML5 and CSS3 when the browsers do not support it?
There are many variants of these questions, but basically, all of them regard the lack of features in browsers, something that web professionals know how to overcome. Hard programmers, however, do not face such a problem in other environments, where something either is working and can be used, or is not working and cannot be used at all.
So here are several points you should mention in front of hard programmers to explain how the Web works:
HTML5 and CSS3 are modular - each module has a separate life
What modular means in this case is that there are separate specifications for the different features and each of them is in different state (draft, recommendation, etc). Same goes for the implementations. While one feature may be very popular in mass media and thus implemented well even in early draft (2D Transformation being a good example), other may lack support in any browser today.
Having in mind the big competition between the browser vendors, waiting for all the specifications to become recommendations is not possible. Moreover, no one knows what "all the specifications" means. A new draft, for example, may be released tomorrow. This is an ongoing process. New features are continuously proposed. Not believing again? Look at css4 selectors, Fullscreen API, or the proposition about simplifying element creation.
This environment differs from Java SE, for example. When JDK 7 is released, you have all the features ready to be used. No partial implementations, no hacks to triggers a feature, no vendor prefixes.
Web apps do not need to behave the same in each platform
If this or this are not enough for you, here are some additional arguments in a form of examples:
- The Google Docs application has an offline mode. Does it work in old browsers? No. Does Google care? No. The core functionality - to work online with documents, is always there. The offline mode is an enhancement for users that use modern browsers.
- Twitter home page uses many CSS3 effects (shadows, rounded corners, opacity). Do these effects work in old browsers? No. Does Twitter care? No. The core functionality - to identify the brand and to log-in/register is always there. CSS3 is only an enhancement for users that use modern browsers.
Building applications with basic technologies while enhancing with features for advanced browsers is a tendency in web development which will never vanish. Hard programmers get to this paradigm very slow because there is no analogy with traditional application development, where everything should work the same in each platform.
Paul Boag has made a great document on how to explain the need of progressive enhancement to our clients. This might very well work for hard programmers too.
JavaScript is dynamic - it can implement features that lack support
An example that I really like because it shows the conceptional differences between JavaScript and other languages hard programmers are used to, is the following: in Java, you cannot use generics if you want to compile in Java 4. And you cannot define it. In JavaScript, you can implement generics in a browser that do not support it and still use it.
For a real example, localStorage can be implemented on top of other storage mechanisms that is available in the browser (IE userData, Flash Shared Object, Cookies...). And you will still use the localStorage API as if it is available in the browser.
For a concrete application, see diagram.ly, which relies on SVG, but also works in IE7.
HTML and CSS are not programming languages, but it helps to treat them as if they are
Although hard programmers are aware of the best practices to write source code, my observations on their markup and front-end code are discouraging. They copy-paste a lot of HTML, CSS and JavaScript handlers written directly in the markup and they don't have any clue that this code should also be organized or that some principles should be followed.
If you are a web professional who has to work with hard programmers, explain to them that HTML and CSS are also source code and make them think about these technologies as programming languages. That may help to trigger some sense to follow best practices.
Final Note
I recently helped my colleague Plamen Todorov to create this excellent presentation about why should we care about html5, css3 and JavaScript. Since Plamen is more concentrated on JavaScript, there are less arguments and links for html5 and css3, but still it's a very strong research regarding the latest tendencies.