——69年圖靈獎(jiǎng)演講讀后感
作為第四屆圖靈獎(jiǎng)得主,AI奠基人之一的Marvin,他發(fā)表的演講主題是關(guān)于形式和內(nèi)容的討論。他的主論調(diào)就是內(nèi)容要強(qiáng)于形式,而且我們目前過(guò)分關(guān)注了形式而導(dǎo)致計(jì)算機(jī)的發(fā)展軌跡產(chǎn)生了偏差。
他的觀點(diǎn)一經(jīng)發(fā)出就引來(lái)了諸多的爭(zhēng)論,有支持也有批判。本著辯證唯物的觀點(diǎn),我的看法是,有選擇的接受。我的觀點(diǎn)是:計(jì)算機(jī)理論的發(fā)展需要形式化,然而計(jì)算機(jī)軟件應(yīng)用則應(yīng)該更加關(guān)注它的內(nèi)容實(shí)質(zhì)而非形式。
論文中他主要從計(jì)算理論、編程語(yǔ)言、計(jì)算機(jī)教育三個(gè)方面論述了作者的觀點(diǎn)。在編程語(yǔ)言方面,Marvin強(qiáng)調(diào),編程語(yǔ)言要足夠智能,使得程序員更加關(guān)注于實(shí)際的邏輯而非語(yǔ)言細(xì)節(jié)。縱觀計(jì)算機(jī)編程語(yǔ)言的發(fā)展方向就會(huì)發(fā)現(xiàn)他的語(yǔ)言之準(zhǔn)確,這或許正是一個(gè)大師的真正高深之處。計(jì)算機(jī)語(yǔ)言的發(fā)展大致軌跡,即從面向結(jié)構(gòu)的到面向?qū)ο蟮?,再到后?lái)的面向方面的,其中的主軸線,就是解放程序員,使得程序員擺脫掉語(yǔ)言本身的細(xì)枝末節(jié)。
首先,計(jì)算機(jī)理論的發(fā)展需要形式化。無(wú)論是計(jì)算機(jī)還是土木工程生物等等,都需要很深的理論基礎(chǔ)來(lái)證明它的正確性、合理性和完備性。而形式化就是這一證明的最有力的工具。數(shù)學(xué)是一切科學(xué)的基礎(chǔ),它的威力不僅僅在于它嚴(yán)謹(jǐn)?shù)淖C明為各項(xiàng)科學(xué)提供了有力的理論基礎(chǔ),而且數(shù)學(xué)的推演能夠?yàn)檫@些科學(xué)的發(fā)展提供可信并且極為有用的預(yù)言。比如對(duì)于程序的并發(fā)性的研究,如果單純的實(shí)驗(yàn)并發(fā)程序的行為,即使通過(guò)大量的長(zhǎng)時(shí)間的測(cè)試也很難發(fā)現(xiàn)其中的一些規(guī)律;但是如果我們將它的行為形式化為Petri網(wǎng)的形式,通過(guò)從數(shù)學(xué)的角度研究Petri網(wǎng)的規(guī)律,會(huì)對(duì)實(shí)際的并發(fā)行為研究提供更多、更精確并且更有意義的指導(dǎo)。
其次,計(jì)算機(jī)的應(yīng)用需要更加關(guān)注于內(nèi)容而并非實(shí)質(zhì)。我所在的專業(yè)為計(jì)算機(jī)軟件與理論。我對(duì)于這個(gè)學(xué)科的理解就是,它是介于應(yīng)用和計(jì)算機(jī)科學(xué)之間的一個(gè)學(xué)科。具有一定的編程能力成為每一個(gè)學(xué)生的必備技能,而且成為了一種共識(shí)。這種觀點(diǎn)的本身是沒有錯(cuò)誤的,但是過(guò)分強(qiáng)調(diào)編程能力導(dǎo)致了兩個(gè)極為嚴(yán)重的后果:
1、 學(xué)生片面強(qiáng)調(diào)編程語(yǔ)言的學(xué)習(xí)而忽略了基礎(chǔ)學(xué)科(主要是算法)的學(xué)習(xí)。從實(shí)驗(yàn)室轉(zhuǎn)一圈,看到最多的是什么C#高級(jí)教程、深度探索C++對(duì)象模型之類的書,精通某門語(yǔ)言甚至成為了某些同學(xué)得以炫耀的資本。去年李開復(fù)先生來(lái)同濟(jì)演講時(shí)曾說(shuō)過(guò):算法是內(nèi)功,語(yǔ)言是外功。所謂的外功,實(shí)際上是說(shuō)語(yǔ)言僅僅是表達(dá)思想的一種工具。從這個(gè)角度上說(shuō),大學(xué)里設(shè)置軟件學(xué)院是非常失敗的,一個(gè)大一就開始學(xué)習(xí)C++和J2EE的學(xué)生的知識(shí)體系是有問題的,他并沒有對(duì)計(jì)算機(jī)的體系結(jié)構(gòu)有很深入的理解與探討。有人說(shuō)“程序員”就是民工,我認(rèn)為,這是對(duì)民工的極大的不尊敬。程序員所作的工作,實(shí)際上是一個(gè)翻譯,把設(shè)計(jì)者的思想翻譯給機(jī)器聽。就像Marvin說(shuō)的,這其實(shí)應(yīng)該是編譯器所作的工作。目前一些機(jī)構(gòu)正在研發(fā)的傻瓜型編譯器也說(shuō)明了這一點(diǎn)。
2、 很多學(xué)生思考問題是從語(yǔ)言的角度出發(fā),而非問題本身出發(fā)。相對(duì)于上一個(gè)錯(cuò)誤,這個(gè)似乎更加嚴(yán)重。舉個(gè)例子,閱讀英語(yǔ)資料的時(shí)候,有兩種閱讀方法:一種是先把它翻譯成中文(即使他沒有手動(dòng)翻譯,但是在頭腦中是這樣做的),另外一種就是類似于Native Reader的方式閱讀。孰優(yōu)孰劣,一目了然。反應(yīng)在計(jì)算機(jī)中,就是這樣一個(gè)問題:從問題本身思考問題和從編程語(yǔ)言角度思考問題。給一個(gè)算法題目,馬上就想存儲(chǔ)結(jié)構(gòu),用鏈表還是數(shù)組,for循環(huán)還是while,int是不是不夠。這是非常錯(cuò)誤的方式!正確的方式是考慮實(shí)際中是如何解決這個(gè)問題的,只有在實(shí)現(xiàn)的時(shí)候才想到數(shù)據(jù)結(jié)構(gòu)之類的問題。所幸之處是,好多人已經(jīng)意識(shí)到了這一點(diǎn),于是最新的技術(shù)都宣稱讓用戶只關(guān)注于業(yè)務(wù)邏輯本身。
作為學(xué)生(計(jì)算機(jī)科學(xué)研究者除外),我們可以從中獲取那些東西呢?我認(rèn)為最重要的一點(diǎn)就是關(guān)注算法,而不要把精力放在語(yǔ)言本身的研究。這里,語(yǔ)言可以看作是形式,而內(nèi)容就是算法。語(yǔ)言是而且永遠(yuǎn)只是一種工具。除非你要開發(fā)編譯器,否則過(guò)分研究語(yǔ)言是一種時(shí)間和精力上的浪費(fèi)。一門最快的語(yǔ)言(C?亦或匯編?)永遠(yuǎn)不可能比一門慢的語(yǔ)言快100倍,但是一個(gè)O(n)的算法卻能輕而易舉地比一個(gè)O(n^2)的算法快1000倍。有人可能從功利的角度(面試,找工作)認(rèn)為語(yǔ)言比算法重要,其實(shí)算法與它并不沖突。設(shè)計(jì)好算法或者業(yè)務(wù)邏輯后,在實(shí)現(xiàn)它的過(guò)程中,會(huì)更好更快地學(xué)習(xí)編程語(yǔ)言;而且這樣不僅僅熟悉了編程語(yǔ)言,而且能夠避免從編程語(yǔ)言的角度思考問題,而是從算法本身、業(yè)務(wù)邏輯本身、事物本身考慮問題。
關(guān)注內(nèi)容,關(guān)注算法,語(yǔ)言只是工具,細(xì)節(jié)只是形式。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。