[转载]10年编程无师自通(推荐一看)

一些研究者(Hayes、Bloom)的研究表明,在许多领域,都需要大约10 年时间才能培养出专业技能,包括国际象棋、作曲、绘画、钢琴、游泳、网球,以及神经心理学和拓扑学的研究。似乎并不存在真正的捷径:即使是莫扎特,他4 岁就显露出音乐天才,在他写出世界级的音乐之前仍然用了超过13年时间。再看另一种音乐类型的代表--披头士,他们似乎是在1964年的Ed Sullivan节目中突然冒头的。但其实他们从1957年就开始表演了,即使他们很早就显示出了巨大的吸引力,他们第一次真正的成功之作《Sgt. Peppers》也要到1967年才发行。Samuel Johnson(译注:英国诗人)认为10 年还是不够的:“任何领域的卓越成就都只能通过一生的努力来获得;稍低一点的代价也换不来。”(Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.) 乔叟(译注:Chaucer,英国诗人,1340-1400)也抱怨说:“生命如此短暂,掌握技艺却要如此长久。”(the lyf so short, the craft so long to lerne.)
下面是我在编程这个行当里获得成功的处方:

  • 编程感兴趣,因为乐趣而去编程。确定始终都能保持足够的乐趣,以致你能够将10年时间投入其中。
  • 跟其他程序员交谈;阅读其他程序。这比任何书籍或训练课程都更重要。
    编程。最好的学习是从实践中学习。用更加技术性的语言来讲,“个体在特定领域最高水平的表现不是作为长期的经验的结果而自动获得的,但即使是非常富有经验的个体也可以通过刻意的努力而提高其表现水平。”(p. 366),而且“最有效的学习要求为特定个体制定适当难度的任务,有意义的反馈,以及重复及改正错误的机会。”(p. 20-21)《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》(在实践中认知:心智、数学和日常生活的文化)是关于这个观点的一本有趣的参考书。
  • 如果你愿意,在大学里花上4年时间(或者再花几年读研究生)。这能让你获得一些工作的入门资格,还能让你对此领域有更深入的理解,但如果你不喜欢进学校,(作出一点牺牲)你在工作中也同样能获得类似的经验。在任何情况下,单从书本上学习都是不够的。“计算机科学的教育不会让任何人成为内行的程序员,正如研究画笔和颜料不会让任何人成为内行的画家”,Eric Raymond,《The New Hacker's Dictionary》(新黑客字典)的作者如是说。我曾经雇用过的最优秀的程序员之一仅有高中学历;但他创造出了许多伟大的软件,甚至有讨论他本人的新闻组,而且股票期权让他达到我无法企及的富有程度(译注:指Jamie Zawinski,XEmacs和Netscape Navigator的作者)。
  • 跟别的程序员一起完成项目。在一些项目中成为最好的程序员;在其他一些项目中当最差的一个。当你是最好的程序员时,你要测试自己领导项目的能力,并通过你的洞见鼓舞其他人。当你是最差的时候,你学习高手们在做些什么,以及他们不喜欢做什么(因为他们让你帮他们做那些事)。
  • 接手别的程序员完成项目。用心理解别人编写的程序。看看在没有最初的程序员在场的时候理解和修改程序需要些什么。想一想怎样设计你的程序才能让别人接手维护你的程序时更容易一些。
  • 学会至少半打编程语言。包括一门支持类抽象(class abstraction)的语言(如Java或C++),一门支持函数抽象(functional abstraction)的语言(如Lisp或ML),一门支持句法抽象(syntactic abstraction)的语言(如Lisp),一门支持说明性规约(declarative specification)的语言(如Prolog或C++模版),一门支持协程(coroutine)的语言(如Icon或Scheme),以及一门支持并行处理(parallelism)的语言(如Sisal)。
  • 记住在“计算机科学”这个词组里包含“计算机”这个词。了解你的计算机执行一条指令要多长时间,从内存中取一个word要多长时间(包括缓存命中和未命中的情况),从磁盘上读取连续的数据要多长时间,定位到磁盘上的新位置又要多长时间。(答案在这里。)
  • 尝试参与到一项语言标准化工作中。可以是ANSI C++委员会,也可以是决定自己团队的编码风格到底采用2个空格的缩进还是4个。不论是哪一种,你都可以学到在这门语言中到底人们喜欢些什么,他们有多喜欢,甚至有可能稍微了解为什么他们会有这样的感觉。
  • 拥有尽快从语言标准化工作中抽身的良好判断力。

抱着这些想法,我很怀疑从书上到底能学到多少东西。在我第一个孩子出生前,我读完了所有“怎样……”的书,却仍然感到自己是个茫无头绪的新手。30个月后,我第二个孩子出生的时候,我重新拿起那些书来复习了吗?不。相反,我依靠我自己的经验,结果比专家写的几千页东西更有用更靠得住。
Fred Brooks在他的短文《No Silver Bullets》(没有银弹)中确立了如何发现杰出的软件设计者的三步规划:

尽早系统地识别出最好的设计者群体。
指派一个事业上的导师负责有潜质的对象的发展,小心地帮他保持职业生涯的履历。
让成长中的设计师们有机会互相影响,互相激励。

这实际上是假定了有些人本身就具有成为杰出设计师的必要潜质;要做的只是引导他们前进。Alan Perlis说得更简洁:“每个人都可以被教授如何雕塑;而对米开朗基罗来说,能教给他的倒是怎样能够不去雕塑。杰出的程序员也一样”。
所以尽管去买那些Java书;你很可能会从中找到些用处。但你的生活,或者你作为程序员的真正的专业技术,并不会因此在24小时、24天甚至24个月内发生真正的变化。

