1
本文作者: 董飛 | 2016-07-25 13:22 |
作者按:Peter Norvig任職于Google,其職位是研究主管(Director of Research). Peter Norvig是享譽世界的計算機科學家和人工智能專家。他是 AAAI 和 ACM 的會員,是業(yè)界內(nèi)經(jīng)典書籍《Artificial Intelligence:A Modern Approach (人工智能:一種現(xiàn)代方法)》的作者之一。在加入Google之前,他曾經(jīng)是NASA計算科學部門的主要負責人,并在南加州大學以及伯克利大學任教。本文前半部分是英國衛(wèi)報的采訪,談到了人工智能、個人計算、地圖服務(wù)諸多領(lǐng)域。后半部分是他談自學編程的態(tài)度,抨擊了一堆想速成投機浮躁的人們。
(via:plus.google)
谷歌研究主管Peter Norvig在文中介紹了他對人工智能、個人計算和地圖服務(wù)諸多領(lǐng)域的看法。文中提供了Peter寫了大量AI筆記的個人網(wǎng)站和公開課視頻地址。Peter Norvig 并不相信計算機能力的增強會把我們帶到奇點。他還認為,至少要花上10年或10000小時才可能學好編程。
首先給一些他的資料,個人網(wǎng)站很酷,里面有大量AI筆記,最有意思的是他曾經(jīng)用Python寫了21 行, 完成一個功能完備的拼寫檢查器。中文由Eric Xu翻譯版本
他還曾經(jīng)TED發(fā)表一個著名演說:容納十萬人的教室,講他創(chuàng)辦在線教育網(wǎng)站 Udacity的故事
他在Udacity開了兩門免費公開課:Design of Computer Programs,Intro to Artificial Intelligence
Google 研究團隊匯聚了業(yè)界頂尖的人才,不過它并一定適合所有人。如果你希望創(chuàng)辦自己的公司,或者希望在小公司工作,并不適合你。除了無人駕駛汽車之外,Google 也不會資助硬件上的研究。
“在內(nèi)部我們?nèi)匀恍枰龀鲞x擇。這里比初創(chuàng)公司更加自由一些:壞的決策不會立刻導致破產(chǎn),但是你不能說,我要做些事情,給我 20 個工程師吧?!憋@然,這涉及到優(yōu)先級的問題,雖然有些優(yōu)先級項目聽起來非常奇怪。
在 60 年代、70 年代的時候,許多重大科技成果來自貝爾實驗室、IBM 沃森研究中心、施樂帕克研究中心(Xerox PARC),它們都研究與公司核心業(yè)務(wù)無關(guān)的技術(shù),而許多發(fā)明都沒有獲得商業(yè)上的成功。對此,Peter Novig 非常了解,他提到了一本 1999 年的書:《探索未來:施樂如何創(chuàng)造、然后錯過了首個個人計算機》。
“書中說他們在探索未來,但他們以某種方式發(fā)明了未來”,他說,“我覺得他們租借了未來。有一天人們能夠買得起 PC,但是我們?nèi)匀粵]有走到那一步,于是拿出 20 萬美元給研究員配備個人計算機,這樣可以看到未來會是什么樣子的。從某種程度上來說,我們在 Google 做的事情也是一樣的”。比如無人駕駛汽車、智能眼鏡,或者使用 1 萬多臺計算機檢查 1000 萬的圖片去識別貓臉。
和上述那些研究中心不同,Google 的研究和公司的其它業(yè)務(wù)是緊密聯(lián)系的。“從某些方面看,我們做的事情很像英特爾,那里的研究團隊會設(shè)法開展新業(yè)務(wù),如果他們做成了某種東西,但其他人從新業(yè)務(wù)中獲得更多利潤,他們并不擔心,只要業(yè)界仍然買英特爾的芯片。我們也是一樣——如果我們發(fā)明了新東西,即使我們不擁有它,只要它能讓兩個人開始使用互聯(lián)網(wǎng),就有可能有一個人會變成我們的用戶。因此,如果我們開創(chuàng)了一個新行業(yè),對我們來說就是成功?!?/p>
無人駕駛汽車、智能眼鏡就是這樣的產(chǎn)品?!拔覀儼阉鼈儺斪鲆延袃?yōu)勢的延伸——汽車是地圖能力的延伸,同樣,眼鏡是通訊和本地服務(wù)的延伸。”
Peter Norvig 的職業(yè)生涯中,人工智能是重要的一個方向,從 80 年代中期開始,他開始研究概率推理和不確定性。這涉及到貝葉斯的理論,當時在人工智能領(lǐng)域,對于這位 18 世紀數(shù)學家的想法仍然充滿懷疑。不過,隨著計算機的發(fā)展,他的理論已經(jīng)獲得了廣泛應(yīng)用。Peter Norvig 說,構(gòu)建一個可用的系統(tǒng)是說服他人的最好方法。
他提到了 Google 翻譯,這個服務(wù)并不是由語言學家開發(fā)的,而計算機學習語言的過程與人類完全不同,它利用的是廣闊的互聯(lián)網(wǎng),從大量的翻譯文檔中學習將不同的語言配對。這和 Google 利用上萬臺計算機辨認貓一樣,屬于模式辨認。
Peter Norvig 并不相信計算機能力的增強會把我們帶到奇點,即人工智能趕上人類智能的時刻。他支持奇點研究院的原因是因為他認為一切都會加速變化,并且會改變社會,人們應(yīng)該意識到這一點,不過,“我最大的擔心是,人們太關(guān)注特定日期了”。我們并沒有處于一個特殊的時間點上,“我們在創(chuàng)造新東西,但是和過去比起來,今天做的并沒有什么不同。”
科技的進步并沒有改變?nèi)撕蜋C器的關(guān)系,“我是比較抗拒智能可以無限擴展自己的想法的。智能可以幫助你解決更難的問題,但是有些問題是抵抗智能的,你會到達這樣一個點,聰明不會對你有任何幫助,我認為我們的許多問題都是這樣的。就像政治——我們不會說,只要有一個更聰明的政治家就可以解決所有的問題”。
人們是否過分高估了智力的價值?對此,Peter Norvig 說,“ Kevin Kelly 與我討論過這個問題;他將此稱作‘Intelligentism’——認為智力是唯一重要特性的一種偏見。我們認為智力是重要的,并以此稱呼自己的種族,但是,如果我們是大象,或許我們會希望得到超級力量,或者如果我們是獵豹,會希望獲得超級速度。有些社會問題很難,是因為它們就是那個樣子,那不是我們足夠聰明之后就可以解決的”。
隨意步入一家書店,滿目都是《7天搞定Java編程》這種速成書目,相比于計算機技術(shù)書籍的如此“速成”,在其他領(lǐng)域的書籍里,你卻很難找到諸如:“三天學會貝多芬”,或者“五天搞定量子力學”,這種速成教材,甚至連《狗狗喂養(yǎng)手冊》這種寵物指南,都鮮有“幾天搞定”的說法。Felleisen et al.在他們的著作《如何設(shè)計程序》一書中明確指出了這種“速成”的趨勢,并評論到:“垃圾的編程技術(shù)當然非常容易,傻子都能在21天之內(nèi)學會,哪怕他天生就是個白癡?!?/p>
讓我們來仔細看看《3天學會C++》這種速成教材實際上意味著什么:
學會
在3天時間里你幾乎沒有時間去寫任何有意義的程序,就更不要談什么從編程中獲得經(jīng)驗和教訓這種事情了。你也不可能有時間和有經(jīng)驗的程序員一起工作和交流,也不會體驗到在真正的C++環(huán)境下工作是什么感覺。長話短說吧,你就是沒時間,也學不到什么。所以這種書籍最多也就讓你有個粗淺的印象,但是絕對不可能有深入的理解。就像亞歷山大教皇說的那樣,“淺嘗輒止是很危險的”。
C++
如果你有其他編程語言的基礎(chǔ),那么3天之內(nèi)你也許可以學到C++的一些語法,但即使是這樣,你還是無法了解如何使用該語言編程。簡言之,如果你之前是一個Basic程序員,那么經(jīng)過3天的學習,你會成為一個“能使用C++語法編寫B(tài)asic風格程序的程序員”,不過這樣是沒法發(fā)揮出C++語言本身的優(yōu)勢的(說句不好聽的,你連怎么犯C++的典型錯誤都不會)。
僅僅知道一點語法意味著什么呢?Allan Perlis曾經(jīng)說過:“一個無法改變你思維方式的編程語言是不值得學習的。”;另一種可能性是,你可以只學一點點C++知識(類似的,或者一點點JavaScript,或者一點點Flex Script),然后就可以利用現(xiàn)有的工具制作應(yīng)用接口,完成特定的編程任務(wù)了。但是這樣的行為并不意味著你“會”編程了,你只是會使用這個工具完成任務(wù)而已。
3天:很不幸,3天是遠遠不夠的,往下看你就知道了。
研究人員(Bloom (1985)、 Bryan & Harter (1899,見文后參考書目)、Hayes (1989)、Simmon & Chase (1973,見文后參考書目) 的一系列調(diào)查研究顯示,在各個領(lǐng)域內(nèi),要想獲得專業(yè)級別的水平,大約需要10年時間的努力。參與此項調(diào)查的領(lǐng)域包括:國際象棋,作曲,發(fā)報,繪畫,鋼琴演奏,游泳,網(wǎng)球等。科學家們從神經(jīng)心理學和拓撲學的角度對這些領(lǐng)域進行研究,并得出結(jié)論。若要在某一領(lǐng)域內(nèi)達到專家級的水平,其關(guān)鍵在于“審慎地重復”,也就是說,并非是機械地,一遍又一遍地練習,而是要不斷地挑戰(zhàn)自我,試圖超越自身當前的水平,通過不斷的嘗試挑戰(zhàn),并在嘗試的過程中和嘗試之后對自身的表現(xiàn)進行分析和總結(jié),吸取經(jīng)驗,糾正之前犯過的各種錯誤。把這一“審慎”的過程不斷重復,才能取得成功。
所謂的“捷徑”是不存在的,即使對于莫扎特這種天才來說,也沒有捷徑可走,盡管4歲就開始作曲,可是他也花了13年的時間,才真正地寫出了世界級的作品。再舉一個例子,甲殼蟲樂隊(The Beatles),他們似乎在1964年憑借一系列熱門單曲和其在艾德沙利文秀(The Ed Sullivan show)上的演出一炮而紅,但是你也許不知道,他們早在1957年就在利物浦和漢堡兩地進行小規(guī)模演出了,而在此之前的非正式演出更是不計其數(shù)。甲殼蟲樂隊的主要成名曲《Sgt. Peppers》,則是1967年才發(fā)行的。Malcolm Gladwell公布了他對柏林音樂學院所作的一項研究的報告,該研究對比了一個班里的學習成績?yōu)樯?、中下三個檔次的學生,并逐一詢問他們進行音樂練習的時間
這三個檔次中的所有人,大約都是在5歲的時候開始練習音樂的,一開始的時候大家練習音樂的時間都差不多,大約一周2到3小時。但是到了八歲左右,大家的區(qū)別就開始體現(xiàn)了。后來成為班里最好的那一部分學生開始比別的學生練習得更多,大概每周6到9小時,12歲的時候每周8小時,14歲的時候每周16小時,往后則越來越多,直到20歲左右,他們每周練習音樂的時間已經(jīng)超過30小時了。在20歲的年紀,那些精英級別的演奏家們都有累計超過10000小時的音樂練習時間。相比之下,僅有部分優(yōu)等生能達到8000小時的累計練習時間,而那些音樂教師級別的學生,他們的累計練習時間只有4000小時左右。
所以,也許這個讓你能達到專業(yè)等級的神奇時間應(yīng)該是10000小時,而不是10年。(Henri Cartier-Bresson (1908-2004)說過,“(作為攝影師),你所拍攝的頭10000張照片都是垃圾”,但即使是垃圾作品,他拍一張照片也要花接近一小時。)Samuel Johnson (1709-1784)認為這個時間應(yīng)該更長:“在任何一個領(lǐng)域要想做到極好,勢必窮盡一生的精力,否則根本無法企及?!?Chaucer (1340-1400)也發(fā)出過“生命如此短暫,技能如此高深”的感嘆。Hippocrates (c. 400BC)因?qū)懴铝巳缦碌木渥佣蝗朔Q頌:“ars longa, vita brevis”,該句是來自于一個更長的引用:”Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile”, 這段話翻譯成英語就是:“生命很短暫,但是技藝卻很高深,機遇轉(zhuǎn)瞬即逝,探索難以捉摸,抉擇困難重重”。這段話是用拉丁文寫的。在拉丁文里,ars可以翻譯為“技藝”或者“藝術(shù)”,但是在古希臘文里,ars只能做“技能”的意思,而沒有“藝術(shù)”的意思。
下面是我列舉的程序員成功“食譜”:
沉醉于編程,編程是為了興趣。保持這種充滿興趣的感覺,以便于你能將其投入到你的10年/10000小時的編程時間中。
程序最好的學習方式是“在實踐中學習”。
更技術(shù)一些地說:“一個人在某個專業(yè)領(lǐng)域方面能夠達到最高水平,并不是因為這個人經(jīng)驗增長了以后而自動獲得的,而是這個人為了進步所做出了專門的努力之后產(chǎn)生的結(jié)果?!?p. 366)“最有效的學習包括如下幾個要素:明確并且難度適當?shù)娜蝿?wù),適應(yīng)學習者個人情況,及時的信息反饋,有重新開始和改正錯誤的機會)(p. 20-21) 《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》這本書提供了上述有趣的觀點
同其他程序員交流,多閱讀其他人寫的程序。這些遠比你看書或者上培訓班重要
如果你愿意的話,就選擇去讀一個計算機科學專業(yè)吧(當然你還可以去念這個專業(yè)的研究生)。
如果你能做到這點,那么你就有機會找到一些需要計算機學位認證的工作,也會讓你對這個行業(yè)有更深的理解。不過,如果你不是上學的料,那么你可以(當然需要有足夠的毅力)靠自己學習,或者通過工作來積累經(jīng)驗。無論你采用哪種途徑,光依靠書本是遠遠不夠的?!叭绻f僅僅靠學習油畫和調(diào)色技術(shù)無法創(chuàng)造出頂尖的畫家的話,那么光學習計算機科學課程更不能造就頂尖的程序員。”,Eric Raymond這樣說過,他著有《新黑客字典》一書。我所聘用過的最好的程序員僅僅只有高中文憑; 他寫了很多偉大的軟件,他有他自己的新聞組,并且通過股權(quán)賺夠了錢,還開了家屬于自己的夜店。(作者說的這個人是Jamie Zawinski,他是網(wǎng)景瀏覽器(Netscape)的早期開發(fā)這者之一,也是開源項目Mozilla和XEmacs的主要貢獻者,他開了一家叫做DNA_lounge的夜店,位于舊金山的SoMa區(qū)——譯者注)
與其他程序員一起做項目。
在某些項目中要盡量做到最好,在某些項目中卻別做那么好。當你是最好的時候,你的領(lǐng)導能力就會得到鍛煉,并激發(fā)你高瞻遠矚的視野。當你做得不好的時候,你就能知道你的領(lǐng)導怎么做事,以及他們不喜歡哪些事(因為領(lǐng)導總是把那些他們不愛做的雜事丟給他們認為不得力的人去做)
嘗試跟隨其他程序員一起做項目,嘗試去理解其他人所寫的代碼。
看看如果你無法找到代碼的作者本人的情況下,理解和修正他寫的代碼需要花費什么樣的代價。同時也思考,如何規(guī)劃你自己的程序代碼,讓它們更容易被其他人理解和維護。
至少學習半打編程語言。
包括一種支持類抽象的語言(例如Java或者C++),一種支持函數(shù)抽象的語言(例如Lisp或者ML),一種支持語法抽象的語言(例如Lisp),一種支持聲明式編程的語言(例如Prolog或者C++模板),一種支持協(xié)同程序的語言(例如Icon或者Scheme),一種支持平行并發(fā)編程的語言(例如Sial)
牢記“計算機科學”中包含著“計算機”這個詞。
了解計算機需要花多長的時間執(zhí)行一條指令,花多長時間從內(nèi)存中獲取一個字(word)(包括緩存命中和不命中兩種情況),如果連續(xù)從磁盤中獲取數(shù)據(jù),時間消耗如何?以及需要花多少時間才能再磁盤上定位一個新的位置?
盡量參與語言的標準化過程。
往大了說,你可以試著加入ANSI C++委員會這樣的專業(yè)組織,往小了講,你也可以從自己的代碼規(guī)范入手,限定代碼縮進是需要2個空格寬還是4個空格寬。無論采用哪種方式,你都需要了解其他人對于語言的喜好,以及他們的喜好的程度,甚至你要知道他們?yōu)槭裁串a(chǎn)生這樣的喜好的原因。
有良好的意識,能盡快適應(yīng)語言標準化的成果。
要掌握上面所說的所有內(nèi)容,光靠看書學習應(yīng)該是很難做到的。
當我的第一個孩子出生的時候,我?guī)缀蹰喿x了市面上所有的《如何…》指南書籍,但是我讀完了以后還是覺得自己是個菜鳥。
30個月以后,我的第二個孩子快出生時,我難道還要做一個書蟲么?不!相反,我此時更依賴我的個人經(jīng)驗,這些經(jīng)驗相比于那些上千頁的書籍,則更加有效和讓我放心。
雷鋒網(wǎng)按:本文作者董飛,數(shù)據(jù)科學家,公號:董老師在硅谷。轉(zhuǎn)載請聯(lián)系授權(quán)并保留出處和作者,不得刪減內(nèi)容。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。