为什么大家都这么着急? 走进任何一家书店,你会看到如何教自己爪哇在24小时内与无尽的变化提供教C,SQL,红宝石,算法,等等在几天或几个小时。亚马逊高级搜索 [标题: 教, 你自己, 小时, 因为: 2000 年, 并发现了 512 本这样的书。在前十名中,有九本是编程书籍(另一本是关于簿记的)。类似的结果来自用"学习"或"小时"代替"天"来代替"自学"。 结论是,要么人们急于学习编程,要么编程比什么都容易学。费利森等人在他们的书《如何设计程序》中对这种趋势点头,他们说"糟糕的编程很容易。白痴可以在21天内学会它,即使他们是假人。阿布特鲁斯鹅漫画也有他们采取。 让我们来分析一个标题,如教自己C++在24小时内可能意味着: •自学:在 24 小时内,您将没有时间编写几个重要的程序,并从他们的成功和失败中吸取教训。您将没有时间与经验丰富的程序员一起工作,并了解生活在C++环境中的感觉。简言之,你没有时间学到很多东西。所以这本书只能讲表面的熟悉,不能说深刻的理解。正如亚历山大·波普所说,一点点学习是一件危险的事情。 •C++:在 24 小时内,您也许能够学习一些C++的语法(如果您已经懂其他语言),但您无法了解如何使用该语言。简言之,如果你是一个基础程序员,你可以学会用C++语法编写基础程序,但是你无法了解C++实际上是好的(和坏的)。那有什么意义呢?艾伦·佩利斯曾经说过:"一种不影响你思考编程方式的语言,不值得知道"。一个可能的点是,你必须学习一点点C++(或更可能,像JavaScript或处理的东西),因为你需要与现有的工具接口,以完成一个特定的任务。但是,你并没有学习如何编程:你正在学习完成那项任务 •在24小时内:不幸的是,这是不够的,如下一节所示。 十年内自学编程 研究人员(布卢姆(1985年)、布莱恩和哈特(1899年)、海耶斯(1989年)、西蒙和蔡斯(1973年)已经表明,在各种领域开发专业知识大约需要十年时间,包括象棋演奏、音乐创作、电报操作、绘画、钢琴演奏、游泳、网球以及神经心理学和拓扑学研究。关键是深思熟虑的实践:不只是一遍又一遍地做,而是挑战自己,任务超出了你目前的能力,尝试它,分析你的表现,而做和做后,并纠正任何错误。然后重复。再重复一遍似乎没有真正的捷径:即使是莫扎特,谁是音乐神童在4岁,花了13年多之前,他开始生产世界级的音乐。在另一种类型中,披头士乐队似乎以一连串的#1热门歌曲和1964年埃德·沙利文的演出而轰动一时。但是他们从1957年开始在利物浦和汉堡打小俱乐部,虽然他们很早就有大众的吸引力,但他们的第一次重大成功,佩珀斯中士,在1967年被释放。
马尔科姆·格拉德威尔已经推广了这个想法,尽管他专注于10,000小时,而不是10年。亨利·卡地亚-布雷松(1908-2004)有另一个指标:"你的前10,000张照片是你最差的。(他没想到,有了数码相机,有些人可以在一周内达到这个目标。真正的专业知识可能需要一生的时间:塞缪尔·约翰逊(1709-1784)说:"任何部门的卓越只能靠一生的劳动才能实现:它不是以较低的价格购买的。乔瑟 (1340 - 1400) 抱怨道: "lyf 这么短, 工艺这么久, 以勒恩。希波克拉底(约公元前400年)以摘录"阿尔斯龙加,维塔布雷维斯"而闻名,这是较长的引文"阿尔斯龙加,维塔布雷维斯,奥卡西奥普拉塞普斯,实验性皮质,硫化物困难"的一部分,这在英语中呈现为"生命短暂,[工艺长,机会转瞬即逝,实验危险,判断困难"。当然,没有一个数字可以成为最终答案:假设所有技能(例如编程、下棋、跳棋和音乐演奏)都需要完全相同的时间来掌握,而且所有人都需要完全相同的时间,这似乎并不合理。作为教授 安德斯·爱立信说:"在大多数领域,即使是最有才华的个人也需要多少时间来达到最高水平,这很了不起。10,000 小时的数字只是让你感觉到,我们谈论的是每周 10 到 20 小时,有些人会争辩说,那些天生最有才华的人仍然需要达到最高水平。 所以你想成为一名程序员 以下是我编程成功的秘诀: •对编程感兴趣,并做一些,因为它是有趣的。确保它保持足够的乐趣,这样你就会愿意把你的10年/10,000小时。 •程序。最好的学习就是通过做来学习。更严格地说,"特定领域个人的最高绩效水平不会自动作为扩展经验的函数来实现,但即使经验丰富的个人出于深思熟虑的改进努力,性能水平也会提高。(第366页)和"最有效的学习需要一项定义明确的任务,为特定个人提供适当的难度水平、翔实的反馈以及重复和纠正错误的机会。(第20-21页)《实践中的认知:日常生活中的思维、数学和文化》一书是这一观点的有趣参考。 •与其他程序员交谈:阅读其他程序。这比任何书籍或培训课程都重要。 •如果您愿意,在大学学习四年(或在研究生院学习更多)。这将使你有机会获得一些需要证书的工作,它会给你一个更深入的了解领域,但如果你不喜欢学校,你可以(与一些奉献精神)获得类似的经验,你自己或在工作。无论如何,光靠读书是不够的。《新黑客词典》的作者埃里克·雷蒙德(Eric Raymond)说:"计算机科学教育不能使任何人成为专家程序员,而学习画笔和颜料可以使某人成为专家画家。我聘请过的最好的程序员之一只有高中学位:他生产了很多伟大的软件,有自己的新闻集团,并做了足够的股票期权购买自己的夜总会。 • 与其他程序员一起处理项目。成为某些项目的最佳程序员:是其他一些人最糟糕的。当你是最好的,你可以测试你的能力,领导一个项目,并激励别人与你的远见。当你是最坏的,你了解主人做什么,你学习他们不喜欢做什么(因为他们让你为他们做)。 • 在其他程序员之后处理项目。了解其他人编写的程序。当原始程序员不在时,查看需要什么来理解和修复它。考虑如何设计您的程序,使那些谁将维护他们后,你更容易。 •学习至少六种编程语言。包括一种强调类抽象(如Java或C++)的语言,一种强调功能抽象(如Lisp或ML或哈斯克尔)的语言,一种支持语法抽象(如Lisp)的语言,一种支持声明性规范(如Prolog或C++模板)的语言,以及一种强调并行性(如 Clojure 或 Go)的语言。 •请记住,"计算机科学"中有一个"计算机"。了解计算机执行指令需要多长时间,从内存中获取单词(有和没有缓存遗漏),从磁盘中连续读取单词,并寻求磁盘上的新位置。(答案如下)
参与语言标准化工作。它可能是 ANSI C++委员会,也可能决定您的本地编码样式是否具有 2 或 4 个空间凹痕级别。无论哪种方式,你了解其他人喜欢什么语言,他们有多深的感觉,甚至一点点,为什么他们觉得如此。 •有良好的意识,尽快摆脱语言标准化的努力。 考虑到这一切, 仅仅通过读书就能走多远是值得怀疑的。在我第一个孩子出生之前,我读了所有的《如何读书》,仍然觉得自己是个无知的新手。30个月后,当我的第二个孩子到期时,我是否回到书本上复习一下?大声 笑相反,我依靠我的个人经验,事实证明,这与专家撰写的数千页相比,对我更有用和更让人放心。 弗雷德布鲁克斯,在他的文章没有银弹确定了一个三部分的计划,寻找伟大的软件设计师: 1.尽早系统地识别顶级设计师。 2.指派职业导师负责发展前景,并认真保存职业档案。 3.为成长中的设计师提供相互交流和相互刺激的机会。 这假定有些人已经具备了成为伟大设计师所必需的素质:工作是适当地哄骗他们。艾伦·佩利斯说得更简洁:"每个人都可以被教导要雕刻:米开朗基罗将不得不被教导如何不雕刻。因此,这是与伟大的程序员"。佩利斯说,伟人有一些超越他们训练的内在品质。但是质量从何而来呢?是与生俱来的吗?还是他们通过勤奋发展?正如奥古斯特·古斯托(拉塔图耶虚构的厨师)所说,"任何人都会做饭,但只有无所畏惧的人才能伟大。我更愿意把一生的很大一部分时间用于审议实践。但也许无所畏惧是总结这一点的一种方式。或者,正如古斯托的评论家安东·埃戈所说:"不是每个人都能成为一个伟大的艺术家,但一个伟大的艺术家可以来自任何地方。 因此,继续购买那本爪哇/鲁比/贾瓦脚本/PHP书;你可能会得到一些使用它。但你不会改变你的生活,或你真正的整体专业知识作为一个程序员在24小时或21天。努力工作,在24个月内不断改进怎么样?现在你开始找个地方了。。。 引用 布鲁姆,本杰明(ed.)在年轻人中培养人才,巴兰廷,1985年。 布鲁克斯, 弗雷德, 没有银弹, Ieee 电脑, 第 20 卷, 第 4 卷, 1987 年, 第 10 - 19 页。 布莱恩, W. l. - 哈特, N. "关于电报语言的研究: 习性等级的习性。心理学评论, 1899, 8, 345-375 海耶斯,约翰R.,完全问题解决者劳伦斯埃尔鲍姆,1989年。 蔡斯, 威廉 G. - 西蒙, 赫伯特 A. "国际象棋感知" 认知心理学, 1973 年, 4, 55 - 81 。 1988年,剑桥大学出版社,《实践中的认知:日常生活中的心灵、数学和文化》。
答案 典型 PC 上各种操作的大致时间: 执行典型指令 1/1,000,000,000 秒 = 1 纳米秒 取自L1缓存内存0.5纳米秒 分支误判5纳米秒 取自L2缓存内存7纳米秒 穆特克斯锁/解锁 25 纳米秒 取自主内存100纳米秒 发送超过1Gbps网络2K字节20,000纳米秒 从内存中依次读取1MB 250,000纳秒 取自新磁盘位置(寻求) 8,000,000 纳米秒 从磁盘中按顺序读取 1MB 20,000,000 纳秒 将数据包美国发送到欧洲并返回 150 毫秒 = 150,000,000 纳秒 附录:语言选择 有几个人问他们应该先学什么编程语言。没有一个答案,但考虑以下要点: •使用你的朋友。当被问及"我应该使用什么操作系统,视窗,Unix,或Mac?"时,我的回答通常是:"使用你的朋友使用的任何操作系统。您从向朋友学习中获得的优势将抵消操作系统之间或编程语言之间的任何内在差异。还要考虑你未来的朋友:如果你继续,你将成为程序员社区的一部分。您选择的语言是否有一个成长中的社区或一个小的垂死社区?是否有书籍、网站和在线论坛获得答案?你喜欢那些论坛里的人吗? •保持简单。C++和 Java 等编程语言由大量经验丰富的程序员团队设计,他们关注其代码的运行时间效率。因此,这些语言具有针对这些情况设计的复杂部分。你关心的是学习编程。你不需要这种并发症。您想要一种由单个新程序员设计为易于学习和记忆的语言。 •播放。你宁愿学习哪种方式弹钢琴:正常,互动的方式,你听到每一个音符,只要你击中一个键,或"批量"模式,其中你只听到音符后,你完成一整首歌?显然,交互式模式使钢琴和编程学习更加容易。坚持使用交互式模式的语言并使用它。 鉴于这些标准,我对第一种编程语言的建议是 Python 或计划。另一种选择是 Javascript,不是因为它为初学者设计得非常好,而是因为它有这么多的在线教程,如汗学院的教程。但你的情况可能会有所不同,还有其他不错的选择。如果你的年龄是一位数,你可能会喜欢爱丽丝或吱吱声或块状(年长的学习者可能也喜欢这些)。重要的是你选择和开始。
附录:书籍和其他资源 有几个人问他们应该学习什么书和网页。我重复一遍,"单靠读书是不够的",但我可以推荐以下几点: • 方案:计算机程序的结构和解释(Abelson &susman)可能是计算机科学的最佳介绍,它确实教编程作为理解计算机科学的一种方式。你可以在网上看到关于这本书的讲座视频,以及完整的文本在线。这本书很有挑战性,将淘汰一些也许能用另一种方法取得成功的人。 • 方案:如何设计程序(费莱森等人)是有关如何以优雅和实用的方式实际设计程序的最佳书籍之一。 • Python: Python 编程: Cs (Zelle) 的简介是使用 Python 的一个很好的介绍。 •Python:几个在线教程可在Python.org。 • 奥兹:计算机编程的概念、技术和模型(范罗伊和哈里迪)被一些人视为阿贝尔森和苏斯曼的现代接班人。这是一次通过编程的大想法之旅, 涵盖的范围比阿贝尔森 - 苏斯曼更广泛, 同时也许更容易阅读和跟随。它使用的语言,奥兹,这是不广为人知的,但作为学习其他语言的基础。< 笔记 T. Capey 指出,亚马逊上的"完全问题解解器"页面现在有"在 21 天内自学本加利"和"自学语法和风格"书籍,下面是"购买此商品的客户也购买这些物品"部分。我想看那本书的人很大一部分来自这个页面。感谢罗斯 · 科恩对希波克拉底的帮助。 翻译 由于以下作者,本页的翻译内容如下: 阿拉伯语 (穆罕默德·叶海亚) 保加利亚语 (博伊科·班切夫) 中文 (郭晓刚) 克罗地亚语 (特维特科·贝德科维奇) 语 (费德里科·戈博) 法语 (艾蒂安·博切斯内) 德语 (斯特凡·拉姆) 希伯来语 (埃里克·麦凯恩) 印地语 (维卡什·蒂瓦里) 匈牙利语 (马顿·梅斯蒂安) 印度尼西亚语 (特里吉托·桑托索) 意大利语 (法比奥·泰西托雷) 日语 (约莫约莫) 韩语(黄约翰) 波斯语 (迈赫迪·阿斯加里) 波兰语 (库巴·诺瓦克) 葡萄牙语 (奥古斯托·拉德克) 罗马尼亚 (埃特凡·拉泽尔) 俄语 (康斯坦丁·皮钦) 塞尔维亚语 (拉扎尔·科瓦切维奇) 西班牙语 (卡洛斯·鲁伊达) 斯洛伐克语 (简·瓦茨维克) 土耳其语 (乌卢阿欣) 乌克兰 (奥莱克西·莫尔恰诺夫斯基) 彼得·诺维格
网友评论