时间: 2024-11-08 19:16:30

[转载]10年编程无师自通(推荐一看)的相关文章

开发心得分享:10年编程无师自通

编程|心得 原文:Teach Yourself Programming in Ten Years 作者:Peter Norvig 翻译:郭晓刚(foosleeper@163.net) 最后修订日期:2004-3-19 2005-01-12增加了新的译本链接. 本中文译本得到了Peter Norvig的许可. 为什么每个人都急不可耐? 走进任何一家书店,你会看见<Teach Yourself Java in 7 Days>(7天Java无师自通)的旁边是一长排看不到尽头的类似书籍,它们要教会你V

PHP多进程编程总结(推荐)_php实例

1. 准备 在动手之前,请确定你用的不是M$ Windows平台(因为我没有Windows).Linux / BSD / Unix应该都是没问题的.确认好了工作环境以后一起来看看我们需要的PHP模块是否都有.打开终端输入下面的命令: $ php -m 这个命令检查并打印当前PHP所有开启的扩展,看一下pcntl和posix是否在输出的列表中. 1.1. pcntl 如果找不到pcntl,八成是编译的时候没把这个扩展编译进去.如果你和我一样是编译安装的PHP,那么需要重新编译安装PHP.在配置的时

PHP多进程编程总结(推荐)

1. 准备 在动手之前,请确定你用的不是M$ Windows平台(因为我没有Windows).Linux / BSD / Unix应该都是没问题的.确认好了工作环境以后一起来看看我们需要的PHP模块是否都有.打开终端输入下面的命令: $ php -m 这个命令检查并打印当前PHP所有开启的扩展,看一下pcntl和posix是否在输出的列表中. 1.1. pcntl 如果找不到pcntl,八成是编译的时候没把这个扩展编译进去.如果你和我一样是编译安装的PHP,那么需要重新编译安装PHP.在配置的时

每位开发人员都应铭记的10句编程谚语

所谓谚语,就是用言简意赅.通俗易懂的方式传达人生箴言和普遍真理的话,它们能很好地帮助你处理生活和工作上的事情.也正因如此,我才整理了10句编程谚语,每位开发人员都应该铭记他们,武装自己. 1. 无风不起浪 别紧张,这也许只是一场消防演习 代码设计是否糟糕,从某些地方就可以看出来.比如: a. 超大类或超大函数 b. 大片被注释的代码 c. 逻辑重复 d. If/else嵌套过深 程序员们通常称它们作代码异味(Code Smell),但是就我个人认为"代码警报"这个名字更为合适一些,因为

android-求Android数据库及网络编程资料推荐

问题描述 求Android数据库及网络编程资料推荐 求Android数据库及网络编程资料推荐,最好有链接!小弟买了一本<android从入门到精通>,数据库和网络编程讲的很少 解决方案 android是客户端环境,不太适合数据库,一般都是在服务器端放数据库,用jsp或者asp.net访问.android就算用数据库,也是用的sqlite等很简单的数据库,没什么好写的. 解决方案二: 第一行代码 郭霖.多学习CSDN的博客,和自己写博客 解决方案三: 我推荐你一本书<疯狂java讲义>

《C语言编程初学者指南》一1.10 编程挑战

1.10 编程挑战 1.学习附录B中的Vim快速指南. 2.学习附录C中的nano快速指南. 3.学习附录D中的Tiny C Compiler(TCC)快速指南. 4.编写一个程序,打印出你的名字. 5.编写一个程序,使用转义序列\"打印出引号. 6.编写一个程序,使用转义序列\打印出如下的目录结构:c:\cygwin\home\administrator. 7.编写一个程序,打印出如下的菱形. 8.使用当前的月份,编写出一个日历程序(类似于图1.6所示). 本文仅用于学习和交流目的,不代表异步

10年后编程还有意义吗?

这个是 Quora 上提出的一个问题.随着 AI 在近年来成为热门话题,并且在 AlphaGo 自学围棋击败了人类近 10 年最好的围棋选手之后,有人开始提出这个问题.具体来说这个问题有三层意思: 到 2025 年程序员还有没有用,到那个时候所谓的 "程序员" 是指什么? 代码本身还有没有用,到那时候代码会变成什么样子? 机器智能会不会取代(目前意义的)代码或程序员两者的其中一个或者全部? 大家基本上倾向于认为,到 2025 年时编程仍然有意义,但有人说 2025 年以后情况可能就不是

10句编程箴言 每个程序员都应该知道

导读:原文作者Kevin Pang在kevinwilliampang.com发表一篇<10 Programming Proverbs Every Developer Should Know>.译文由伯乐在线整理编译成<10句编程箴言 每个程序员都应该知道>.文章内容如下: 所谓谚语,就是用言简意赅.通俗易懂的方式传达人生箴言和普遍真理的话,它们能很好地帮助你处理生活和工作上的事情.也正因如此,我才整理了10句编程谚语,每位开发人员都应该铭记他们,武装自己. 1. 无风不起浪 别紧张

你必须知道的10大编程格言

我读了Kevin Pang 的一篇可能非常老但非常好的有趣文章:每个程序员都该知道的10大编程格言. Kevin给了我们10条按他的观点的每个程序员必须知道的编程格言. 可以看出,这都是不错的格言,而下面是我自己最喜欢的编程格言. 保持简单直白(Keep It Simple Stupid) 不要自我复制(Don't Repeat Yourself) 能干的人解决问题.智慧的人绕开问题(A clever person solves a problem. A wise person avoids i