Teach Yourself Programming in Ten Years - 渣渣翻譯之編程是十年磨一劍

原文地址:http://norvig.com/21-days.htmlcss

翻譯放在了每一小段的下面html

Why is everyone in such a rush?

爲何每一個人都急於求成!?前端

Walk into any bookstore, and you'll see how to Teach Yourself Java in 24 Hours alongside endless variations offering to teach C, SQL, Ruby, Algorithms, and so on in a few days or hours. The Amazon advanced search for [title: teach, yourself, hours, since: 2000 and found 512 such books. Of the top ten, nine are programming books (the other is about bookkeeping). Similar results come from replacing "teach yourself" with "learn" or "hours" with "days."node

The conclusion is that either people are in a big rush to learn about programming, or that programming is somehow fabulously easier to learn than anything else. Felleisen et al. give a nod to this trend in their book How to Design Programs, when they say "Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies." The Abtruse Goose comic also had their take.python

Let's analyze what a title like Teach Yourself C++ in 24 Hours could mean:git

  • Teach Yourself: In 24 hours you won't have time to write several significant programs, and learn from your successes and failures with them. You won't have time to work with an experienced programmer and understand what it is like to live in a C++ environment. In short, you won't have time to learn much. So the book can only be talking about a superficial familiarity, not a deep understanding. As Alexander Pope said, a little learning is a dangerous thing.
  • C++: In 24 hours you might be able to learn some of the syntax of C++ (if you already know another language), but you couldn't learn much about how to use the language. In short, if you were, say, a Basic programmer, you could learn to write programs in the style of Basic using C++ syntax, but you couldn't learn what C++ is actually good (and bad) for. So what's the point? Alan Perlis once said: "A language that doesn't affect the way you think about programming, is not worth knowing". One possible point is that you have to learn a tiny bit of C++ (or more likely, something like JavaScript or Processing) because you need to interface with an existing tool to accomplish a specific task. But then you're not learning how to program; you're learning to accomplish that task.
  • in 24 Hours: Unfortunately, this is not enough, as the next section shows.
alongside :靠着邊adv;在...旁邊prep
endless :無止境的adj;環狀的
variation :變更,變化n
offering :提供v&n
conclusion :結尾,結束,意見,結論
fabulously :難以置信的adv
Felleisen et al.Felleisen 和其餘全部人
nod :點頭,
trend :趨勢,傾向,流行
idiots :白癡
dummies :
dummy :假的,虛擬的,啞吧
Abtruse Goose
comic :漫畫
analyze :對...進行分析
significant :重要的,重大的,有意義的
affect :影響;僞裝;感動
tiny :極小的
interface :接口
accomplish :完成
unfortunately :不幸的

中文翻譯:
隨便走進一家書店,均可以看到相似《24小時學會Java》這樣的書,旁邊還有不少相似於:幾天,幾小時內學會C語言、SQL、Ruby以及算法這樣的書。若是使用亞馬遜上的高級搜索,title:teach,yourself,hours,since:2000這個關鍵字,將會返回512本這樣的書。最前面的10本中,9本是關於編程的(剩下的一本是關於記帳的)。若是把關鍵字teach yourself 替換成 learn,或者將hours替換成days,返回的結果大同小異。

咱們能夠得出結論,人們在學習編程的時候,喜歡急於求成,想快速學好。或者認爲編程比其餘事情好學,Felleisen 以及其餘的做者在他們的書《How to Design Programs》裏面說到‘編寫爛程序,一點也不難。白癡也能夠在21天內學會,即便他們是傻瓜,’在漫畫網站Abtruse Goose中也表達了這一點。程序員

