Teach Yourself Programming in Ten Years - 渣渣翻译之编程是十年磨一剑

原文地址:http://norvig.com/21-days.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."

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.

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

  • 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》这样的标题的书,表达出来的是什么。

  • 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、尽早系统的的识别出顶尖工程师

2、每个人分配一个职业生涯导师

3、提供机会,让这些人相互交流和激励

  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 :附录

作者说,没有一个固定的答案,但是也给了一些建议

1、看看你的朋友怎么说,他们用的什么系统,他们使用什么语言,他们能够给你什么建议,这样做的优势,就是快速了解各种系统和语言之间的差异,也可以各种逛论坛,寻找新朋友。你要考虑的是这门语言的社区是否够大,是不是一个快要挂掉的社区。通过读书,网站,论坛,在线帮助能不能快速找到你的问题的答案。你是否喜欢这个社区的人们,你喜欢和他们讨论各种问题和交流吗?

2、简单一点,像C++和JAVA是为专业的程序开发人员设计的,他们关心的是代码在环境中的运行速度。结果就是,这些语言被设计的很复杂,你入门编程不需要这么复杂的语言。你需要那种被设计的很简单,而且容易记忆的语言,专为初学者设计的语言。

3、开始动手,就像学习弹钢琴一样,你按下一个键,就能听到音符的声音,这就是交互式的学习。或者“批处理”模式,就像在你弹完一首曲子后,马上就能听到。交互式学习,让学习变得简单。对于编程也是一样,那么就坚持使用交互式模式学习编程吧。 (应该有专门的交互式学习环境,我也没了解过,但是我在学习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

 

posted @ 2019-05-18 20:48  游小刀  阅读(846)  评论(0编辑  收藏  举报
levels of contents