无障碍 关怀版

我的 10 年自学编程之路

原标题:我的 10 年自学编程之路

为什么每个人都这样匆忙?

走进任何一家书店,你都能看到诸如《24小时自学Java》这样的书,可能书名中的Java会变成C、SQL、Ruby、算法等,然后24小时会变成n天或n小时。在亚马逊高级搜索[title: teach, yourself, hours, since: 2000 ,你会发现有512种这样的书籍。排在前10位的,9个是编程类的书(还有一个是关于财务会计的)。还有多种变化,例如“学习”替换“自学”,“天”替换“小时”。

结论:要么大家都特别匆忙地在学习编程,要么编程在某种程度上令人难以置信地比其他任何东西都更容易学习。Felleisen等人在他们《How to Design Programs》这本书中对这种趋势表示了赞同——“写出不好的程序很容易。傻瓜也可以在21天时间内学习编程。即使他们毫无基础。”

让我们来分析一下,类似于《24小时自学C++》这样的书意味着:

  • 自学:在这24小时内,你不会有时间写一些有意义的程序,因此不能从中总结成功或失败的经验教训。你不会有时间和有经验的程序员工作,因此不知道生活在一个C ++环境中是什么样的。总之,你不会有时间学到太多东西。这本书只会触及一些表层的东西,不会让你有一个深入的理解。正如Alexander Pope说的那样,浅学误人。

  • C ++:在这24小时内,你也许可以学到一些C ++的语法(如果你学过另一种语言的话),但你无法学到该如何使用这语言。简而言之,假设你是一个Basic程序员,那么你可能会用Basic语言的风格去编写C ++语法程序,也就是说你不会真正明白C ++真正的优势(和劣势)。那么,这还有什么意义呢?Alan Perlis曾经说过:“如果编程语言不能影响你的编程思维,那就不值得去学”。一种可能的情况是,你必须学习一点C++(或者更可能的,是Java或进程处理),因为你需要用来与现有的工具配合完成特定任务。但此时你不是在学习如何编程:你学习的是如何完成任务。

  • 24小时:不幸的是,这是不够的,具体原因下面会讲到。

自学:在这24小时内,你不会有时间写一些有意义的程序,因此不能从中总结成功或失败的经验教训。你不会有时间和有经验的程序员工作,因此不知道生活在一个C ++环境中是什么样的。总之,你不会有时间学到太多东西。这本书只会触及一些表层的东西,不会让你有一个深入的理解。正如Alexander Pope说的那样,浅学误人。

C ++:在这24小时内,你也许可以学到一些C ++的语法(如果你学过另一种语言的话),但你无法学到该如何使用这语言。简而言之,假设你是一个Basic程序员,那么你可能会用Basic语言的风格去编写C ++语法程序,也就是说你不会真正明白C ++真正的优势(和劣势)。那么,这还有什么意义呢?Alan Perlis曾经说过:“如果编程语言不能影响你的编程思维,那就不值得去学”。一种可能的情况是,你必须学习一点C++(或者更可能的,是Java或进程处理),因为你需要用来与现有的工具配合完成特定任务。但此时你不是在学习如何编程:你学习的是如何完成任务。

24小时:不幸的是,这是不够的,具体原因下面会讲到。

研究人员(Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) 表明,我们大约需要10年的时间来发展任何一种广泛领域的专业知识,例如国际象棋,音乐作曲,电报操作,绘画,钢琴,游泳,网球,以及神经心理学和拓扑学等。思考性的实践是关键:不要只是一遍又一遍地做,而是要用超出你现有能力的任务挑战自己,尝试它,在你做的时候和做完之后分析自己的表现,并纠正错误。然后重复,再重复。这里没有真正的捷径:即使是4岁时就已经享誉为音乐神童的莫扎特,也依然花了13年的时间才开始做出世界一流的音乐。

Malcolm Gladwell通俗化了这个思想观点,虽然他专注编程10,000小时,而不是10年。Henri Cartier-Bresson (1908-2004)还有另外一个指标:“你的前一万张照片正是你最糟糕的作品。”(他没有考虑到数码相机,拥有数码相机使人在一周内达到这一标准。)真正的专业化可能需要一生的时间:Samuel Johnson (1709-1784)说,“只有通过一生的努力才能在某一学科取得卓越成就:打了折扣的就学不到家。”以及Chaucer (1340-1400)曾抱怨说:“生之有限,学也无涯。”Hippocrates (c. 400BC)更是以“生命短暂,艺术长远”的语录而闻名。因此,假设所有技能(如编程,下棋,玩跳棋,玩音乐)都可以在相同量的时间内掌握,是不合理的,而且每个人所需的时间也不会完全相同。正如 K. Anders Ericsson教授所说的那样,“在大多数领域中,表明即使是最有才华的人也需要多少的时间才能达到最高的性能水平的言论,是值得关注的。10000个小时这个数值只是给你一个概念而已,因为每个人的学习能力也不尽相同。“

所以,你想成为一个程序员吗?

下面是我编程成功秘诀:

  • 对编程感兴趣,然后因为它有趣而去写程序。请确保保持足够的乐趣,这样你才会心甘情愿地花费10年/ 10,000小时在编程上。

  • 编程。最好的学习方式是边做边学。用更技术化的说法就是,“对于个人,在给定领域中最高层次的表现,不会因为经验的增加而自动获得,但是性能水平可以由于经验丰富的个人改善有意识的努力而增加。(p 366)” 还有,“最有效的学习需要明确的任务,针对特定个体的适当难度水平,信息反馈,以及重复和改正错误的机会。” (p 20-21)。对于这个观点,可以参考《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》这本书。

  • 与其他程序员交谈;阅读其他程序。这比任何书本和训练课程都更重要。

  • 如果你想的话,可以花四年时间去读大学(或更多时间去读研究生)。上大学使得你有机会接触到一些需要学历证明的工作,而且能够更深入地了解这个领域,但如果你不喜欢学校的话,你也可以(通过一些贡献)获得相似的工作经历。在任何情况下,单靠书本知识是远远不够的。“计算机教育并不比学习更能造就程序专家,就像颜料不能使人成为绘画专家一样。”Eric Raymond,《The New Hacker’s Dictionary》的作者这样说道。我曾经聘用的最好的程序员之一就只有高中学历——他制作了许多优秀的软件,有他自己的新闻组,并且在股票期权上赚到了足够多的钱买下属于他的酒吧。

  • 和其他程序员一起做项目。在一些项目上成为最好的程序员;在一些其他的项目上则是最差的程序员。当你是最好的程序员的时候,你需要测试自己的能力来带领项目,并且用你的观点激励他人。当你是最差的程序员的时候,你需要向大师学习,并且学习去做那些他们不喜欢的事情(因为他们会让你为他们做这些事)。

  • 在其他程序员之后接手项目。理解别人写的程序。知道如何理解和修复程序,当初始程序员不在身边的时候。思考如何设计你的程序使其更容易在你之后被人维护。

  • 学习至少半打编程语言。包括一种注重类抽象的语言(如Java或C ++),一种注重函数抽象的语言(如Lisp或ML或Haskell),一种支持语法抽象的语言(如Lisp),一种支持声明性规范的语言(如Prolog或C ++模板),以及一种注重并行的语言(如Clojure或Go)。

  • 请记住,“计算机科学”中包含“计算机”。知道你的计算机需要多长时间才能执行一条指令、从内存中(有和没有缓存未命中)读取一个单词、从磁盘中读取连续的单词、以及搜寻磁盘上的新位置。(答案在这里。)

  • 涉足一种语言的标准化工作。可以是ANSI C ++,也可以是决定自己团队的编码风格是否要有2个或4个空格的缩进。无论哪种方式,你会了解到其他人在某种语言中喜欢什么,程度有多深,甚至一些关于为什么他们这么觉得的原因。

  • 有良好的意识能够尽可能快的脱离语言标准化工作。

对编程感兴趣,然后因为它有趣而去写程序。请确保保持足够的乐趣,这样你才会心甘情愿地花费10年/ 10,000小时在编程上。

编程。最好的学习方式是边做边学。用更技术化的说法就是,“对于个人,在给定领域中最高层次的表现,不会因为经验的增加而自动获得,但是性能水平可以由于经验丰富的个人改善有意识的努力而增加。(p 366)” 还有,“最有效的学习需要明确的任务,针对特定个体的适当难度水平,信息反馈,以及重复和改正错误的机会。” (p 20-21)。对于这个观点,可以参考《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》这本书。

与其他程序员交谈;阅读其他程序。这比任何书本和训练课程都更重要。

如果你想的话,可以花四年时间去读大学(或更多时间去读研究生)。上大学使得你有机会接触到一些需要学历证明的工作,而且能够更深入地了解这个领域,但如果你不喜欢学校的话,你也可以(通过一些贡献)获得相似的工作经历。在任何情况下,单靠书本知识是远远不够的。“计算机教育并不比学习更能造就程序专家,就像颜料不能使人成为绘画专家一样。”Eric Raymond,《The New Hacker’s Dictionary》的作者这样说道。我曾经聘用的最好的程序员之一就只有高中学历——他制作了许多优秀的软件,有他自己的新闻组,并且在股票期权上赚到了足够多的钱买下属于他的酒吧。

和其他程序员一起做项目。在一些项目上成为最好的程序员;在一些其他的项目上则是最差的程序员。当你是最好的程序员的时候,你需要测试自己的能力来带领项目,并且用你的观点激励他人。当你是最差的程序员的时候,你需要向大师学习,并且学习去做那些他们不喜欢的事情(因为他们会让你为他们做这些事)。

在其他程序员之后接手项目。理解别人写的程序。知道如何理解和修复程序,当初始程序员不在身边的时候。思考如何设计你的程序使其更容易在你之后被人维护。

学习至少半打编程语言。包括一种注重类抽象的语言(如Java或C ++),一种注重函数抽象的语言(如Lisp或ML或Haskell),一种支持语法抽象的语言(如Lisp),一种支持声明性规范的语言(如Prolog或C ++模板),以及一种注重并行的语言(如Clojure或Go)。

请记住,“计算机科学”中包含“计算机”。知道你的计算机需要多长时间才能执行一条指令、从内存中(有和没有缓存未命中)读取一个单词、从磁盘中读取连续的单词、以及搜寻磁盘上的新位置。(答案在这里。)

涉足一种语言的标准化工作。可以是ANSI C ++,也可以是决定自己团队的编码风格是否要有2个或4个空格的缩进。无论哪种方式,你会了解到其他人在某种语言中喜欢什么,程度有多深,甚至一些关于为什么他们这么觉得的原因。

有良好的意识能够尽可能快的脱离语言标准化工作。

知道了上面这些,你会质疑书本学习究竟能帮助我们走多远。在我第一个孩子出生前,我阅读了所有《如何……》的书籍,但仍然感觉自己像个手足无措的新手。30个月后,当我第二个孩子出生的时候,我又再次回到书本中复习了吗?不,相反,我依赖的是我的个人经验,而这其实比那些专家撰写的成千上万页的书本更为有用的多,也更让我放心。

Fred Brooks,在他的随笔《No Silver Bullet》制定了一个三步走的计划,用来寻找优秀的软件设计师:

系统化地尽早识别顶级的设计师。

分配职业导师负责未来的成长,并认真保存其职业文档。

为设计师的互动和相互促进成长提供机会。

这是假定一些人已经具备了成为一个伟大的设计师所需要的品质;工作不过是引导他们前进。Alan Perlis说得更简洁:“我们可以教每一个人去雕刻:米开朗基罗也曾被教导不要怎么样。伟大的程序员也是如此。”Perlis的意思是说,伟人所拥有的一些内在品质,超越了训练。但是,这些品质从何而来?它是与生俱来的?亦或者是通过勤奋而开发的?正如Auguste Gusteau(《Ratatouille》电影中的虚构厨师)所说的那样,“任何人都可以做饭,但只有无畏者才能成就伟大。”我觉得这里的无畏更像是愿意奉献自己生活中很大的一部分时间到思考实践中的意思。可能无畏是对此的总结。或者,正如Gusteau的评论员,Anton Ego说的那样说:“不是每个人都能成为伟大的艺术家,但是伟大的艺术家可以来自任何地方。”

所以尽管去买那些Java / Ruby/Java / PHP的书;你可能将会从中得到一些用处。但它们改变不了你的生活,你也不可能在24小时或21天内成长为一个真正全面化的专业程序员。千里之行始于足下,从现在开始努力吧……

原文:http://www.norvig.com/21-days.html

译文:http://www.codeceo.com/article/10-years-self-learn-programming.html 返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()
推荐阅读

代做工资流水公司威海办银行流水单合肥查询薪资银行流水太原薪资流水办理上海流水账单价格佛山代办企业流水打印菏泽银行流水PS报价滁州做背调银行流水佛山做房贷收入证明天津转账流水费用吉林车贷流水图片德阳背调流水报价东莞打印工资流水账单中山打印房贷流水重庆制作贷款银行流水厦门银行流水修改多少钱沧州企业对私流水开具南昌房贷工资流水 模板沈阳办理入职流水赣州入职流水价格德阳房贷流水打印柳州查询银行流水账曲靖开背调银行流水荆州银行流水账价格唐山打印贷款流水兰州车贷流水代开滁州代办企业对公流水天津房贷流水打印蚌埠企业贷流水费用沈阳在职证明报价天津查离职证明香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化