十年自学编程

为什么大家都这么着急

走进任何一家书店,你会看到《如何在24小时内自学Java》,以及《在几天或几个小时内教授C、SQL、Ruby、算法等无尽的变化》。自:2000年以来,发现了512本这样的书。在前十名中,有九本是关于编程书籍(另一本是关于簿记的)。类似的结果来自用"学习"代替"自学"或用"天"代替"小时"。

结论是,要么人们急于学习编程,要么编程比其他任何东西都容易学习。Felleisen等人在他们的书《如何设计程序》(How to Design Programs)中对这一趋势表示赞同,他们说"糟糕的编程很容易。白痴可以在21天内学会它,即使他们是傻瓜,但也有他们的看法。

让我们来分析一下像《24小时自学C++》这样的标题可能意味着什么:

自学

在24小时内,您将没有时间编写几个重要的程序,并从其中的成功和失败中学习。您将没有时间与经验丰富的程序员一起工作,也无法了解在C++环境中生活的感觉。简而言之,您将没有时间学习太多。所以这本书只能说是一种肤浅的熟悉,而不是一种深刻的理解。正如亚历山大·波普所说,一点点学习是一件危险的事情。

C++

在24小时内,你也许能够学习C++的一些语法(如果你已经懂得另一种语言),但你无法学到很多关于如何使用这种语言的知识。简而言之,如果你是一个Basic程序员,你可以学习使用C++语法以Basic的风格编写程序,但你无法了解C++实际上有什么好处(和坏处)。那么有什么意义呢?Alan Perlis曾经说过:"一门不影响你对编程的思考方式的语言,是不值得知道的。一个可能的点是,你必须学习一点点C++(或者更有可能的是,像JavaScript或Processing这样的东西),因为你需要与现有的工具接口来完成特定的任务。但是,您没有学习如何编程;你正在学习完成这项任务。

24小时

不幸的是,正如下一节所示,这还不够。

十年自学编程

研究人员(Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973))已经证明,在各种领域发展专业知识大约需要十年的时间,包括国际象棋、音乐作曲、电报操作、绘画、钢琴演奏、游泳、网球以及神经心理学和拓扑学的研究。关键是深思熟虑的练习:不仅仅是一次又一次地做,而是用一项超出你目前能力的任务来挑战自己,尝试一下,在做的时候和之后分析你的表现,并纠正任何错误。然后重复。然后重复一遍。似乎没有真正的捷径:即使是4岁时还是音乐神童的莫扎特,也花了13年多的时间才开始创作世界级的音乐。在另一种类型中,披头士乐队似乎以一连串#1的热门歌曲和1964年在Ed Sullivan节目中的出现而迸发出来。但自1957年以来,他们一直在利物浦和汉堡的小俱乐部打球,虽然他们很早就引起了大众的欢迎,但他们的第一个伟大的关键成功,Sgt. Peppers,于1967年发布。

