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

相关文章
相关标签/搜索