国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Teach Yourself Programming in Ten Years——用十年教會自己編程
Teach Yourself Programming in Ten Years——用十年教會自己編程 收藏 
作者:Peter Norvig
譯者:劉海粟
本文原文為:http://norvig.com/21-days.html
該翻譯文檔的PDF版可以在這里獲得:http://download.csdn.net/source/2983778
為何萬事都如此倉促?
隨便走進一家書店,你就能看到《7天學(xué)會Java》以及各種萬變不離其宗的書籍,形如:在數(shù)天或是數(shù)小時內(nèi)學(xué)會Visual Basic、Windows系統(tǒng)、互聯(lián)網(wǎng)等等。我在亞馬遜 做了個高級搜索 :
pubdate: after 1992 and title: days and
(title: learn or title: teach yourself) [1]
共得到了248個結(jié)果。前78個是計算機類圖書(第79個是《30天學(xué)會孟加拉語 》)。我把搜索中的“days (天)”替換成“hours (小時)”,結(jié)果得到了一個相似度驚人的結(jié)果:253本書中,前77本都是計算機類圖書,緊隨其后的第78本是《24小時內(nèi)教會自己語法與格調(diào) 》。而在200名之后,有96%是計算機類圖書。
由此可見:要么是人們都在急匆匆的學(xué)習(xí)計算機,要么就是出于某種原因計算機比其他任何東西都要好學(xué)。而沒有一本書是關(guān)于如何在數(shù)日之內(nèi)學(xué)會貝多芬或是量子力學(xué)甚至是狗的飼養(yǎng)的。Felleisen等人在《如何設(shè)計程序 》中也指出了這一趨勢,他們說:“糟糕的編程非常簡單,蠢貨都能在21天的時間內(nèi)學(xué)會,即便他們就是根木頭都可以!”
讓我們來分析一下諸如《三天內(nèi)學(xué)會C++ 》這樣的標(biāo)題意味著什么:
學(xué)會: 3天的時間,你完全沒有時間去完成一些大型程序,也無法從其中的成功與失敗中汲取知識。你也沒有時間和一個有經(jīng)驗的程序員一起工作并熟悉C++環(huán)境下的開發(fā)是個什么樣子??傊銢]有時間去深入的學(xué)習(xí)。所以這種書只能給你一個膚淺的認(rèn)識而非深入的理解。正像Alexander Pope說的——一知半解是件危險的事情。
C++: 3天內(nèi)你可能學(xué)會一些C++的語法(前提是你學(xué)過其他編程語言),但你學(xué)不到如何去使用這種語言??偠灾?,如果你是——比方說——一個Basic程序員,你或許能學(xué)會以Basic的風(fēng)格用C++語法編程,但你無法掌握C++真正的優(yōu)點(或缺點)。問題何在?Alan Perlis 曾說過:“如果一種語言不能影響你的編程思路,那就不值得學(xué)習(xí)。”唯一合理的解釋就是你只需要學(xué)習(xí)一丁點的C++(類似的還有JavaScript或是Flash的Flex)以便為了某個特定目標(biāo)而去連接一個現(xiàn)有工具的接口。但如果這樣,你就不是在學(xué)習(xí)如何編程,而僅僅是在學(xué)習(xí)如何完成你的目標(biāo)而已。
三天內(nèi): 很不幸,正像我們在下一節(jié)中要展示的那樣,這遠(yuǎn)遠(yuǎn)不夠。
用十年教會自己編程
研究員們(Bloom (1985) , Bryan & Harter (1899) , Hayes (1989) , Simmon & Chase (1973) )已經(jīng)指出在許多領(lǐng)域中想達(dá)到精通都需要花費十年左右的時間,這其中包括國際象棋、音樂創(chuàng)作、電報操作、繪畫、鋼琴演奏、游泳、網(wǎng)球以及對神經(jīng)心理學(xué)或是拓?fù)鋵W(xué)的研究。關(guān)鍵在于用心去練習(xí):并非僅僅是一遍又一遍的單純重復(fù),而是要去挑戰(zhàn)一個剛好高于你目前水平的目標(biāo)。去嘗試,并在做的時候以及完成后分析自己的表現(xiàn),指出所有的錯誤。之后重復(fù),再重復(fù)……這沒有捷徑:甚至是莫扎特——4歲時他就是個音樂神童了,但一樣是用了13年的時間才創(chuàng)作出世界級的音樂。另一個例子,雖然看上去甲殼蟲樂隊是在1964年的埃德·沙利文秀上一夜走紅的,但其實他們早在1957年就開始在利物浦和漢堡的小俱樂部中演出了,而且雖然很早就受到大眾的青睞,但他們第一次重要的成功卻是1967年發(fā)行的專輯——《Sgt. Peppers》。Malcolm Gladwell 公布了一份關(guān)于柏林音樂學(xué)院學(xué)生的研究報告,比較了優(yōu)等、中等和后進的三類學(xué)生并為他們制定了練習(xí)時間:
三組 人從幾乎相同的年齡開始練習(xí)演奏——大約五歲左右。起初的幾年中,每個人都練習(xí)幾乎相同的時間——每周2到3個小時。但到了八歲左右的時候,真正的差距開 始出現(xiàn)了。那些班中最優(yōu)秀的學(xué)生的練習(xí)量開始超過其他人:九歲時達(dá)到每周6小時,十二歲時每周8小時,十四歲時每周16小時,越來越多。到了二十歲的時 候,他們每周的練習(xí)時間超過了30小時。二十歲時,在精英演奏者的人生歷程中共計練習(xí)了10,000小時。相較之下,僅僅是好學(xué)生的練習(xí)時間只有 8,000小時,而未來的音樂教師僅有4,000小時的練習(xí)。
所以,或許10,000小時——而不是10年——才是一個神奇的數(shù)字。Samuel Johnson (1709-1784)認(rèn)為這可能要花更長的時間:“要實現(xiàn)任何領(lǐng)域的卓越才能都是需要畢生奮斗的——不會再有更低的代價來獲得它了。”而Chaucer (1340-1400)則抱怨“人生短暫,但卻有太多技藝要學(xué)。”Hippocrates (約公元前400年)因那句“ars longa, vita brevis”而聞名,全文是“Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile”,這話用中文 [2] 表達(dá)出來既是“技藝永恒,生命短暫,機會易逝,實驗詭詐,抉擇艱難”。雖然在拉丁文中“ars”一詞既可以表示“藝術(shù)”也可以表示“技術(shù)”,但在原本的希臘文中“techne”一詞則只有“技能”的意思而非“藝術(shù)”。
以下是我編程成功的訣竅:
對編程產(chǎn)生興趣,并試著從興趣出發(fā)去做些什么。你要確信它能持續(xù)的給你帶來樂趣好讓你能夠為它傾注十年的心血。
與其他程序員交流,閱讀其他的程序。這比任何一本書或一項訓(xùn)練都要重要。
編程。學(xué)習(xí)的最好方式就是邊做邊學(xué) 。更學(xué)術(shù)性的說:“在特定領(lǐng)域內(nèi),個人能力的最高上限無法通過長期經(jīng)驗而自動獲得。但即便是經(jīng)驗豐富的個人也可以通過刻意的努力而獲得經(jīng)驗的提高。”(p. 336 )并且“最為有效的學(xué)習(xí)需要針對特定個體、信息反饋以及重復(fù)和改正錯誤的機會有一個適當(dāng)難度的明確目標(biāo)” (p. 20-21)?!?a target="_blank" >實踐中認(rèn)知:日常生活中的思想,數(shù)學(xué)與文化 》是一本對于該觀點有趣的參考書籍。
如果你愿意,在大學(xué)中投入四年的時間(或者繼續(xù)在研究生學(xué)院投入更多的時間)。這將使你獲得一些工作的入門資質(zhì),并且會給你一些關(guān)于這個學(xué)科更加深入的認(rèn)識,而如果你不喜歡上學(xué),你也可以(需要一些貢獻)在工作中獲得類似的經(jīng)驗。但無論如何,僅僅看書是絕對不夠的。“計算機科學(xué)的教育不會讓任何人成為專業(yè)程序員,正如研究筆刷和顏料不會讓任何人成為專業(yè)畫家一樣。”,《新黑客辭典》的作者Eric Raymand如是說。我所聘用過的最好的程序員之一 [3] 僅擁有高中學(xué)歷。他卻創(chuàng)造出了很多偉大 的軟件 ,擁有他自己的新聞組 ,甚至在股票期權(quán)中賺到足夠的錢買下一家自己的夜總會 。
與其他程序員共同完成一些項目。在某些項目中成為最出色的程序員,而在其他一些項目中成為最糟糕的。當(dāng)你最出色時,你將有機會測試自己領(lǐng)導(dǎo)一個項目的能力,并且以你的視野去激勵其他人。當(dāng)你最糟糕時,你要學(xué)習(xí)大師們做了什么,而不喜歡做什么(因為他們讓你去為他們做)。
從其他程序員那里接手一些項目。理解其他人編寫好的程序??纯从惺裁葱枰斫獾?,并在原作者不在的時候試著自己去解決一些問題??紤]一下如何設(shè)計你的程序能讓它更容易被那些從你手里接手項目的人們理解。
學(xué)習(xí)至少六種編程語言。其中包括一種支持類抽象的語言(如Java或C++),一種支持函數(shù)抽象的語言(如LISP或ML),一種支持語法抽象的語言(如LISP),一種支持聲明規(guī)范的語言(如Prolog或C++模板),一種支持協(xié)程的語言(如Icon或Scheme)以及一種支持并行處理的語言(如Sisal)。
牢記在“計算機科學(xué)”中有一個“計算機”。你要知道計算機需要多長時間去執(zhí)行你的一條指令、需要多長時間從內(nèi)存中讀取一個字(帶有或不帶有緩存缺失)、需要多長時間從磁盤中連續(xù)讀取字符以及需要多長時間完成磁盤的重新定位。(答案在這里 )
參與一個語言的標(biāo)準(zhǔn)制定工作。這可以是ANSI C++委員會項目,也可以僅僅是決定你的代碼是用2個還是4個空格作為縮進。但無論如何,這將會讓你學(xué)到其他人對語言的偏好以及他們到底對此有多么偏好,甚至你還可能明白為什么他們會有此偏好。
擁有盡快從語言標(biāo)準(zhǔn)化工作中抽身的理智。
出于以上經(jīng)驗,我很懷疑你能從書本中學(xué)到多少。在我第一個孩子出生前,我讀了所有的指南書籍,但依然感到茫然無措。30個月之后,當(dāng)我第二個孩子出生的時候,我還需要回去復(fù)習(xí)那些書籍么?不,這次完全憑借我的個人經(jīng)驗了。這對我來說顯然比專家們寫的數(shù)千頁的紙張更有效果。
Fred Brooks,在他的文章《沒有銀彈 》中指出了尋找一位偉大的程序設(shè)計者的三個步驟:
盡早系統(tǒng)的確定一批頂級設(shè)計者隊伍。
指派一個業(yè)務(wù)主管來負(fù)責(zé)前景的發(fā)展以及確保職業(yè)規(guī)劃。
為增進設(shè)計師們的互相影響與激勵提供足夠的機會。
這樣做的前提是已經(jīng)假定了某人具有一個偉大設(shè)計者所應(yīng)有的素質(zhì),他要做的只是去引導(dǎo)其他人的前進。Alan Perlis 將這些變得更加簡潔:“每個人都能學(xué)會雕塑:米開朗基羅這樣的人反倒需要學(xué)習(xí)如何不去雕塑。偉大的程序員也是如此。”
所以,盡管去買那本Java的教程吧?;蛟S你能從中學(xué)到些什么,但你不會因此改變?nèi)松膊粫?4小時、24天甚至是24個月之后成為一個真正的程序員。
參考文獻:
Bloom, Benjamin (編)《在年輕人中培養(yǎng)人才 》, 百齡壇, 1985.
Brooks, Fred, 《沒有銀彈 》, IEEE計算機, vol. 20, no. 4, 1987, p. 10-19.
Bryan, W.L.和Harter, N.《電報語言研究:一種習(xí)慣上的收獲》, 心理學(xué)回顧, 1899, 8, 345-375
Hayes, John R., 《完全問題求解 》, Lawrence Erlbaum, 1989.
Chase, William G.和Simon, Herbert A.《國際象棋的感知 》, 認(rèn)知心理學(xué), 1973, 4, 55-81
Lave, Jean, 《實踐中認(rèn)知:日常生活中的思想,數(shù)學(xué)與文化 》, 劍橋大學(xué)出版社, 1988.
答案:
在典型PC機上各種操作的近似時間:
執(zhí)行典型指令
1/1,000,000,000 秒 =1 納秒
從一級緩存中讀取數(shù)據(jù)
0.5 納秒
分支預(yù)測錯誤
5 納秒
從二級緩存中讀取數(shù)據(jù)
7 納秒
互斥鎖定 / 解鎖
25 納秒
從主存儲器中讀取數(shù)據(jù)
100 納秒
在 1Gbps 的網(wǎng)絡(luò)中發(fā)送 2KB 數(shù)據(jù)
20,000 納秒
從內(nèi)存中讀取 1MB 數(shù)據(jù)
250,000 納秒
從新的磁盤位置讀取數(shù)據(jù) ( 尋軌 )
8,000,000 納秒
從磁盤中讀取 1MB 數(shù)據(jù)
20,000,000 納秒
在美國向歐洲發(fā)包并返回
150 毫秒 =150,000,000 納秒
附錄:語言的選擇
許多人都問我應(yīng)該首先學(xué)習(xí)哪種編程語言。答案并不唯一,但需要考慮以下幾點:
善用你的朋友們。每每被問及“我該用哪種操作系統(tǒng),Windows、Unix還是Mac?”的時候,我的回答總是:“用你的朋友們都在用的那種。”你在朋友那里學(xué)到的東西要遠(yuǎn)大于操作系統(tǒng)或編程語言之間的固有優(yōu)勢。但也要考慮到你未來的朋友:若你繼續(xù)學(xué)習(xí),你肯定會加入到某個程序員社區(qū)中去。你所選擇的語言是否擁有一個大規(guī)模發(fā)展的社區(qū)?還是瀕臨滅絕?是否有足夠的書籍、網(wǎng)站或在線論壇讓你尋找答案?你是否喜歡那些社區(qū)中的人們?
保持簡單。像C++或Java這種編程語言是為那些由關(guān)心他們代碼執(zhí)行效率且經(jīng)驗老道的程序員組成的大規(guī)模團隊來進行專業(yè)開發(fā)而設(shè)計的。因此,這些編程語言都擁有為這些情況而設(shè)計的復(fù)雜結(jié)構(gòu)。你關(guān)心的是學(xué)習(xí)編程,而不是那些復(fù)雜的東西。所以你需要的是一種為了程序員新手便于記憶和學(xué)習(xí)而設(shè)計的語言。
運行。你更喜歡哪種學(xué)習(xí)鋼琴演奏的方式:正常的交互模式,當(dāng)你按下一個琴鍵的時候立刻就可以聽到對應(yīng)的音符。還是“批發(fā)”模式,只有在你完成整段樂曲之后才能聽到聲音?顯然互動模式讓學(xué)習(xí)鋼琴變得更簡單,編程亦是如此。堅持一種交互模式的語言并使用它。
給出以上這些準(zhǔn)則,我建議首先學(xué)習(xí)的語言是Python 或Scheme 。但你自身的情況可能有所不同,所以還有很多其他不錯的選擇。如果你的年齡是個位數(shù),你可能更喜歡Alice 或Squeak (年長一些的學(xué)習(xí)者可能也會喜歡這些)。重點在于——你選擇并且你開始。
附錄:書籍與其他資源
常有人問有哪些書籍或網(wǎng)站可以學(xué)習(xí)。我重申“僅僅看書是絕對不夠的”,但我可以推薦以下這些:
Scheme: 《計算機程序的結(jié)構(gòu)與詮釋 》(Abelson和Sussman)可能是對計算機科學(xué)最好的介紹,同時作為了解計算機科學(xué)的一種途徑,本書也講解如何編程。你可以看這本書的在線視頻講座 ,或是完整的在線文本 。這本書具有挑戰(zhàn)性并將淘汰一些用其他方法取得成功的人。
Scheme: 《如何設(shè)計程序 》(Felleisen等編)是一本非常優(yōu)秀的介紹如何用典雅又不失實用的方式去編程的書籍。
Python: 《Python編程:計算機科學(xué)導(dǎo)論 》(Zelle)是一部用Python完成的不錯的導(dǎo)論。
Python: Python網(wǎng)站 上的一些在線教程 都是非常實用的。
Oz: 《計算機編程的概念,技術(shù)和模型 》(Van Roy和Haridi)被認(rèn)為是當(dāng)代Abelson與Sussman的繼承者。本書通過編程的整體構(gòu)思,在更易于閱讀和學(xué)習(xí)的同時,較之Abelson與Sussman獲得了更廣泛的視野。該書使用了一種叫做Oz的編程語言,雖然它并不被大眾所知,但可以很好的作為其他語言的基礎(chǔ)來學(xué)習(xí)。
作者注釋:
T. Capey指出,亞馬遜網(wǎng)站上《完全問題求解 》一書的頁面中,“購買此商品的顧客也同時購買”一項里已經(jīng)出現(xiàn)了《30天學(xué)會孟加拉語》和《24小時內(nèi)教會自己語法與格調(diào)》。我猜這其中大部分的人是從此文中看到那些書的。感謝Ross Cohen在Hippocrates問題上對我的幫助。
譯者注釋:
[1]意為:出版日期在1992年之后,題目中含有“天”并同時含有“學(xué)習(xí)”或“自學(xué)”。  返回>>
[2]原文中為“in English”,是把之前的拉丁文翻譯為英文。因為本文是翻譯稿,所以直接說成中文。  返回>>
[3]指Jamie Zawinski——XEmacs和Netscape Navigator的創(chuàng)始人。  返回>>
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
程序員必讀經(jīng)典長文:用十年時間自學(xué)編程
[ZT]十年編程無師自通
想成為程序員?先自學(xué)編程 10000 小時
3天學(xué)會C ,對,就3天
支付寶P10級技術(shù)大牛推薦:3本程序員必看的編程書籍
Peter Norvig:自學(xué)編程,十年磨一劍
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服