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