<Teach Yourself Programming in Ten Years>十年之后,教你怎么样编程。

Teach Yourself Programming in Ten Years 

                Peter Norvig 

Why is everyone in such a rush?

为什么每个人都那么匆忙?(急功近利)


不管你走进任何一个书店,你都会发现这字眼,“如何在7天内速成Java”,或者多种多样的那种,“如何在几天内或者几个小时内学会Visual Basic,Windows,Internet”,等等。我在Amazon.com 做了下列调查。 

I did the following power search at Amazon.com:)

  pubdate: after 1992 and title: days and

      (title: learn or title: teach yourself)


并且得到了248个回馈。这首先的是,这有78本都是有关计算机方面的书(第79本就是,30天学会孟加拉语.Learn Bengali in 30 days).我把Hours代替了“days”,并得到了非常相似的结果:253本书,有77本关于计算机的书籍。其次就是“Teach Yourself Grammar and Style in 24 Hours ,排名第78。在销量前200的书籍之外,基本上96%上的都是计算机书籍。(翻译排名的挺怪的,反正作者的意思就是,计算机的书比较多 :))


The conclusion is that either people are in a big rush to learn about computers, or that computers are somehow fabulously easier to learn than anything else. There are no books on how to learn Beethoven, or Quantum Physics, or even Dog Grooming in a few days. 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.

这个结论说明了,每一个人都那么疯狂的去学习计算机,又或者是,相对与其他专业都那么好学一样。在这几年,对于那些怎样去学习贝多芬或者量子物理学,甚至怎样给狗打扮,都是没有相关的书籍的。Fellesisen et al.在How to Design Programs 这本书里面,非常同意这样的看法,他说,“Bad Programming”才是很简单的。

Let's analyze what a title like Learn C++ in Three Days could mean:

让我们来分析一下,有这样的title“Learn C++ in Three Days ”,上面说:

  • Learn: In 3 days 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.
  • 学习:在3天内,你不会写出几个非常著名的项目,但是,你可以在成功和失败上面学到一些东西。你不会有时间和非常有经验的工程师一起工作,并且也不理解C++的环境。短期,你不会充分的深刻的理解他们。所以,这些书籍只会讲解非常浅显的内容,而不是特别深的。Alexander Pope 说,一点点学习是一个非常危险的事情。
  • C++: In 3 days 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 Flash's Flex) 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.
  • C++:在3天内,你可能会学习一些C++的语法(如果你一直学过其他相似的语言),但是你可能会短期内熟练掌握这种语言的使用。短期,作为一个初级的编程人员,你可能会写出一个C++的程序,但是你并不知道这个C++是否是高效的(or not)。所以,重点是?Alan Perlis  曾经说过:“一个语言并不能影响你思考程序的方式,而在于去想怎么完成它。”一个可能点就是,你会去学习小字节的C++【tiny bit of C++】(更多的可能,或者是JavaScript 或者 Flash's Flex),因为你需要去用现有的工具去完成这样的接口去完成一个制定的任务。到那个时候,你学的其实不是怎样去编程,而是去学习去完成那项任务。
  • in Three Days: Unfortunately, this is not enough, as the next section shows.
  • in Three Days:不幸的事,这些还不够,下一下章节会有涉及。

Teach Yourself Programming in Ten Years

教你怎样在10年会编程

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. Malcolm Gladwell reports that a study of students at the Berlin Academy of Music compared the top, middle, and bottom third of the class and asked them how much they had practiced:

在这篇(Bloom (1985)Bryan & Harter (1899)Hayes (1989)Simmon & Chase (1973)) 文章里面说,在任何领域做到专业水平,都需要花费10年时间,其中都包括下棋,音乐会,电报操作,打印,演奏钢琴,游泳,打网球,和研究神经心理学和拓扑学。这些测试的关键在于:不只是一次又一次这样做。在你现有的能力上面挑战自己,尝试他,挑战它,分析现有自己的表现,之后纠正自己的错误,之后,在一直不断的重复,尝试。这很显然是,永远没有捷径!即使莫扎特,在4岁被认为是音乐神童,也花了超过13年的时间才创造出一个世界级的音乐。


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年中会有10,000个小时保持着兴趣并且推动你成长。
  • 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 bookCognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.
  • 编程。最好的方法就是,做着学着。learning by doing. 说的更技术一点,“作为拓展体验功能,单独给定域的最大等级的性能是不会自动增加的,但是,对于性能等级提升是对于有经验的的独立人来说的。” (p. 366) 并且“最高的有效率的学习是需要有well-defined ,有合适难度的任务。书《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life 》是一本很有意思的书籍,正好也支持了这个观点。
  • 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.
  • 如果你想把你4年的时间都花费在大学(或者毕业学校)。这里会给你一些相关的工作认证的证书,并且会加深你对相关专业领域的理解。但是,如果你不喜欢在学校,你可以(和一些特殊贡献的)有你工作上有相似经验的人一起。在很多方面上,书籍上的内容往往是不够的。”计算机科学教育部门也不能让所有的人成为专家,不会比那些研究刷子,画笔的人更成为画笔专家。Eric Raymond说。一位很伟大的程序大家只有高中文凭。但他制作了很多伟大的软件,他有自己的news group,他也有足够的股票去买属于自己的nightclub.
  • 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).
  • 和其他编程人员一起工作在一个项目中。在一些项目中做到最好的程序人员。在其他方面做的最糟糕。当你做到最好的时候,你可以检测你领导项目的能力,也会鼓舞人心。当你做的最糟糕的时候,你可以学到其他主管是怎么管理的,你可以学到什么是他们不喜欢做的(因为他们会让你做)
  • 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.
  • 在其他的编程人员工作之后。了解整个项目。去看看什么还需要去了解,并且在原来工程项目中没有修复的东西。想想怎样设计出一个好的程序,会让事情变得更简单。
  • Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal).
  • 学习至少一门冷门的编程语言。那些可以包括一种语言支持一种类属性(像Java 或者C++),那种可以支持多个函数属性的(像Lisp 或者ML),那种可以支持同步属性(像Lisp),一种可以支持声明变量的(像Prolog 或者C++模板),一种可以支持协成(像Icon 或者 Schema),一直支持并行的(像Sisal)
  • 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.)
  • 记住“计算机”在“计算机科学”里面。知道你的计算机执行一条指令要花费多长时间去从内存中读取一个文字(包括和不包括没有cache命中),从磁盘连续的读取出来,自动磁盘寻道。
  • 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++委员会,或者可能确定你本地编码是2 或者4个空间的缩进。任何一种,你都能学到其他人喜欢什么语言,他们喜欢的程度,大概也能才到为什么他们会有这样的感觉。
  • Have the good sense to get off the language standardization effort as quickly as possible.
  • 有一个非常好的第六感。要尽快逃脱这样语言定义的这样的工作,越快愈好!

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 theHow 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.

把那些都记载脑子里面,但是你也会质疑你从书籍中学到的东西。在我第一个小孩出生之前,我读完所有的”HOW TO “books,仍然感觉是个手足无措的新手,30个月之后,当我第二个小孩出生,我又重读了一边?No,不是。我完全凭着自己的经验,直觉完成了,那样的效率比专家写上1000页的文章要强的很多。

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

Fred Brooks,在他的文章中”No Silver Bullet“ 写到这三个计划。为了找到更好的软件设计师:


  1. Systematically identify top designers as early as possible.
  2. Assign a career 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.
  4. 系统的去认证顶级的设计师,越早越好
  5. 分配一个事业部负责那些有潜力的对象,并且小心的保持这他们的职业生涯
  6. 提供一个设计师一个相互交流,相互认识的机会


因此,继续去购买Java / Ruby/ Javascript / PHP的书,你可能会得到一些使用了。 但你不会改变你的生活,或者你真正的整体专业知识,在24小时内,几天,甚至几周程序员。 如何努力工作,不断提高超过24个月呢? 好了,现在你开始得到的地方...



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值