彼得·诺维格
为什么大家都这么着急?
走进任何一家书店,你就会看到如何 自学爪哇 24 小时内 除了无休止的变化提供教 C, SQL、Ruby、算法等在几天或几小时内完成。 亚马逊高级搜索 |标题: 教学, 自己, 小时, 因为: 20 发现了512本这样的书前十名中,有九本是编程书籍(另一本是关于簿记的)。类似的结果来自将"自学"替换为"学习"或"小时"与"天"。
结论是,要么人大都急于学习 关于编程,或编程是不知何故非常容易 学习比什么都重要。 费雷森 等。 在他们的书里点头 如何设计程序, 当他们说 "糟糕的编程很容易。 白痴 可以学习它 21 天, 即使他们是 傻瓜."阿布特鲁斯鹅漫画也有 他们采取.
让我们分析一下标题是什么样的 在 24 小时内C++一些孩子 可能意味着:
自学: 在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) 抱怨 "莱夫这么短, 工艺 这么久的勒恩。希波克拉底 (c. 400BC) 是众所周知的摘录 "阿尔斯朗加, 维塔布雷维斯",这是较长的报价"阿尔斯龙加,维塔的一部分 布雷维斯, 偶尔练习, 实验周利库苏姆, iudicium 困难",在英语中呈现为"生命是短暂的,[the]工艺 长, 机会转瞬即逝, 实验背信弃义, 判断 困难。 当然,没有一个数字可以是最终的答案:它似乎不合理 假定所有技能(例如编程、下棋、跳棋和音乐演奏) 可以都需要完全相同的时间来掌握,也不是所有的人 需要完全相同的时间。作为 教授。 K。安德斯·爱立信 说,"在大多数领域,这是显着多少时间,甚至最 人才需要达到最高水平。10,000 小时的数字只是让您感觉到,我们谈论的是每周 10 到 20 小时,有些人会认为这些人是天生的天才人才,仍然需要达到最高水平。
所以你想成为一名程序员
以下是我的编程成功秘诀:
获取 兴趣 在编程,并做一些,因为它是有趣的。 确保 它一直足够有趣,这样你才愿意投入你的十年/10,000小时。
程序. 最好的学习方式是 学习 通过做. 简单地说,技术上,"最高水平 未达到给定域中个人的性能 自动作为扩展体验的函数,但级别 即使经验丰富的个人可以提高绩效, 经过深思熟虑的改进。 (第366位) 和"最有效的学习需要一个明确定义的任务与 适合特定个体的难度级别, 信息性反馈,以及重复和更正的机会 错误。(第20-21号) 这本书 实践中的认知:日常思维、数学和文化 生活 是一个有趣的 参考这个观点。
与交谈 其他程序员;阅读其他程序。 这更重要 比任何书籍或培训课程。
如果你想,把在四年 大学 (或更多在 研究生院)。 这将让您访问一些需要 凭据,它会让您更深入地了解该领域, 但如果你不喜欢学校, 你可以 (与一些奉献) 得到 类似的经验,你自己或工作。无论如何,单靠书本学习不会 就足够了。"计算机科学教育不能使任何人成为专家 程序员比研究刷子和颜料可以使 某人是专家画家,"埃里克·雷蒙德说,作者 新 黑客词典.我雇佣过的最好的程序员之一 只有高中学位;他产生了很多 伟大 软件, 有他自己的 新闻组,并做了足够的股票期权购买自己的 夜总会.
工作在 项目与 其他程序员。成为最好的程序员 在某些项目上;是其他人最差的。 当你是最好的 你可以测试你的能力,领导一个项目,并激励 别人有你的愿景。 当你是最差的,你学到什么 大师做,你学习他们不喜欢什么做(因为他们 让你为他们做)。
工作在 项目 后 其他程序员。 了解其他人编写的程序。看看需要什么 了解和修复它时, 原始程序员不 周围。考虑如何设计程序,使其更易于使用 那些会支持你的人
至少学习半打 编程语言. 包括一个 强调类抽象的语言(如Java或C++),一个 强调功能抽象(如 Lisp 或 ML 或 Haskell),一 支持句法抽象 (如 Lisp), 一 支持声明性规范(如 Prolog 或 C++ 模板),以及 一个强调平行性 (如克洛朱尔或去) 。
请记住,有一个"计算机在"计算机科学"中。知道 计算机执行指令需要多长时间,获取 从内存中的字(有和没有缓存错过),从磁盘读取连续单词,并查找到磁盘上的新位置。(答案在这里。)
参与语言 标准化 努力。 可能是安西C++委员会, 或者它 可以决定您的本地编码风格是否会有 2 或 4 个空间 缩进级别。 无论哪种方式,你了解什么其他人 喜欢在语言,他们感觉多么深,甚至一点点 关于他们为什么会这样。
有好感 下车 语言标准化工作作为 尽快。
这一切在心中, 它值得怀疑的, 你能得到多远, 只是 书籍学习。 在我的第一个孩子出生之前,我读了所有的 如何 自 书,仍然觉得自己像一个无知的新手。 30个月后 当我的第二个孩子到期,我回到书 复习?不。 相反,我依靠我的个人经验,这 原来更有用,更让人放心 对我来说比写数千页 由专家。
弗雷德·布鲁克斯,在他的文章中 无银弹 确定了一个三部分的计划,找到伟大的 软件设计师:
尽早系统地确定顶级设计师。
指派一位职业导师负责潜在客户的发展,并仔细保存职业档案。
为成长的设计师提供互动和刺激的机会。
这假定有些人已经具备了 成为一个伟大的设计师;工作是正确地哄他们一起。 艾伦 佩利斯 说得更简洁:"每个人都可以被教导雕刻: 米开朗基罗必须被教导如何不。因此,它是与 伟大的程序员"。 佩利斯说,伟人有一些 超越他们训练的内部质量。 但是,在哪里 质量来自? 是天生的吗? 或者他们通过 勤奋? 作为奥古斯特古斯托 (虚构的厨师在 拉塔图耶)说,"任何人都可以做饭,但只有无所畏惧 可以是伟大的。 我认为它更多的是愿意奉献一个大 一个人一生审议实践的一部分。 但也许 无畏 是一种总结的方法。或者,作为古斯托的批评者, 安东·埃戈说:"不是每个人都能成为一个伟大的艺术家,但一个伟大的 艺术家可以从任何地方。
因此,继续购买 Java/Ruby/Javascript/PHP 书籍;你会 可能从中得到一些利用。 但你不会改变你的生活,或者 您作为程序员在 24 小时或 21 天内获得真正的整体专业知识。 努力在24个月内不断改进怎么样? 现在你开始找个地方了...
引用
布鲁姆, 本杰明 (ed.) 培养青年人才,巴兰廷,1985年。
布鲁克斯 弗雷德 无银弹, IEEE 计算机, 第 20 卷, 第 4 号, 1987 年, p. 10 -19。
布莱恩, W. l. – 哈特, N. "关于电报语言的研究: 习惯等级的获取。 心理学评论, 1899, 8, 345-375
海斯,约翰 完整的问题解算器 劳伦斯·埃鲍姆,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 纳米秒
附录:语言选择
有几个人问他们应该先学什么编程语言。 没有一个答案,但请考虑以下几点:
使用你的朋友.当被问及"什么操作系统应该 我使用, Windows, Unix, 或 Mac? 你的朋友使用。 从学习中获得的优势 朋友将抵消操作系统之间的任何内在差异,或 编程语言之间。 还要考虑你未来的朋友: 程序员社区,你将成为其中的一部分,如果你 继续。 您选择的语言是否拥有庞大的增长社区 还是一个小垂死的? 是否有书籍、网站和在线论坛 得到答案? 你喜欢那些论坛里的人吗?
保持简单. 编程语言,如C++ 和 Java 是专为专业开发由大型团队 经验丰富的程序员谁关心运行时效率 他们的代码。 因此,这些语言具有专为这些情况设计的复杂部分。 你关心的是学习编程。 你不需要这种并发症。 你想要一种被设计成易于学习和记忆的语言。 单个新程序员。
玩。 哪种方式,你宁愿学习弹钢琴: 正常,互动的方式,你听到每个音符,只要你点击一个键, 或 "批" 模式, 你只听到笔记后, 你完成了一整首歌? 显然,交互式模式使钢琴的学习更容易,也为 编程。坚持使用交互式模式的语言并使用它。
鉴于这些标准,我关于第一次编程的建议 语言将是 Python 或 方案. 另一个选择是Javascript,不是因为它为初学者设计得很好, 但因为有这么多的在线教程,如 汗学院的教程. 但您的 情况可能会有所不同,还有其他不错的选择。如果您的 年龄是一位数,你可能更喜欢 爱 丽 丝 或 吱吱 声 或 块 (年龄较大的学习者也可能喜欢这些)。重要 事情是, 你选择和开始。
附录:书籍和其他资源
有几个人问他们应该学什么书和网页 从。 我再说一遍, "单靠书学习是不够的", 但我可以 建议以下事项:
方案: 结构和 计算机程序的解释(阿贝尔森和苏斯曼) 是 可能是计算机科学的最佳介绍, 它确实 教编程作为理解计算机科学的一种方式。 你可以看到 讲座的在线视频 在这本书,以及 在线完整文本.这本书是 挑战,将杂草出一些人,也许可以 成功用另一种方法。
方案: 如何 设计方案(费里森) 等。) 是最好的书之一 如何以优雅和实用的方式实际设计程序。
Python: Python 编程: CS 简介(Zelle) 是使用 Python 的很好介绍。
Python: 几个 在线 教程 可在 Python.org.
盎司: 概念 计算机编程的技术和模型(范罗伊和哈里迪) 被一些人视为亚伯森和苏斯曼的现代接班人。 这是一个旅游通过编程的大想法,涵盖更广泛的 范围比亚伯森和苏斯曼,而也许更容易阅读和 遵循。 它使用的语言,奥兹,这是不广为人知,但作为 学习其他语言的基础。
笔记
T. 卡佩指出, 完成 问题解算器 亚马逊上的页面现在有 "自学" 孟加拉语在 21 天" 和 "教自己语法和风格" 的书下 "为此商品购物的客户也为这些物品购物" 部分。 我猜, 很大一部分人谁看 书来自这个页面。 感谢罗斯·科恩对希波克拉底的帮助