国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

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

发布时间:2019/07/29标签:   程序员    点击量:

原标题:程序员必读经典长文:用十年时间自学编程
本文转自雷锋网,如需转载请至雷锋网官网请求受权。信任许多做技巧的同窗都自学过,也看过「Teach Yourself Programming in Ten Years」这篇文章。固然离首次宣布曾经好几年了,但全部试图自学编程的人都应当发自心坎的批准它的说法(撤除多数过期的详细技巧局部)。直到明天,这篇典范的文章依旧很有鉴戒意思。以下是这篇文章的中文版。为甚么每团体都这么急忙?走进任何书店,你都市看到怎样在 24 小时内自学 Java,同时你还能够看到许多在几天或几小时内学会 C、SQL、Ruby、算法等等的册本。在亚马逊应用「title: teach, yourself, hours, since: 2000」停止高等搜寻,我发觉了 512 本如许的书。在排在前十名的册本中,有九本是编程册本,剩下一本是对于财政治理的。用「teach yourself」取代「learn」,或许用「day」取代「hours」发生的成果相似。论断是,要末人们急于进修编程,要末编程比其余任何货色都更轻易进修。Felleisen 等人在他们的书《How to Design Programs》中提到,「蹩脚的编程很轻易,即使是呆子都能够在 21 天内学会」时,请对这一观念表现赞成。让咱们来剖析一下在 24 小时内学会 C++象征着甚么: 自学:24 小时内,你将没偶然间写几个主要的顺序,并从胜利和失利中汲取经验。你将没偶然间和一个有教训的顺序员一同任务,并懂得在 C++情况中编程会是甚么模样。简而言之,你将没偶然间去进修几多货色。以是这本书只能说是浮浅的熟习,而不是深入的懂得。正如 Alexander Pope 所说,只学会一点点点货色是伤害的 C++:在 24 小时内,你兴许可能进修 C++的一些语法(条件是你曾经晓得了另一种言语),然而你不能学到几多对于怎样应用这门言语的常识。简而言之,假如你是一个下层的顺序员,你能够进修用 C++语法编写 BASIC 顺序,然而你不能进修到 C++真正的优毛病。那又有甚么意思呢?Alan Perlis 已经说过:「一种不影响你编程头脑方法的言语,是不值得进修的。」有一种能够是,你必需进修一点 C++(或许是 JavaScript 之类的货色),由于你须要用现有的东西接口来实现特定的义务。但这类情形下,你不是在进修怎样编程,而是在进修怎样实现这项义务。 在 24 小时内:可怜的是,这基本不敷,正以下面所说的那样。 用十年时光自学编程许多研讨职员发觉,在种种范畴要成为专家大概须要十年时光,这些范畴包含国内象棋、音乐创作、电报、绘画、钢琴吹奏、泅水、网球和迷信研讨、神全心理学和拓扑学等等。胜利的要害是一直的实际:不仅是一次又一次地做,而是每次都用一个超越你现在才能的义务挑衅你本人,实验去处理它,在做它的同时和以后剖析你的表示,改正过错,而后反复这个轮回。人和事件都没有真正的捷径:即使对莫扎特来讲也是如斯。4 岁就被称为音乐蠢才的他,在开端创作天下级的音乐之前又花了 13 年时光来打磨本人。另一个例子是披头士乐队。披头士乐队仿佛以一系列的热点歌曲和 1964 年在艾德沙利文秀上的表态而一夜成名。但现实上自从 1957 年以来,他们始终在 Liverpool 和 Hamburg 的小酒吧外面上演,固然很早从前他们就遭到民众的欢送,但他们第一次获得严重胜利的专辑「Sgt. Peppers」是在 1967 年公布的。Malcolm Gladwell 曾经遍及了这个主意,只管他的观念是 10000 小时专一的尽力,而不是 10 年。Henri Cartier-Bresson (1908-2004) 有一句名言:「你的前 10000 张照片是你最差的作品。」(他没有预感到应用数码相机,有些人能够在一周内就拍完 10000 张照片。)真正成为专家能够须要一辈子:Samuel Johnson(1709-1784)说:「成为任何范畴的出色人士都须要终生的尽力,投契取巧并弗成行」。Chaucer (1340-1400) 埋怨说:「人生太长久了,而常识是无限的」。Hippocrates (约公元前 400 年) 由于那句名言「ars longa, vita brevis」而被人称赞,这句话的原文是「Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile」,意义是「性命很长久,然而技能却很精深,机会转眼即逝,探究难以捉摸,决定艰苦重重」。固然,没有一个数字能够作为终极的谜底,假设全部的技巧(如编程、下棋、跳棋和音乐吹奏)都须要完整雷同的时光来控制,或许全部人都须要完整雷同的时光是分歧理的。正如 K. Anders Ericsson 教学所说,「在大少数范畴,即便是最有才干的人也须要许多时光才干到达最高程度,这长短常值得留神的。10000 小时这个数字让你感到到,咱们说的是一周 10 到 20 个小时。」你想成为一位顺序员以下是我的编程法门: 对编程感兴致,由于兴致而编程。请坚持充足的兴致,以便你情愿投入你的 10 年或许 10000 小时。 编码。最好的进修方法是实际。更严厉地说,「在特定范畴中,一团体的最高程度不是因为教训的积存主动取得的,而是经由沉思熟虑的改良,教训丰盛的人也能够进步程度。」,「最无效的进修须要有一个明白的义务,对特定的人来讲难度适中,还要有信息反应以及反复试错和改正过错的机遇。」「Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life」这本书恰是这一观念的有味参考。 与其余顺序员攀谈;浏览其余顺序。这比任何册本或培训课程都主要。 假如你情愿,能够在大学(或研讨生院)呆四年。这将使你无机会取得一份须要证书的任务,让你对这个范畴有更深的懂得,但假如你不喜爱黉舍,你能够自学或在任务中取得相似的教训。不管怎样,光靠书籍常识是远远不敷的。「The New Hacker's Dictionary」的作者 Eric Raymond 说:「盘算机迷信教导不能使任何人成为一个业余的顺序员,就像进修刷子和颜料弗成以使或人成为一个业余的画家一样。」我招聘过的最好的顺序员之一只要高中学历,他开辟了很多优良的软件,领有本人的团队,而且领有充足买下一个夜店的股票期权。 与其余顺序员一同做名目。在某些名目上你是最好的顺序员,而在某些名目上你是最差的顺序员。当你是最好的时间,你能够锤炼主导一个名目的才能,并用你的远见鼓励他人。当你是最坏的时间,你能够进修巨匠们做甚么,观看他们不喜爱做甚么(由于他们会让你为他们做本人不喜爱的事件)。 接办其余顺序员的名目,懂得他人写的顺序。当本来的顺序员不在时,进修须要怎么懂得和修复顺序。想想怎样计划你的顺序,让那些在你以后的人保护它们更轻易些。 进修最少六种编程言语。包含一种夸大类形象的言语(如 Java 或 C++),它夸大函数形象的言语(如 Lisp 或 ML 或 Haskell),一种支撑句法形象的言语(如 Lisp),一种支撑申明性标准的言语(如 Prolog 或 C++模板),一种夸大并发性的言语(像 Clojure 或 Go)。 记着「computer science」中有一个「computer」。晓得盘算机履行一条指令、从内存中提取一个字符(有或没有缓存)、从磁盘中读取持续的字符以及在磁盘上查找新的地位须要多长时光。 参加言语尺度化任务。它能够是 ANSI C++委员会,也能够是决议你本人的当地编码作风是有 2 个或许 4 个空间缩进。不管哪类方法,你都能够懂得到其余人对一种言语的爱好,他们的感触有多深,乃至能够懂得他们的感触。 有很好的推断力,尽快顺应言语的尺度化 斟酌到这所有,仅仅经过书籍进修你能走多远是个值得猜忌的成绩。在我的第一个孩子诞生之前,我读完了全部的「How To」范例的书,但依然感到本人像个笨手笨脚的老手。30 个月后,当我的第二个孩子诞生时,我从新进修了那些书籍常识吗?不,相同,我依附的是我的团体教训,这比专家们写的几千页书更有效,更让我释怀。Fred Brooks 在他的论文《No Silver Bullet》中指出了查找优良软件计划师的三个步调: 尽早体系地挖掘顶级顺序员。 指派一位职业导师担任领导他,并慎重看待经验。 为生长中的顺序员供给彼此交换和相互鼓励的机遇。 这假定一些人曾经具有成为一个巨大的顺序师所必须的素养,那末你的任务就是恰当地利用他们。Alan Perlis 的说法愈加简练:「每团体都能够学会雕琢,但 Michelangelo 必需学会怎样不雕琢。对巨大的顺序员来讲也是如斯。」Perlis 以为,巨人有一些超出练习的内涵品德。然而这些品德是从那里来的呢?是后天的吗?或许他们是经过勤恳养成的?正如 Auguste Gusteau 所说:「任何人都能学会做饭,但只要恐惧的人材是巨大的。」我以为这更像是情愿将毕生中大局部时光投入到某种实际中,但兴许恐惧是总结这一点的一种方法。或许,正如 Gusteau 的批判家 Anton Ego 所说:「不是每团体都能成为巨大的艺术家,但巨大的艺术家能够来自任何处所。」以是持续购置 Java/Ruby /JavaScript /PHP 册本吧,你能够会从中失掉一些有效的货色。然而它们不会在 24 小时或 21 天内转变你的生涯,也不会教会你作为一个顺序员所须要的全部业余常识。何不尽力任务,在接上去的 24 个月内一直改良?参考册本 Bloom, Benjamin (ed.)《Developing Talent in Young People》, Ballantine, 1985. Brooks, Fred,《No Silver Bullets》, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19. Bryan, W.L. & Harter, N.《Studies on the telegraphic language: The acquisition of a hierarchy of habits》. Psychology Review, 1899, 8, 345-375 Hayes, John R.,《Complete Problem Solver》Lawrence Erlbaum, 1989. Chase, William G. & Simon, Herbert A.《Perception in Chess》,Cognitive Psychology, 1973, 4, 55-81. Lave, Jean,《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》, Cambridge University Press, 1988. 后面成绩的谜底典范 PC 上种种操纵所须要的大抵时光: 履行典范指令:1/100000000 秒,即 1 纳秒 从一级缓存中提取:0.5 纳秒 分支猜测失误:5 纳秒 从二级缓存猎取:7 纳秒 互斥锁/解锁:25 纳秒 从主存储器提取:100 纳秒 经过 1Gbps 收集发送 2K 字节:20000 纳秒 从内存中按次序读取 1MB :250000 纳秒 重新磁盘地位(SEEK)猎取:8000000 纳秒 从磁盘中按次序读取 1MB:20000000 纳秒 将数据包发送到欧洲并前往:150 毫秒,即 150000000 纳秒 附:言语抉择有人会问,他们应当先学甚么编程言语。这里没有尺度谜底,但请斟酌以下几点: 参考你的友人。当被问到「我应当应用甚么操纵体系,Windows、Unix 或 Mac?」我的答复平日是:「应用你的友人应用的任何货色。」你从友人那边学到的上风将对消操纵体系或编程言语之间的任何内涵差别。还要斟酌你将来的友人:顺序员社区的人,假如你持续的话,你将成为此中的一员。你所抉择的言语有一个大的正在生长的群体仍是一个小的正在灭亡的群体?有书、网站和在线论坛能够失掉谜底吗?你喜爱那些论坛里的人吗? 简略有用。诸如 C++和 Java 如许的编程言语是由有教训的顺序员团队计划的,这些顺序员关怀他们代码的运转时效力。因而,为了应答这些情形,这些言语有些处所是很庞杂的。你关怀的是进修编程。你不须要那末庞杂。你须要的是一种言语,它关于老手顺序员来讲也能够能够很轻易地进修和影象。 互动。你更情愿用哪类方法学弹钢琴:一般的,互动的方法,你一按一个键就听到一个音符;或许「批量」形式,在这类形式下,你只在实现一整首歌后才听到音符?明显,互动形式使钢琴进修和更轻易。对编程来讲也是如斯,保持应用互动形式的言语并应用它。 斟酌到这些尺度,关于要进修的第一种编程言语我的倡议是 Python 或 Scheme。另一个抉择是 JavaScript,这不是由于它是为初学者经心计划的,而是由于它有许多在线教程,比方 Khan Academy 的教程。但每团体的情形都略有差别,另有一些其余的好抉择。假如你仍是隔小孩,你能够更喜爱 Alice 或 Squeak 或 Blockly(年长的进修者也能够喜爱这些)。这些都没关联,主要的是你要抉择并开端。附录:册本和其余资本有人问他们应当从哪些书和网页上进修。我再反复一遍:仅仅看书是不敷的。但我能够推举以下资本: Scheme:「Structure and Interpretation of Computer Programs (Abelson & Sussman)」能够是盘算机迷信最好的导论册本,它也确切将教学编程作为懂得盘算机迷信的一种方法。你能够在网上看到对于这本书的讲座视频,以及完全的文本。这本书读起来存在挑衅性,将镌汰一些能够经过这类方式取得胜利的人。 Scheme:「How to Design Programs (Felleisen et al.)」是对于在实际中怎样以文雅和有用的方法计划顺序的最好册本之一。 Python:「Python Programming: An Intro to CS (Zelle)」很好地先容了怎样应用 Python。 Python:Python.org 上有一些在线教程。 Oz:「Concepts, Techniques, and Models of Computer Programming (Van Roy & Haridi)」被一些人视为 Abelson 和 Sussman 的古代继续人。读这本书会让你懂得编程思维,它的涵盖范畴比 Abelson 和 Sussman 更普遍,同时能够更轻易浏览和懂得。它应用的言语是 Oz,这类言语并不广为人知,但它倒是进修其余言语的基本。 备注T. Capey 指出,Amazon 网页上谁人「Complete Problem Solver」页面把《Teach Yourself Bengali in 21 days》以及《Teach Yourself Grammar and Style》这两本书移到了「购置此书的用户还购置过这些产物」这个地区内。我估量大局部人就是从这个地区看到这本书的。感激 Ross Cohen 的关心。via:http://norvig.com/21-days.html【编纂推举】顺序员埋逻辑炸弹,每隔几年就触发别不信,顺序员永久也解脱不了这 7 个恶梦腾讯口试32岁顺序员T4都拿不到,引导间接叫走人!网友:看到将来资深顺序员多年总结:解密Kafka吞吐量高的起因Github 开端限度受美国商业制裁国度的开辟者【义务编纂:张燕妮 TEL:(010)68476606】 点赞 0

上一篇:没有了

下一篇:没有了

返回
版权信息Copyright ? IT技术教程 版权所有??? ICP备案编号:鲁ICP备09013610号