咱們來分析一下,像《teach Yourself C++ in 24 Hours》這樣的標題的書,表達出來的是什麼。web

  • teach yourself-自學:在自學的24小時中,你沒有時間寫幾個有意義的程序,也就沒法從中學到成功或者失敗的經驗,24小時中,沒有時間和一個有經驗的程序員交流,請教,也就沒法理解使用C++編程的真實場景。總而言之,時間過短,你什麼也學不到。因此,這種書只是說了一些表面的東西,並無深刻的講解。就像Alexander Pope(亞歷山大-普玻)說的「只知其一;不知其二是一件危險的事情」
  • C++:在24小時之內,你只能學會一些C++的語法(若是你有必定的編程基礎的話),可是你不能學會如何使用這門語言。總而言之,若是你是一個Basic語言的程序員,你能夠寫一些像Basic的風格的C++程序,可是,在24小時內,你不可能學會C++中的優勢或者是缺點。重點是什麼?Alan Perlis(首屆圖領獎得主-艾倫·佩里斯)說過「不能影響你的思惟方式的語言,是不值得學習的」。另外一個可能的場景是,你不得不學習C++(或者Javascript,Processing...這些)的一小部分,來調用一些原有的接口,完成某個特定的任務。在這種狀況下,表面上說是在,學習如何編程,實際上是在應付手上的工做。
  • in 24 hours:不幸的是,這以爲是不可能的,時間太少了,下面告訴你緣由。

Teach Yourself Programming in Ten Years

十年學會編程算法

