什么是渐进是增强呢?让我们为开放标准的Web做出一份贡献吧!

今天面试前端开发,令我相当不满意。称自己是前端开发,5年以上的工作经验居然说不清楚em、pt、px的意义(是她自己提出了这些单位,简单的给我解释为相对与绝对,我问她区别就打马虎眼……),也完全说不清楚一个自适应两栏布局的实现思路。和我说了一堆交互设计的观点,我的感觉就是经验有一点,不过思路完全是混乱的,一点逻辑都没有。作交互的看看UCD的文章很好,但是如果仅仅限于凑热闹那么就没有意义了。好比一个注册设计,说了太多种不同的观点,但是她依然没有说出如果做一个设计的所以然。实际上作为交互设计显然需要根据需求和客户类型做设计,然后应该有思路,有感觉,做出初步的设计后要通过一些用户调研的手段来取得有效的反馈。这仅仅是交互设计或者开发工程师达到工匠要求的一个基础,要想进阶一些那需要很多的设计感觉的。所以,像我这样的傻傻的程序员出身的前端并不要求你马上让我看到你对设计的强悍感觉(sense),起码你让我知道你是一个有思路有方法的人吧。

今晚看到淘宝的小马(泽新)同学的一篇博文:http://ued.taobao.com/blog/2009/06/24/web_dev_improve
写的挺好,是在说我们国内一些前端开发的朋友还在讨论基本的问题,我认为犯这样的错误主要是对Web标准的认识还是太浅显了。上周末我在Beijing Open Party上面临时救场(因为这次话题意外的没有达到9个),我讲的是《什么是渐进增强/如何渐进增强》。这里面没有太多具体的技术,主要是强调HTTP作为Web的支撑,是如何演化出了HTML、CSS、Javascript这三大法宝的。HTTP解决了我们构建一个相互联系在一起的对资源的不同表现(Representation)进行沟通的网络(Web),它解决了我们如何查询和定位资源的不同表现(Restful),以及如何修改这些资源的操作方式。因为它是资源的不同表现,所以实际上它是具有逻辑的数据访问层的一种新的抽象(如数据库+存储过程),这个观点是徐昊同学提出(告诉我)的。如果加上语义网的逻辑推演能力,那么这个数据表现的网络就可以成为智能网络,也就是语义网的概念。也就是说HTTP实际上是一个身肩重任的技术。而在目前阶段,这些非智能的网络的资源表现已经足够被人类直接消费了,那么为了服务它,HTML、CSS、Javascript这些技术也就顺理成章的出现了。他们三剑客要解决的是关注点分离,让我们从数据结构(Representation)、表现、行为方向去帮助人类能够直接消费的HTTP上面的资源。

说到这个东西总是扯远,但是如果理解到了这个层面,我们知道原来这些技术技术是一个分层的结构,它要解决一个巨大的问题,但是却需要走一个漫长的路程,做到每一层都有所受益。从Restful本身来说它可以是一个计算机消费的资源访问API(里面可以封装Business logic),交换数据应该使用一个结构化的格式,HTML是一种天然的选择。如果作为阅读,人类需要美观的外表和帮助交互的行为,这些是CSS和JS应该去解决的。在这些内容具备以后我们就可以用语义网的推演能力实现数据之间的语义交互,那么就真的是道法自然了。这样的一个逐级实现伟大目标的过程我们就可以称为“渐进式增强”,也就是Progressive Enhancement。上周末的Session我就是从这个角度出发神侃了1个小时的,期间插播了各种渐进式增强所需要注意的最佳实践,他们都是为了我们光荣而伟大的目标而服务的。如符合语义的HTML tag,与资源表现(消费与解析)密切相关的Micro formats,在micro formats理念驱动下的css selector设计,最小化的css selector权重设计和复用,Rails 3.0的行为声明DSL化改造(如使用JQuery时常用的$(‘符合micro formats元素的css selector’).hasSomeBehavior()的声明),传统Rails RJS的缺点,开始使用HTML的新增tagName作为class渐进等等。我不想在这里重复,那天的内容没有提前准备,所以有点天马行空……所有的这些看似风马牛不相及的最佳实践实际上都没串到了渐进式增强实现终极目标的这个过程。我们看到现在桌面应用中微软的WPF也从Web的结构中吸取了经验,提供了一个结构、行为、表现分离的模型,而Flash所用的MXML+ECMAScript+CSS也是这个路子。

因为这个博文毕竟是个牢骚帖,所以我不想在这里阐述什么是渐进式增强,也许以我的能力根本说不清。我计划着用更多的时间多分几次分别讨论相关的话题,这里只是个开始。

回到关于小马的那个讨论大家要不要那么温和的问题上,我希望我们还是放弃那些中庸,站到几年以后的Google的技术桟上面。我相信,如果Google推动Webkit成功的话,那些药不用Table实现一个透明边框的Facebook对话框的问题就根本不是个问题了。工程就是工程,我会妥协去用Table,我会做很多Work around,可是,可以折腾的时候我一定要折腾一下,推动那个理想的实现。

这个是在小马帖子上面的回复:

HTML要解决的是结构,所以我们压根不用考虑太多到底用哪一种标签来布局。因为标签本来就不是布局的。如果Web是一些数据的表现的状态转移,那么我们在HTML的各种标准需要找到的是数据的筋骨本身。在XHTML1.x的成熟和HTML5的初露端倪的时候,我们已经可以开始幻想YAML、JSON、HTML作为数据源的标准表示方式了,那些表现我们还是继续留给那看似不完美却已经足够强大的CSS吧。偶尔,我们做些妥协,所以我们决定的不妥协正是对基于开放标准成为主流所贡献的一份力量。

那么,我们不要讨论HTML5什么时候会实现了吧,我们现在就开始为基于开放标准的语义化Web做出一份贡献吧!

One thought on “什么是渐进是增强呢?让我们为开放标准的Web做出一份贡献吧!”

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.