2013-03-13-html5设计原理

今天看了一篇文章,是Jeremy Keith在 Fronteers 2010 上的主题演讲
(http://adactio.com/articles/1704/)的全文翻译
(http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html)。

这是一篇很好的文章,因为里面主要讲的是设计原理,
(文章开头就提到“设计原理本质上是一种信念、一种想法、一个概念,是你行动的支柱。”)
而且有很多很有意思的设计原理方面的格言:
1.美国的设计原理:
我们认为这些真理是不言而喻的,人人生而平等,
造物主赋予了每个人不可剥夺的权利,包括生存、自由和追求幸福。
We hold these Truths to be self-evident, that all Men are created equal,
that they are endowed by their Creator with certain unalienable Rights,
that among these are Life, Liberty and the pursuit of Happiness.
2.卡尔·马克思的社会主义设计原理:各尽所能,各取所需。
Karl Marx’s design principle for socialism:
From each according to his ability, to each according to his need.
3.圣经:人人为我,我为人人。
Jesus Christ: Do unto others as you would have them do unto you.
4.动物庄园设计原理:四条腿的都是好人,两条腿的都是坏蛋!
Animal Farm’s design principle was: four legs good, two legs bad.
5.阿西莫夫机器人三大法则:
机器人不得伤害人类,或袖手旁观人类受伤害。
机器人必须服从人类命令,除非命令违反第一法则。
机器人必须自卫,只要不违背第一和第二法则。
Isaac Asimov three laws of robotics:
A robot may not injure a human being or,
through inaction, allow a human being to come to harm.
A robot must obey any orders given to it by human beings,
except where such orders would conflict with the First Law.
A robot must protect its own existence as long as such protection
does not conflict with the First or Second Law.
6.伯斯塔尔法则:发送时要保守;接收时要开放。
Postel’s Law: Be conservative in what you send; be liberal in what you accept.
7.html5: 避免不必要的复杂性。
html5: Avoid needless complexity.
8.html5: 支持已有的内容。
html5: Support existing content.
9.html5: 解决现实的问题。
html5: Solve real problems.
10.html5: 求真务实。
html5: Pave the cowpaths.
11.html5: 平稳退化。
html5: Degrade gracefully.
12.梅特卡夫定律:网络价值同网络用户数量的平方成正比。
Metcalfe’s Law:
The value of a network is proportional to the square of the number of connected users of the system.
13.html5: 最终用户优先。
一旦遇到冲突,最终用户优先,其次是作者,其次是实现者,
其次标准制定者,最后才是理论上的完满。
html5: Priority of constituencies.
In case of conflict, consider users over authors
over implementors over specifiers over theoretical purity.
14.因此,我认为无论你做什么,不管是构建像HTML5这样的格式,
还是构建一个网站,亦或一个内容管理系统,明确你的设计原理都至关重要。
软件,就像所有技术一样,具有天然的政治性。代码必然会反映作者的选择、偏见和期望。
So I think that whatever you’re doing, whether it’s building a format like HTML5 or
whether it’s building a website, whether it’s building a content management system,
having design principles is really really useful.
Software, like all technologies, is inherently political.
Code inevitably reflects the choices, biases and desires of its creators.
15.马克·博尔顿和丽莎·雷贺特的设计原理:
简化最常见的任务,让不常见的任务不至于太麻烦。
只为80%设计。
给内容创建者最大的权利。
默认设置智能化。
Mark Boulton and Leisa Reichelt’s four design principles:
Make the most frequent tasks easy and less frequent tasks achievable.
Design for the 80%.
Privilege the Content Creator.
Make the default settings smart.
16.微格式的设计原理:首先为人类设计,其次为机器设计。
Microformats’s design principles: Design for humans first, machines second.
17.互联网哲学:大多数人的意见和运行的代码。
Internet Philosophy:Rough consensus and running code.

我的观点:
我感觉设计原理是一种接近哲学的概念,虽然我以前没有仔细想过设计原理这个概念,
但是直觉告诉我这是一个很重要的,长久以来被我忽略的概念,
而且了解和思考这个概念必将对我的未来产生很大的影响。
下面是我对上面那些设计原理的一些看法,
当然我不可能一一铺开去讲,因为每一条原理都能铺开成一篇文章甚至一本书。
a. 关于美国的设计原理。其实之前看经济学的时候我就研究过这句话。
从某种角度讲,生存,自由和追求幸福的权利是相互重叠的。
这三条其实对应了生命权,自由权和财产权。这三条可以归并成一条,就是自由权。
因为我认为自由权就包括了你有权自由的支配自己的生命和合法财产。
这就是为什么我一直很强调自由权的重要。
这里合法财产也是一个很大的课题,我倾向于奥地利学派的观点。
b. 关于马克思的社会主义想法。历史已经证明了他的观点只能是一个美好的愿望。
因为人与人之间本质就不是相同的,这里的本质我是指的欲望,能力等等方面的不同。
而且人有天生的惰性,天生就想不劳而获,各取所需注定是一句空话。
有的人可能会相信马克思主义者的辩护,
“现在不可以,但是生产力发展到物质极度丰富的时候就能实现各取所需了。”
他们没有想到的是生产力发展会带来欲望的提高,
也就是各取所需中的“需”会提着生产力发展而提高。
比如十年前的人不可能有要iphone的需求,但是到现在这只是一个很普通的需求。
c. 关于人人为我,我为人人。这一条原理也存在问题。
问题就在于这个人人为我和我为人人有没有报酬,也就是用不用付钱。
如果付钱,那就是市场交易,整个经济学都是建立在这个基础上,互通有无,交换提高双方的幸福度。
如果不付钱,那就是宗教了。宗教鼓励我为人人,这样自然而然就会人人为我。
但是其中的问题是每个人都人人为我多一点,我为人人少一点,能占便宜就占便宜。
这是天性,由基因决定的,无法改变。
因为那些整天想着我为人人的物种或者个体已经被进化所淘汰了。
所以人人为我,我为人人这种宗教机制用来作为社会的缓解矛盾的缓冲器还可以,
如果想用它来作为整个社会的基础,那它就跟马克思主义没有分别了,注定是行不通的。
d. 关于机器人三大法则。我之前看过阿西莫夫的小说,
小说很精彩,但是现实中我觉得至少现在是没有办法让机器人来遵守三大法则的。
而现实中的机器人已经可以做很多事了,美国甚至已经研制出了用来杀人的机器人。
不知道这是不是一件的可怕的事。
e. 关于html5的几条设计原理。我觉得这些原理不仅仅对html5的设计有用,
对任何程序的设计都是有用的。比如发送时要保守;接收时要开放。比如避免不必要的复杂性。
比如支持已有的内容。还有解决现实的问题。
f. 关于求真务实(Pave the cowpaths.)。
我认为这个翻译其实不太准确。我觉得应该翻译成承认既定事实。
我以前在关于美国的历史上立法过程的文章中就看到过这种原理。
这里面的逻辑其实是最终的用户自己就会产生一种解释问题的方案,
不论是争论法律争端还是解决html中的问题,用户是最先接触问题的人,
所以最有可能想出解决问题的方法。立法者或者标准制定者只要择其善者而从之就可以了。
g. 关于平稳退化。
其实我觉得平稳退化,支持已有内容和接收时要开放可以归为一条,保持连续性。
h. 关于最终用户优先。
其实这一条与求真务实有相通之处,都是要把最终用户放在优先的位置。
我觉得这一条用在公司管理里面也是对的,一个成功的公司一定是解决了用户的一种需求。
所以一定要把用户放在优先的位置,公司内部越接近客户就越重要。
老板作为规则制定者要把自己摆在最后,尊重支持比自己优先级高的人,
如果发现优先级高的人产生了对用户有用的方案,那就推广它,把它制定成标准。
i. 关于代码有政治性。
我有体会,因为有些人的代码只是为了解决问题,不去考虑性能,扩展性,代码是否简洁这些问题,
而另外一些人力图把代码模块化,简洁优雅。我以前觉得这只是代码风格和编码素质的问题。
现在仔细想想其实这些区别反映了代码作者的设计思想甚至价值观,有的作者只是为完成任务,
而另外一些作者是为了创造自己的作品甚至想到把代码共享出去造福社会。
j. 关于马克·博尔顿的几个设计原理。
以前没有意识到设计原理的重要性,所以我也没有总结归纳自己的设计原理。
现在看来我要开始留心总结归纳自己的设计原理了。我直觉中想到的有这么几条:
一.要模块化。二.要简洁。三.要有连续性。四.要有统一的风格和清楚的注释。

发表评论