你所在的位置: 首页 > 正文

【程序员必读经典长文:用十年时间自学编程】

2019-08-12 点击:1794
网上真人赌博平台

  雷锋网AI科技评论按,相信很多做技术的同学都自学我还读过“TeachYourselfProgramminginTenYears”这篇文章。尽管自首次发布以来已经过了几年,但所有尝试自学编程的人都应该同意它(除了一些过时的特定技术部分)。直到今天,这篇经典文章仍然非常有用。以下是本文的中文版。

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

教,你自己,小时,自: 2000”进行高级搜索,我发现了512本这样的书。在前十本书中,有九本是编程书籍,其余是关于财务管理。使用“teachyourself”而不是“learn”或“day”而不是“hours”会产生类似的结果。

结论是,任何人都渴望学习编程或编程比其他任何东西都更容易学习。 Felleisen等。在他们的书《HowtoDesignPrograms》中提到“糟糕的编程很容易,即使一个白痴可以在21天内学习”,请同意这个观点。

让我们分析一下24小时内学习C ++的意义:

自学:在24小时内,您将没有时间编写一些重要的程序并从成功和失败中吸取教训。您将没有时间与经验丰富的程序员合作,并了解在C ++环境中编程是什么样的。简而言之,你没有时间学习。所以这本书只能说是肤浅的熟悉,而不是深刻的理解。正如AlexanderPope所说,只学习一些东西是危险的

C ++:在24小时内,您可以学习一些C ++的语法(假设您已经掌握了另一种语言),但是您无法了解如何使用该语言。简而言之,如果您是草根程序员,您可以学习用C ++语法编写BASIC程序,但是您无法了解C ++的真正优点和缺点。那是什么意思? AlanPerlis曾经说过:“一种不影响编程思维方式的语言不值得学习。”一种可能性是你必须学习一些C ++(或类似JavaScript),因为你需要使用现有的。用于完成特定任务的工具界面。但在这种情况下,您不是在学习如何编程,而是学习如何完成这项任务。

在24小时内:不幸的是,这还不够,如下所述。

十年自学编程

许多研究人员发现,成为各种领域的专家需要大约十年的时间,包括国际象棋,音乐创作,电报,绘画,钢琴演奏,游泳,网球和科学研究,神经心理学和拓扑学。成功的关键是不断的实践:不只是一次又一次地做,但每次你用超出当前能力的任务挑战自己,尝试解决它,分析你的表现,然后,纠正错误和重复循环。对于人和事物没有真正的捷径:即使对于莫扎特来说也是如此。当他4岁时,他被称为音乐天才。在他开始创造世界级音乐之前,又花了13年的时间来磨练自己。另一个例子是甲壳虫乐队。披头士乐队似乎在一夜之间成名,一系列热门歌曲和1964年Ed Sullivan秀的首演。但事实上,自1957年以来,他们一直在利物浦和汉堡的小酒吧演出。虽然他们很久以前很受公众欢迎,但他们的第一张成功专辑“Sgt.Peppers”是在1967年发布的。

