Jeremy Keith在 Fronteers 2010 上的主題演講 下載PPT(PDF) 觀看視頻 今天我想跟大家談一談HTML5的設計。主要分兩個方面:一方面,當然了,就是HTML5。我可以站在這兒只講HTML5,但我并不打算這樣做,因為如果你想了解HTML5的話,你可以Google,可以看書,甚至可以看規范。 實際上,確實有人會談到規范的內容。史蒂夫·福克納(Steve Faulkner)會講HTML5與可訪問性。而保羅·艾里什(Paul Irish)則會講HTML5提供的各種API。因此,我今天站在這里,不會光講一講HTML5就算完事了。 說老實話,在正式開始之前,我想先交待清楚我所說的HTML5到底是什么意思。這話聽起來有點搞笑:這會子你一直在說HTML5,難道我們還不知道什么是HTML5嗎?大家知道,有一個規范,它的名字叫HTML5。我所說的HTML5,指的就是這個規范。但問題是,有些人所說的HTML5,指的不僅僅是這個規范,還有別的意思。比如說,用HTML5來代指CSS3就是一種常見的叫法。我可不是這樣的。我所說的HTML5,不包含CSS3,就是HTML5。 類似的術語問題以前也有過。Ajax本來是一種含義明確的技術,但過了不久,它的含義就變成了“用JavaScript來做一切好玩的東西”。這就是Ajax,對不對?今天,HTML5也面臨同樣的問題,它本來指的是一個特定的規范,但如今含義卻成了“在Web上做一切好玩的事。”我說的不是這種HTML5,不是這種涵蓋了最近剛剛出現的各種新東東的HTML5。我說的僅僅是規范本身:HTML5。 剛才已經說了,我今天想要講的內容不多,也沒有打算介紹HTML5都包含什么。今天我要講的是它的另一方面,即HTML5的設計。換句話說,我要講的不是規范里都包含什么,而是規范里為什么會包含它們,以及在設計這個規范的時候,設計者們是怎么看待這些東西的。 設計原理 設計原理本質上是一種信念、一種想法、一個概念,是你行動的支柱。不管你是制定規范,還是制造一種有形的物品,或者編寫軟件,甚至發明編程語言。你都能找到背后的一個或者多個設計原理,多人協作的任何成果都是例證。不僅僅Web開發領域是這樣。縱觀人類歷史,像國家和社會這樣大規模的構建活動背后,同樣也有設計原理。 就拿美國為例吧,美國的設計原理都寫在了《獨立宣言》中了。
我們認為這些真理是不言而喻的,人人生而平等,造物主賦予了每個人不可剝奪的權利,包括生存、自由和追求幸福。
這里有一句口號:生存、自由和追求幸福。這是被寫進憲法中的核心理念,它關系到我們所有人的一切,也就是我們構建自己社會的原則。
還有一個例子,就是卡爾·馬克思(Karl Marx),他的著作在20世紀曾被奉為建設社會主義的圭臬。其基本思想大致可以歸結為下面這條設計原理:
各盡所能,各取所需。 |
這其實就是一種經濟體系背后的設計原理。
還有一個例子,比前面兩個的歷史更久遠一些,不過大同小異:
人人為我,我為人人。 |
這個極為簡單的設計原理,是兩千年前的拿撒勒猶太人耶穌基督提出來的。而這條原則成為了后來許多宗教的核心教義。原理與實踐有時候并不是同步的。
下面是小說中的一個例子。英國小說家喬治·奧威爾(George Orwell)筆下的《動物莊園》,就是在一條設計原理的基礎上構建起來的虛擬社會。這條設計原理是:
四條腿的都是好人,兩條腿的都是壞蛋! |
《動物莊園》中有意思的是,隨著社會的變遷——變得越來越壞,這條設計原理也跟著發生了改變,變成了“四條腿的都是好人,兩條腿的就更好了。”最關鍵的是,即使是在虛構的作品里,設計原理都是存在的。
還有一套虛構的作品是以三條設計原理為基礎構建起來的,那就是美國著名小說家艾薩克·阿西莫夫(Issac Asimov)的機器人經典系列。阿西莫夫發明了機器人學這個術語,并提出了機器人學三大法則,然后在這三個簡單的設計原理基礎上創作了一系列經典作品——大約有50本書。無論作品的情節如何變化,實際上都是從不同的角度來闡釋這三大設計原理。我想,在座各位對機器人三大法則都不應該陌生。
機器人不得傷害人類,或袖手旁觀人類受傷害。 機器人必須服從人類命令,除非命令違反第一法則。 機器人必須自衛,只要不違背第一和第二法則。 |
這些恐怕是第一次出現在小說中的針對軟件的設計原理了。雖然基于這三個設計原理的軟件運行在虛構的機器人的“正電子腦”中,但我想這應該是軟件設計原理的事實開端。從此以后,我們才看到大量優秀軟件背后的設計原理。
瀏覽器反倒無所謂了。假設我寫的是HTML 3.2文檔,文檔開頭寫的是HTML 3.2的doctype。而在文檔中某個地方,我使用了HTML 4.01中才出現的一個元素。瀏覽器會怎么處理這種情況?它會因為這個元素出現在比doctype聲明的HTML版本更晚的規范中,就不解釋呈現該元素嗎?不會,當然不會!它照樣會解釋呈現該元素,別忘了伯斯塔爾法則,別忘了健壯性。瀏覽器在接收的時候必須要開放。因此,它不會檢查任何格式類型,而驗證器會,驗證器才關心格式類型。這才是存在doctype的真正原因。 而按照HTML5的另一個設計原理,它必須向前向后兼容,兼容未來的HTML版本——不管是HTML6、HTML7,還是其他什么——都要與當前的HTML版本,HTML5,兼容。因此,把一個版本號放在doctype里面沒有多大的意義,即使對驗器證也一樣。