Researchers (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, telegraph operation, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. The key is deliberative practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and correcting any mistakes. Then repeat. And repeat again. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music. In another genre, the Beatles seemed to burst onto the scene with a string of #1 hits and an appearance on the Ed Sullivan show in 1964. But they had been playing small clubs in Liverpool and Hamburg since 1957, and while they had mass appeal early on, their first great critical success, Sgt. Peppers, was released in 1967.編程

researcher :研究員;調查者n
expertise :專門知識或者技能
variety :品種,種類
composition :創做,寫做
telegraph :電報,電信,打電報,電報機
operation :操做,運轉
painting :油畫n
neuropsychology :神經心理學n;/ˌnjʊərə(ʊ)saɪ'kɒlədʒɪ/
topolology :拓撲學;地質學,局部解刨學
deliberative :審議的,供審議的
deliberative practice :有益練習
analyzing :分析
performance :演出,表演,行爲,成就
correct :改正,糾正vt;正確的adj
appear :顯現,出現vi
shortcut :捷徑n
Mozart :莫扎特
prodigy :奇才,天才
genre :類型,流派
beatle :小妞,(有男子氣概的)獨立摩登新女性
the Beatles :英國搖滾樂隊The Beatles
burst :爆炸,炸裂vt&vi;忽然打開;爆炸,爆裂n;爆發,突發
scene :情景;景象
appearance :出現,顯露,外觀n
Livepool :利物浦
Hamburg :漢堡(德國西部-城市)
mass :大量n;大規模的adj
appeal :呼籲,懇求;有吸引力
early on :早期
critical :批評的,愛挑剔的,決定性的,危險的
Sgt. Peppers, :Beatles樂隊的專輯
released :已發佈;釋放v

研究員告訴咱們,想在任何領域成爲專家,大概須要10年的時間,這些領域包括下棋,做曲,發電報,彈鋼琴,游泳,打網球,研究神經心理學和拓撲學。關鍵在於有針對性的訓練,而不是漫無目的重複,訓練的內容要恰好超過你現有的水平練習之後要分析你的表現,改正發現的錯誤,而後重複,再重複。沒有什麼捷徑可走,即便是莫扎特,一個4歲就能彈琴的音樂天才,也是用了13年的時間,才真正的寫出世界級的音樂做品。在流行音樂圈,Beatles(披頭士)好像是在1964年訪美期間一晚上成名的。實際上,他們從1957年就已經開始在利物浦和漢堡的小酒館裏唱歌了,他們組建樂隊的時間就更早了,他們第一張取得巨大成功的專輯《佩帕軍士》,是在1967年發行的。

Malcolm Gladwell has popularized the idea, although he concentrates on 10,000 hours, not 10 years. Henri Cartier-Bresson (1908-2004) had another metric: "Your first 10,000 photographs are your worst." (He didn't anticipate that with digital cameras, some people can reach that mark in a week.) True expertise may take a lifetime: Samuel Johnson (1709-1784) said "Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price." And Chaucer (1340-1400) complained "the lyf so short, the craft so long to lerne." Hippocrates (c. 400BC) is known for the excerpt "ars longa, vita brevis", which is part of the longer quotation "Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile", which in English renders as "Life is short, [the] craft long, opportunity fleeting, experiment treacherous, judgment difficult." Of course, no single number can be the final answer: it doesn't seem reasonable to assume that all skills (e.g., programming, chess playing, checkers playing, and music playing) could all require exactly the same amount of time to master, nor that all people will take exactly the same amount of time. As Prof. K. Anders Ericsson puts it, "In most domains it's remarkable how much time even the most talented individuals need in order to reach the highest levels of performance. The 10,000 hour number just gives you a sense that we're talking years of 10 to 20 hours a week which those who some people would argue are the most innately talented individuals still need to get to the highest level."

popularize :使受歡迎
concentrate :專心於;注意集中vt&vi;濃縮vt
metric :度量標準
photograph :照片,相片;給...拍照
worst :最壞的adj&adv
anticipate :預感,指望,先於...行動vt
digital cameras :數碼相機
excellence :優秀,長處,
attained :取得,得到
labor :勞工n;勞動vi;詳細分析vt,使厭煩
purchase :購買
complained :抱怨
craft :手藝;工藝n;精巧地製做vt
lerne :不知道是否是 學習的意思?
the lyf so short, the craft so long to lerne
excerpt :摘錄,摘要
ars longa, vita brevis : 生命短暫,藝術長遠(拉丁語)
quotation :引用,引述
Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile
生命很短暫,可是藝術卻能夠很高深,機遇轉瞬即逝,探索難以琢磨,抉擇困難重重
render :翻譯
opportunity :機會
fleeting :飛逝的,轉瞬間的
experiment :實驗,試驗
treacherous :騙人的,不可信的 /'tretʃ(ə)rəs/
judgment :判斷
reasonable :合理的,同情達理的
assume :假定;承擔;呈現;採起
exactly ;精確的
nor :也不
remarkable :異常的,引人注目的
talented :有才能的,多才的
individual :個別的,單獨的,我的的
argue :爭吵,辯論vt&vi;堅定主張,勸說,代表
innately :天賦的;與生俱來的

馬爾科姆·格拉德威爾讓下面這個理論廣爲人知,雖然他表達的是專一10,000個小時而不是10年(出自異類 : 不同的成功啓示錄)。法國現實主義攝影大師亨利·卡蒂埃-佈列鬆有另一個觀點,「你的前10,000張照片是你最差的」。(這位大師沒有意識到數碼相機的出現,不少人能在一週內就能夠拍10,000張照片)真正的大師要用一輩子來完成,英國做家,文學評論家和詩人塞繆爾·約翰遜說過:「在任何領域取得卓越的成就都要用一輩子的努力,你不可能用很低的代價就完成。」英國的詩人喬叟也曾經說過:」生命是短暫的,藝術的學習沒有盡頭。」希波克拉底(公元前400年)有一個廣爲人知的語語錄,"ars longa, vita brevis",他也認爲藝術沒有止境,生命卻有盡頭。這句話來自一首長詩,"Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile"翻譯成中文( 文中是英語)的意思是:「生命很短暫,可是藝術卻能夠很高深,機遇轉瞬即逝,探索難以琢磨,抉擇困難重重。」固然,不會有一個肯定的答案告訴你須要多長時間,畢竟,假設掌握全部的技能(好比編程,下棋,跳棋和音樂)須要相同的時間也不合適,不一樣的人也會用不一樣的時間。K.Anders Ericsson教授說過:「值得注意的是,在大多數領域,即便你是個天才,要達到專家級別的高水平仍然須要時間。10,000個小時只是給你一個概念,一個天才,若是每週練習10到20個小時的時間,仍然須要數年時間才能達到專家級別的水平。」

So You Want to be a Programmer

那麼,你想成爲一名程序員嗎

Here's my recipe for programming success:這是我學習編程成功的祕訣

  • Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in your ten years/10,000 hours.

     對編程要有興趣,找到編程中的快樂。保證足夠的樂趣,你才能在編程這件事情上花費10年或者10000個小時的時間

  • Program. The best kind of learning is learning by doing. To put it more technically, "the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve." (p. 366) and "the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors." (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.
  • 編碼,動手編程!最好的方法就是邊作邊學。更嚴格的講(有人翻譯爲常言道),最高級別的功力,不是經過簡單的重複來得到的(不像是作一天和尚,撞一天鐘這樣),可是,最強的能力,能夠經過針對性的,有意訓練獲得加強。而且,最有效果的學習,須要有清晰,有針對性的任務,根據不一樣人來指定不一樣難度的任務,而且還要有反饋的渠道,並能根據反饋對錯誤的東西進行改進!《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》是一本有趣的書,這些觀點就來自這本書中。
    recipe :食譜;方法;祕訣n
    technically :技藝上,技巧上;嚴格的來講
    maximal :最全面的;最高的
    individuals :個別的
    given :規定的adj;考慮到prep
    increased :增長的
    deliberate :蓄意的,慎重的,鎮定自若的,從容不迫的,仔細考慮
    effort :努力,盡力,成就
    effective :有效的
    well-defined :清晰可辯的
    appropriate :適當的
    particular :特定的
    informative :提供信息的
    feedback :反饋;回覆
    opportunity :機會
    repetition :重複
    corrections :糾正
    reference :說起,涉及,參考
    viewpoint :觀點
  • Talk with other programmers; read other programs. This is more important than any book or training course.

     和其餘程序員交流,閱讀其餘程序員的代碼。這比看書或者參加培訓課程重要的多!

  • If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don't enjoy school, you can (with some dedication) get similar experience on your own or on the job. In any case, book learning alone won't be enough. "Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter" says Eric Raymond, author of The New Hacker's Dictionary. One of the best programmers I ever hired had only a High School degree; he's produced a lot of great software, has his own news group, and made enough in stock options to buy his own nightclub.
  • 若是你願意,你能夠去上四年大學(或者再讀個研)。這能讓你得到一些工做機會,也能讓你在這個領域有更深刻的瞭解。可是,若是你一上學就頭痛,直接去工做也能得到相同的經驗。不管是什麼狀況,讀死書確定是不行的。計算機科學不會讓你成爲編程專家,就像學習畫筆和顏料不可能讓你成爲畫家同樣。這是Eric-Raymond說的,他是New Hacker’s Dictionary字典的做者。我僱傭過的最好的程序員是個高中畢業的學生,他創造了許多偉大的軟件,他擁有本身的新聞組,他用股權賺到了足夠多的錢買了本身的酒吧。
    graduate :研究生的
    access :通道,入口
    credential :資格證書,資格
    field :田,地,場所,領域
    dedication :奉獻,應該指的是奉獻時間和意志力吧,
    in any case :不管如何
    brushes ;刷子,畫筆
    pigment :顏料
    expert :熟練地adj;專家n;當專家vt
    hired :租用,僱用
    stock options :職工優先認股權
  • Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you're the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you're the worst, you learn what the masters do, and you learn what they don't like to do (because they make you do it for them).
  • 和其餘的程序員一塊兒參與一些項目。在一些項目中成爲最出色的程序員;在另外一些項目中當最差的程序員。在當最出色的程序員的時候,要測試你領導項目的能力,用你的視野來鼓舞別人。若是你是項目中最差的那個,要學習主導者們在作什麼,看他們不喜歡作的,你拿來作。
    inspire :鼓舞
    vision :視力,眼力,幻象,美景,想象力n;顯現,夢見,想象vt
  • Work on projects after other programmers. Understand a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain them after you.
  • 接手並推動別人的項目。理解其餘人寫的代碼。發現別人沒有考慮到的問題,去理解並修復這些問題。思考並設計如何編寫你的軟件,讓這些軟件容易被你後面的人維護。
    original :原物,原做,原型n;原始的adj
    around :處處;大約,在附近adv;四處,在...周圍prep
    maintain :保持,繼續,保養,維護
  • Learn at least a half dozen programming languages. Include one language that emphasizes class abstractions (like Java or C++), one that emphasizes functional abstraction (like Lisp or ML or Haskell), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), and one that emphasizes parallelism (like Clojure or Go).
  • 學習至少半數編程語言(應該是編程語言分類,而不是具體的語言,要知道如今但是有上百種編程語言,而且仍是增長中)。這些語言中,包括一種支持抽象類的(例如Java或者C++),一種支持函數的(Lisp, ML或者Haskell),一種支持語義抽象的(Lisp),一種支持聲明規範的(Prolog或者C++模板),還有一種支持併發的(Clojure或Go)。
    half dozen :半打
    emphasize :強調,這裏應該是,語言比較強勢,比較在行的部分
    class abstraction :面相對象編程 /əb'strækʃ(ə)n/
    functional abstraction :函數式編程
    syntactic abstraction :句法抽象
    declarative specifications :聲明性規範
    parallelism :併發
  • Remember that there is a "computer" in "computer science". Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk. (Answers here.)
  • 搞清楚這個,在「計算機科學」中,有「計算機」這個詞語。理解執行一條指令要花多長時間,從內存中取一個字(要考慮緩存有沒有命中的狀況)要多久,從硬盤中連續讀字節要多久,在硬盤中尋址定位要多久?
    execute :執行
    instruction :命令
    cache miss :表示緩存沒有命中
    consecutive :連續的,連貫的
    location :位置
  • Get involved in a language standardization effort. It could be the ANSI C++ committee, or it could be deciding if your local coding style will have 2 or 4 space indentation levels. Either way, you learn about what other people like in a language, how deeply they feel so, and perhaps even a little about why they feel so.
  • 參加語言的標準化工做(就是制定編程語言的標準)。這多是有關 ANSI C++ 委員會,也多是關於縮進的風格是兩格縮進或四格縮進的問題。不管如何,你能從中學到其餘人對語言的喜愛,也能瞭解到他們熱愛的程度,也許還能知道一些他們爲何會這樣感受。(我以爲通常的人,很難達到這個高度)
    involved :捲入,有關,複雜的adj;設計,使參與v
    get involved :介入
    standardization :標準化 /ˌstændədai'zeiʃən/ 這裏應該是一個語言標準化論壇或者社區的工做
    effort :努力,盡力,成就
    committee :委員會
    indentation :代碼縮進
    perhaps :也許
  • Have the good sense to get off the language standardization effort as quickly as possible.
  • 能儘快領悟到,什麼時候從標準化的工做中脫身(由於標準是對於大部分人而言,有些狀況確定是照顧不到的,要可以適合而止)
sence :領悟,感受n;意識到
有良好的判斷力,儘量塊的完成語言標準化的工做

With all that in mind, its questionable how far you can get just by book learning. Before my first child was born, I read all the How To books, and still felt like a clueless novice. 30 Months later, when my second child was due, did I go back to the books for a refresher? No. Instead, I relied on my personal experience, which turned out to be far more useful and reassuring to me than the thousands of pages written by experts.

你要思考這些,很難說你能從書本中學到多少東西。我第一個小孩出生的時候,我讀了全部的「如何作」系列的書,可是,依然像一份無能的新手,沒有什麼頭緒。30個月之後,當個人第二個孩子出生,我還要重溫一下那些書麼?固然不用了!我徹底靠我本身的經驗,事實也證實我本身的經驗要賽過那些專家們寫的上千頁的書。

Fred Brooks, in his essay No Silver Bullet identified a three-part plan for finding great software designers:

弗雷德的書《No Silver Bullet》累出了三條建議

一、儘早系統的的識別出頂尖工程師

二、每一個人分配一個職業生涯導師

三、提供機會,讓這些人相互交流和激勵

  1. Systematically identify top designers as early as possible.
  2. Assign a creer mentor to be responsible for the development of the prospect and carefully keep a career file.
  3. Provide opportunities for growing designers to interact and stimulate each other.
    clueless :無能的
    novice :新手
    due :到期的。應得的
    refresher :複習進修的
    relied :依賴
    reassuring :安慰的,可靠的,鼓氣的
    expert :熟練的,內行的;專家,能手;當專家
    essay :散文
    No Silver Bullet :沒有銀彈
    identify :認出,識別,支持
    Systematically :有系統的;/ˌsistə'mætikəli/
    Assign :分配,指派
    mentor :有經驗可信賴的顧問
    prospect :前途,預期
    provide opportunities :提供機遇
    interact :互相影響
    stimulate :刺激;鼓舞 /'stɪmjʊleɪt/

This assumes that some people already have the qualities necessary for being a great designer; the job is to properly coax them along. Alan Perlis put it more succinctly: "Everyone can be taught to sculpt: Michelangelo would have had to be taught how not to. So it is with the great programmers". Perlis is saying that the greats have some internal quality that transcends their training. But where does the quality come from? Is it innate? Or do they develop it through diligence? As Auguste Gusteau (the fictional chef in Ratatouille) puts it, "anyone can cook, but only the fearless can be great." I think of it more as willingness to devote a large portion of one's life to deliberative practice. But maybe fearless is a way to summarize that. Or, as Gusteau's critic, Anton Ego, says: "Not everyone can become a great artist, but a great artist can come from anywhere."

So go ahead and buy that Java/Ruby/Javascript/PHP book; you'll probably get some use out of it. But you won't change your life, or your real overall expertise as a programmer in 24 hours or 21 days. How about working hard to continually improve over 24 months? Well, now you're starting to get somewhere...

此處假設有一些人天生有成爲偉大工程師的潛質,而後,就是正確的去引導他們。艾倫·佩里斯一針見血地說:」假如每一個人均可以學會雕刻,那就得教米開朗基羅哪些事不能作。對於偉大程序員,也是如此。」Perlis認爲,偉大的人有一種內在的特質,這種特質每每比接受訓練更重要。可是,這些特質是從哪裏來的呢?與生俱來的?仍是經過後天勤奮而來的?正如 動畫片《料理鼠王》裏的幻象大廚Auguste Gusteau說的那樣:「誰都能作飯,但只有那些無所畏懼的人才能成爲大廚!」我認爲「把你生命中的大部分時間花在有針對性的練習上」這種精神,看做一種自願奉獻的精神!但或許「無所畏懼」纔是體現這種精神的真諦。或者,就像是《料理鼠王》裏那個與 Gusteau 做對的刻薄的美食評論家 Anton Ego 說的那樣:「不是任何人都能成爲偉大的藝術家,不過,偉大的藝術家能夠來自任何地方。」

因此,買本 Java/Ruby/Javascript/PHP 的書就開始學習吧。你可能會從中學到點兒有用的東西。可是若是你想要改變本身的生活,靠在 21 天內或 24 小時內獲得所有的編程技能,提升你實際的編程水平,這是不可能的。你嘗試過連續 24 個月不間斷的努力提升本身麼?OK!,爲了你的目標開始奮鬥吧……

assume :假定;承擔
qualities :品質
necessary :須要
properly :適當的
coax :哄,用豪華勸說
succinctly :簡便地
sculpt :雕刻;造型 /skʌlpt/
Michelangelo :米開朗琪羅
greats :偉人
internal :國內的,內部的,內在的
transcends :賽過
training :訓練
innate :先天的
diligence :勤奮,注意的程度
quality :質量,才能
Auguste Gusteau :料理鼠王
fictional :虛構的
chef :廚師長
Ratatouille :蔬菜雜燴
fearless :無畏的,大膽的
willingness :心甘情願,樂意;自動自發
devote :致力於,奉獻於
portion :部分;一份;命運n;分配,給嫁妝vt
deliberative :審議的,供審議的;這裏應該是刻意練習的意思
summarize :總結,概述
critic :批評家,評論家
overall :所有的;全體的
expertise 專門知識·
continually :不斷地;頻繁的

References

參考文獻

Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Bryan, W.L. & Harter, N. "Studies on the telegraphic language: The acquisition of a hierarchy of habits. Psychology Review, 1899, 8, 345-375

Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.

Chase, William G. & Simon, Herbert A. "Perception in Chess" Cognitive Psychology, 1973, 4, 55-81.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.

References :參考文獻

 


Answers

Approximate timing for various operations on a typical PC:

在一臺普通的電腦上執行各類命令須要的時間

Approximate :近似的
timing :定時;調數;時間選擇;爲...安排時間
various :各類各樣的
operations :運做
typical :典型的
nanosec :毫秒

 

execute typical instruction 1/1,000,000,000 sec = 1 nanosec
fetch from L1 cache memory 0.5 nanosec
branch misprediction 5 nanosec
fetch from L2 cache memory 7 nanosec
Mutex lock/unlock 25 nanosec
fetch from main memory 100 nanosec
send 2K bytes over 1Gbps network 20,000 nanosec
read 1MB sequentially from memory 250,000 nanosec
fetch from new disk location (seek) 8,000,000 nanosec
read 1MB sequentially from disk 20,000,000 nanosec
send packet US to Europe and back 150 milliseconds = 150,000,000 nanosec

Appendix: Language Choice

語言的選擇

Several people have asked what programming language they should learn first. There is no one answer, but consider these points:

appendix :附錄

做者說,沒有一個固定的答案,可是也給了一些建議

一、看看你的朋友怎麼說,他們用的什麼系統,他們使用什麼語言,他們可以給你什麼建議,這樣作的優點,就是快速瞭解各類系統和語言之間的差別,也能夠各類逛論壇,尋找新朋友。你要考慮的是這門語言的社區是否夠大,是否是一個快要掛掉的社區。經過讀書,網站,論壇,在線幫助能不能快速找到你的問題的答案。你是否喜歡這個社區的人們,你喜歡和他們討論各類問題和交流嗎?

二、簡單一點,像C++和JAVA是爲專業的程序開發人員設計的,他們關心的是代碼在環境中的運行速度。結果就是,這些語言被設計的很複雜,你入門編程不須要這麼複雜的語言。你須要那種被設計的很簡單,並且容易記憶的語言,專爲初學者設計的語言。

三、開始動手,就像學習彈鋼琴同樣,你按下一個鍵,就能聽到音符的聲音,這就是交互式的學習。或者「批處理」模式,就像在你彈完一首曲子後,立刻就能聽到。交互式學習,讓學習變得簡單。對於編程也是同樣,那麼就堅持使用交互式模式學習編程吧。 (應該有專門的交互式學習環境,我也沒了解過,可是我在學習vim的時候,官方文檔中是有交互式的學習文檔,並且還找到了vim學習的交互式遊戲網站)

  • Use your friends. When asked "what operating system should I use, Windows, Unix, or Mac?", my answer is usually: "use whatever your friends use." The advantage you get from learning from your friends will offset any intrinsic difference between OS, or between programming languages. Also consider your future friends: the community of programmers that you will be a part of if you continue. Does your chosen language have a large growing community or a small dying one? Are there books, web sites, and online forums to get answers from? Do you like the people in those forums?
  • Keep it simple. Programming languages such as C++ and Java are designed for professional development by large teams of experienced programmers who are concerned about the run-time efficiency of their code. As a result, these languages have complicated parts designed for these circumstances. You're concerned with learning to program. You don't need that complication. You want a language that was designed to be easy to learn and remember by a single new programmer.
  • Play. Which way would you rather learn to play the piano: the normal, interactive way, in which you hear each note as soon as you hit a key, or "batch" mode, in which you only hear the notes after you finish a whole song? Clearly, interactive mode makes learning easier for the piano, and also for programming. Insist on a language with an interactive mode and use it.
advantage :優點,獲利
offset :抵消,偏離量
intrinsic :本質的,固有的
community :社區
dying :臨終的,死
forums :論壇
concerned :有關的
efficiency :效率
complicated :難懂的,複雜的
circumstances :環境
complication :併發症;複雜
interactive :交互式的
note :筆記,音符
batch :一批;一爐n;分批處理vt
Insist :堅持,強調

 

Given these criteria, my recommendations for a first programming language would be Python or Scheme. Another choice is Javascript, not because it is perfectly well-designed for beginners, but because there are so many online tutorials for it, such as Khan Academy's tutorial. But your circumstances may vary, and there are other good choices. If your age is a single-digit, you might prefer Alice or Squeak or Blockly (older learners might also enjoy these). The important thing is that you choose and get started.

基於這些條件,我推薦的語言是Python和Scheme。另外一個選擇是Javascript(前端編程語言),不是由於他們設計的完美,而是由於,能在網上找到不少這些語言的教程,像可汗學院。每一個人的狀況也是不一樣的,若是是10歲如下的小孩子,我建議是Alice or Squeak or Blockly (年齡大一些的我也建議,也能從中學到東西),最重要的是你選擇以後,開始學習,並堅持下去(最後這個是我本身加的)

given :贈予的;沉溺的;考慮到
criteria :標準,條件
recommendations :推薦
perfectly :完美的
tutorials :教程
circumstances :狀況,環境 /'sɜːkəmst(ə)ns/
vary :變化
single-digit :個位數,單位數

Appendix: Books and Other Resources

附錄:推薦的書和資源

Several people have asked what books and web pages they should learn from. I repeat that "book learning alone won't be enough" but I can recommend the following:

Resources :資源
recommend :推薦
following :下面的

Notes

T. Capey points out that the Complete Problem Solver page on Amazon now has the "Teach Yourself Bengali in 21 days" and "Teach Yourself Grammar and Style" books under the "Customers who shopped for this item also shopped for these items" section. I guess that a large portion of the people who look at that book are coming from this page. Thanks to Ross Cohen for help with Hippocrates.

 

下一篇:Five things that make Go fast

相關文章
相關標籤/搜索