马尔科姆格拉德威尔已经推广了这个想法,尽管他的观点是每小时集中精力,而不是10年。 Henri Cartier-Bresson(1908-2004)有一句名言:“你的最后一张照片是你最糟糕的作品。” (他没想到会使用数码相机,有些人可能会在一周内拍照。)真的成为专家可能需要度过一生:塞缪尔约翰逊(1709-1784)说:“在任何领域都是一个伟大的人需要终身努力,机会主义是不可行的。“乔((1340-1400)抱怨说:“生命太短暂,知识无穷无尽。”希波克拉底(约公元前400年)因着名的名言“arslonga,vitabrevis”而受到称赞。这句话的原文是“Arslonga,vitabrevis,occasiopraeceps,experimentumpericulosum,iudiciumdifficile”,意思是“生命短暂,但技能是非常深刻的,机会是短暂的,探索是难以捉摸的,选择是困难的。 “

当然,假设所有技能(例如编程,下棋,跳棋和音乐表演)都需要相同的时间来掌握,或者所有人都需要完全相同的话,没有一个号码可以用作最终答案。时间不合理。正如K. AndersEricsson教授所说,“在大多数地区,即使是最有才能的人也需要很多时间才能达到最高水平。这是非常值得注意的。小时数让你觉得我们正在谈论一周。 10到20个小时。“

你想成为一名程序员

以下是我的编程技巧:

有兴趣编程,编程因为兴趣。请保持足够的兴趣,以便您愿意在10年或数小时内投资。

编码。最好的学习方法是练习。更严格地说,“在一个特定的领域,一个人的最高水平不是由于经验的积累而自动获得的,而是一个经过深思熟虑的改进,有经验的人也可以提高他们的水平。”,“最有效的学习需要有一个明确的任务对于特定的人来说是中等难度的,有反馈和反复的反复试验和纠正错误的机会。 “CognitioninPractice: Mind,Mathematics,andCultureinEverydayLife”是对这一点的一个有趣的参考。

与其他程序员交谈;阅读其他程序。这比任何书籍或培训课程都重要。

如果你愿意,你可以留在大学(或研究生院)四年。这将使您有机会获得需要证书的工作并让您更深入地了解该领域,但如果您不喜欢上学,您可以自己学习或在工作中获得类似的经验。无论如何,依靠书本知识是不够的。 TheNewHacker字典的作者埃里克雷蒙德说:“计算机科学教育不能让任何人成为专业程序员,就像学习画笔和油漆不能让某人成为专业画家一样。”我雇用了最好的。其中一名程序员只接受过高中教育。他开发了许多优秀的软件,拥有自己的团队,并有足够的股票期权来购买夜总会。

与其他程序员一起完成项目。你是某些项目中最好的程序员,而且你是某些项目中程序员最差的。当您处于最佳状态时,您可以锻炼自己领导项目的能力,并利用您的愿景激励他人。当你处于最糟糕的状态时,你可以了解大师的所作所为并看到他们不喜欢的东西(因为他们会让你做他们不喜欢的事情)。

接管其他程序员的项目并理解他人编写的程序。当原始程序员不在时,学习如何理解和修复程序。考虑如何设计您的程序,让您身后的人更容易维护它们。

学习至少六种编程语言。包括强调类抽象的语言(如Java或C ++),一种强调函数抽象的语言(如Lisp或ML或Haskell),一种支持语法抽象的语言(如Lisp),一种支持声明性规范的语言。 (例如Prolog或C ++模板),一种强调并发性的语言(如Clojure或Go)。

记住“计算机指令,从内存中提取字符(有或没有缓存),从磁盘读取连续字符,以及在磁盘上查找新位置所需的时间。

参与语言标准化工作。它可能是ANSI C ++委员会,或者它可能是您自己的本地编码样式,具有2或4个空间缩进。无论哪种方式,您都可以了解其他人对语言的偏好,他们感受到的深度,甚至可能感受到他们的感受。

要有良好的判断力,尽快适应语言的标准化

考虑到所有这些因素,了解您可以通过书籍走多远是一个值得怀疑的问题。在我的第一个孩子出生之前,我读完了所有的“HowTo”书籍,但仍然感觉像一个笨拙的新手。 30个月后,当我的第二个孩子出生时,我是否重新学习了这些书?不,相反,我依靠我的个人经验,这比专家写的数千页更有用,我更放心。

FredBrooks在他的论文《NoSilverBullet》中指出了寻找优秀软件设计师的三个步骤:

尽早系统地发现顶级程序员。

指派一名职业导师指导他,并对他的简历保持谨慎。

为成长中的程序员提供互动和互相激励的机会。

这假设有些人已经拥有成为优秀程序员所需的素质,那么你的工作就是适当地欺骗他们。 Alan Perlis的陈述更简洁:“每个人都可以学习雕刻,但米开朗基罗必须学习如何不雕刻。伟大的程序员也是如此。”玻璃市认为伟人具有一些超越训练的内在品质。但这些品质从何而来?它天生吗?或者他们是通过勤奋发展起来的?正如奥古斯特古斯托所说:“任何人都可以学会做饭,但只有无所畏惧的人才能做得很好。”我认为这更像是愿意在一定的练习中度过我的大部分生活,但也许无所畏惧是总结这一点的一种方式。或者,正如古斯特的评论家安东埃戈所说:“不是每个人都可以成为伟大的艺术家,但伟大的艺术家可以来自任何地方。”

所以继续购买Java/Ruby/JavaScript/PHP书籍,你可能会得到一些有用的东西。但是他们不会在24或21天内改变你的生活,也不会教你作为程序员所需的所有专业知识。为什么不在未来24个月内努力工作并改进?

参考书

布卢姆,本杰明(编辑)《DevelopingTalentinYoungPeople》,百龄坛,1985年。

Brooks,Fred,《NoSilverBullets》,IEEE Computer,vol。 20,不。 1987年4月4日。 10-19。

布莱恩,W.L。 &Harter,N。《Studiesonthetelegraphiclanguage:Theacquisitionofahierarchyofhabits》。心理学评论,1899,8,345-375

Hayes,JohnR。《CompleteProblemSolver》LawrenceErlbaum,1989。

Chase,William G.&Simon,Herbert A.《PerceptioninChess》,认知心理学,1973,4,55-81。

Lave,Jean,《CognitioninPractice:Mind,Mathematics,andCultureinEverydayLife》,剑桥大学出版社,1988年。

回答上一个问题

典型PC上各种操作所需的大致时间:

执行典型指令:1 /秒,即1纳秒

从1级缓存中提取:0.5纳秒

分支预测误差:5纳秒

从二级缓存中获取:7纳秒

互斥/解锁:25纳秒

从主存储器中提取:100纳秒

通过1Gbps网络发送2K字节:纳秒

从内存中按顺序读取1MB:纳秒

从新磁盘位置(SEEK)获取:纳秒

从磁盘开始按顺序读取1MB:纳秒

将数据包发送到欧洲并返回:150毫秒,或纳秒

附件:语言选择

有些人会问他们应该先学习哪种编程语言。这里没有标准答案,但请考虑以下内容:

请你的朋友。当被问及“我应该使用什么操作系统,Windows,Unix或Mac?”时我的回答通常是:“使用你朋友使用的任何东西。”您从朋友那里学到的优势将抵消操作系统或编程。语言之间的任何固有差异。还要考虑你未来的朋友:程序员社区中的人,如果你继续,你将成为其中之一。您选择的语言是否有一个庞大的成长组或一个正在死亡的小组?我可以获得书籍,网站和在线论坛的答案吗?你喜欢那些论坛中的人吗?

简单实用。诸如C ++和Java之类的编程语言是由经验丰富的程序员团队设计的,他们关心代码的运行时效率。因此,为了处理这些情况,某些语言很复杂。你关心的是学习编程。你不需要那么复杂。您需要的是一种可以为新手程序员轻松学习和记忆的语言。

互动。你更喜欢弹钢琴的方式:正常,互动的方式,只需按一下按钮就能听到音符;或“批量”模式,你只完成一首完整的歌曲刚才听到的音符?显然,交互模式使钢琴学习更容易。编程也是如此,坚持交互模式的语言并使用它。

考虑到这些标准,我对第一种编程语言的建议是Python或Scheme。另一种选择是JavaScript,不是因为它是专为初学者设计的,而是因为它有很多在线教程,比如KhanAcademy的教程。但是每个人的情况都略有不同,还有其他一些不错的选择。如果您还是孩子,您可能更喜欢Alice或Squeak或Blockly(老年人也可能喜欢这样)。没关系,重要的是你选择并开始。

附录:书籍和其他资源

方案:“计算机程序的结构和解释(Abelson&Sussman)”可能是计算机科学中最好的入门书,它确实将编程作为理解计算机科学的一种方式。您可以在该书上看到该讲座的视频和网络上的全文。这本书很难阅读,并将消除一些可能以这种方式取得成功的人。

方案:“HowtoDesignPrograms(Felleisenetal。)”是关于如何在实践中以优雅和实用的方式设计程序的最佳书籍之一。

Python:“PythonProgramming: AnIntrotoCS(Zelle)”是如何使用Python的一个很好的介绍。

Python:Python.org上有一些在线教程。

Oz:“计算机编程的概念,技术和模型(VanRoy&Haridi)”被一些人认为是Abelson和Sussman的现代继承人。阅读本书将为您提供编程的概念,该编程比Abelson和Sussman更广泛,可能更容易阅读和理解。它使用的语言是Oz,它并不广为人知,但它是学习其他语言的基础。

备注

T.Capey指出,亚马逊页面上的“CompleteProblemSolver”页面将《TeachYourselfBengaliin21days》和《TeachYourselfGrammarandStyle》书籍移至“购买此书的用户也购买了这些产品”区域。我估计大多数人都会从这个领域看到这本书。感谢RossCohen的帮助。

一些信息可以帮助您跳转到原始文本

真人赌博 版权所有© www.xtun-nel.com 技术支持:真人赌博 | 网站地图