马尔科姆·格拉德威尔(Malcolm Gladwell)已经普及了这个想法,尽管他专注于10,000小时,而不是10年。亨利·卡蒂埃-布列松(Henri Cartier-Bresson,1908-2004)还有另一个指标:“你的前10,000张照片是你最糟糕的。(他没有预料到,有了数码相机,有些人可以在一周内达到这个目标。真正的专业知识可能需要一生:塞缪尔·约翰逊(Samuel Johnson,1709-1784)说过:“任何部门的卓越成就都只能通过一生的劳动才能实现;它不能以较低的价格购买。乔叟(1340-1400)抱怨“lyf太短,工艺太长了。希波克拉底(约公元前400年)以摘录“ars longa,vita brevis”而闻名,这是较长引文“Ars longa,vita brevis,occasio praeceps,experimentum periculosum,iudicium difficile”的一部分,在英语中翻译为“生命短暂,[该]工艺长,机会稍纵即逝,实验危险,判断困难。 当然,没有一个数字可以成为最终的答案:假设所有技能(例如,编程,下棋,跳棋和音乐演奏)都需要完全相同的时间才能掌握,或者所有人都需要完全相同的时间,这似乎是不合理的。正如 K. Anders Ericsson教授所说,“在大多数领域,即使是最有才华的人也需要多少时间才能达到最高水平的表现,这是非常了不起的。10,000小时的数字只是给你一种感觉,我们谈论的是每周10到20个小时的年份,有些人会认为这是天生最有才华的人仍然需要达到最高水平。

所以你想成为一名程序员

以下是我成功的编程秘诀:

  • 对编程感兴趣,并做一些因为它很有趣的事情。确保它保持足够的乐趣,这样你才愿意投入十年/ 10000小时。
  • 程序。最好的学习方式是边做边学。从技术上讲,“个人在特定领域的最大绩效水平并不是作为扩展经验的函数自动达到的,但是即使是经验丰富的个人也可以通过刻意改进而提高绩效水平。“和”最有效的学习需要一个定义明确的任务,为特定的个人提供适当的难度级别,提供信息反馈,并有机会重复和纠正错误。“《实践中的认知:日常生活中的心灵、数学和文化》一书是这一观点的有趣参考。
  • 与其他程序员交谈;阅读其他程序。这比任何书籍或培训课程都重要。
  • 如果你愿意,可以在一所大学学习四年(或者在研究生院学习更长时间)。这将使您获得一些需要证书的工作,并且将使您对该领域有更深入的了解,但是如果您不喜欢学校,您可以(以一定的奉献精神)在自己或工作中获得类似的经验。无论如何,仅靠书本学习是不够的。“计算机科学教育不能使任何人成为专业的程序员,就像研究画笔和颜料可以使某人成为专业画家一样,”《新黑客词典》的作者埃里克·雷蒙德(Eric Raymond)说。我雇用过的最好的程序员之一只有高中学历。他制作了很多很棒的软件,拥有自己的新闻集团,并赚了足够的股票期权来购买自己的夜总会。
  • 与其他程序员一起处理项目。成为某些项目的最佳程序员;对其他人来说是最糟糕的。当你是最好的,你可以测试你领导项目的能力,并用你的愿景激励他人。当你是最坏的时候,你会学到大师们在做什么,你也会知道他们不喜欢做什么(因为他们让你为他们做这件事)。
  • 在其他程序员之后处理项目。理解别人编写的程序。看看当原始程序员不在身边时,需要什么来理解和修复它。想想如何设计你的程序,让那些在你之后维护它们的人更容易。
  • 学习至少六种编程语言。包括一种强调类抽象的语言(如Java或C++),一种强调功能抽象的语言(如Lisp或ML或Haskell),一种支持语法抽象的语言(如Lisp),一种支持声明性规范的语言(如Prolog或C++模板),以及一种强调并行性的语言(如Clojure或Go)。
  • 请记住,在“计算机科学”中有一个“计算机”。了解计算机执行指令、从内存中获取单词(有缓存未命中和没有缓存未命中)、从磁盘读取连续单词以及查找磁盘上的新位置所需的时间。(答案在这里。)
  • 参与语言标准化工作。它可能是ANSI C++委员会,也可能是决定您的本地编码风格是否具有2或4个空格缩进级别。无论哪种方式,你都会了解其他人喜欢一种语言,他们的感受有多深,甚至可能是他们为什么会有这种感觉。
  • 有良好的意识,尽快摆脱语言标准化工作。

考虑到所有这些,仅仅通过书本学习你能走多远是值得怀疑的。在我的第一个孩子出生之前,我读了所有的“如何做”的书,仍然觉得自己像一个无知的新手。30个月后,当我的第二个孩子到期时,我是否回到书本上复习?不。相反,我依靠我的个人经验,事实证明,这比专家撰写的数千页对我来说更有用,更令人放心。

弗雷德·布鲁克斯(Fred Brooks)在他的文章《没有银弹》(No Silver Bullet)中确定了一个由三部分组成的寻找优秀软件设计师的计划:

  1. 尽早系统地识别顶级设计师。
  2. 指派一名职业导师负责潜在客户的发展,并仔细保存职业档案。
  3. 为成长中的设计师提供互动和相互激励的机会。

这假设有些人已经具备成为一名伟大设计师所需的素质;工作是适当地哄骗他们。艾伦·佩利斯(Alan Perlis)说得更简洁:“每个人都可以被教导雕刻:米开朗基罗必须被教导如何不雕刻。伟大的程序员也是如此“。玻璃市是在说,伟人有一些超越他们训练的内在品质。但质量从何而来?它是与生俱来的吗?还是他们通过勤奋来发展它?正如Auguste Gusteau(《料理鼠王》中虚构的厨师)所说,“任何人都可以做饭,但只有无所畏惧的人才能伟大。我认为这更像是愿意将一生中的很大一部分奉献给深思熟虑的实践。但也许无所畏惧是总结这一点的一种方式。或者,正如Gusteau的评论家Anton Ego所说:“不是每个人都能成为伟大的艺术家,但伟大的艺术家可以来自任何地方。

所以继续购买Java /Ruby/Javascript/PHP的书吧;你可能会从中得到一些用处。但你不会在24小时或21天内改变你的生活,或者你作为程序员的真正整体专业知识。在24个月内努力工作以不断改进怎么样?好吧,现在你开始到达某个地方…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值