为什么大家都这么着急?
走进任何一家书店,您将了解如何在 24 小时内自学 Java,同时在几天或几小时内提供无休止的变体来教授 C、SQL、Ruby、算法等。亚马逊高级搜索 [标题: 教, 你自己, 小时, 自: 2000 年以来, 并发现了 512 这样的书。前十名中,有九本是编程书籍(另一本是关于簿记的)。类似的结果来自将"自学"替换为"学习"或"小时"与"天"。
结论是,要么人们急于学习编程,要么编程比什么都容易学。Felleisen等人在《如何设计程序》一书中对这种趋势点头,当时他们说"糟糕的编程很容易。白痴可以在21天内学会,即使他们是假人。阿布特鲁斯鹅漫画也有他们采取。
让我们分析一下 24 小时内"C++"标题可能意味着什么:
教导自己:在24小时内,你将没有时间写几个重要的程序,并学习你的成功和失败与他们。您没有时间与经验丰富的程序员合作,并了解生活在一个良好的环境中C++。总之,你将没有时间学习太多。所以这本书只能说是肤浅的熟悉,不能是深刻的理解。正如亚历山大·波普说的,一点学习是危险的事情。
C++:在24小时内,你也许能够学习C++的一些语法(如果你已经知道另一种语言),但你不能学到很多如何使用的语言。简言之,如果你是一个基本程序员,你可以学会用C++语法编写基本风格的程序,但是你不能学习C++实际上是好(和坏)什么。那有什么意义呢?艾伦·佩利斯曾经说过:"一种不影响你编程方式的语言,不值得了解。一个可能的观点是,你必须学习一点点C++(或者更可能,像JavaScript或处理),因为你需要与现有的工具接口来完成一个特定的任务。但是,你并没有学习如何编程;你正在学习完成那个任务
在24小时:不幸的是,这是不够的,如下一节显示。
十年内自学编程
研究人员(Bloom(1985年)、布莱恩和哈特(1899年)、海耶斯(1989年)、西蒙和蔡斯(1973年))表明,在象棋、音乐创作、电报操作、绘画、钢琴演奏、游泳、网球以及神经心理学和拓扑学研究等许多领域,大约需要10年时间。关键是审议实践:不只是一次又一次地做,而是用一个超出你当前能力的任务来挑战自己,尝试一下,在做之后分析你的表现,并纠正任何错误。然后重复。再重复一遍似乎没有真正的捷径:即使是4岁时音乐神童的莫扎特,也花了13年时间才开始创作世界级的音乐。在另一种类型中,披头士乐队似乎以一连串的#1和1964年埃德·沙利文的时装秀而登上舞台。但是他们自1957年以来一直在利物浦和汉堡打小俱乐部,虽然他们很早就有大众的吸引力,但他们的第一次重大成功,佩珀斯中士,在1967年被释放。
马尔科姆·格拉德威尔已经推广了这个想法,尽管他专注于10,000小时,而不是10年。亨利·卡蒂埃-布雷森(1908-2004)还有另一个指标:"你的前10,000张照片是你们最差的。(他没想到,使用数码相机,有些人可以在一周内达到这个目标。真正的专业知识可能需要一生的时间:塞缪尔·约翰逊(Samuel Johnson,1709-1784)说:"任何部门都只有一生的劳动才能取得卓越成就;它不应该以较低的价格购买。乔瑟 (1340- 1400) 抱怨道: "莱夫这么短, 工艺这么久才到勒恩。Hippocrates (c. 400BC) 以摘录 "ars longa, vita brevis" 而广为人知, 这是较长语录 "阿尔斯 · 朗加, 维塔 · 布雷维斯, 偶尔练习, 实验腹膜, 胆汁困难" 的一部分, 在英语中渲染为 "生命是短暂的, [the] 工艺长, 机会转瞬即逝, 实验背信弃义, 判断困难" 。当然,没有一个数字可以是最终的答案:似乎不合理地假设所有技能(如编程、棋牌、跳棋和音乐演奏)都需要完全相同的时间来掌握,也不认为所有人都需要完全相同的时间。正如安德斯·爱立信教授所说,"在大多数领域,即使是最有才华的个人也需要多少时间才能达到最高水平,这一点令人瞩目。10,000 小时的数字只是让您感觉到,我们谈论的是每周 10 到 20 小时,有些人会认为这些人是天生的天才人才,仍然需要达到最高水平。
所以你想成为一名程序员
以下是我的编程成功秘诀:
对编程感兴趣,并做一些,因为它很有趣。确保它一直足够有趣,这样你才愿意投入你的十年/10,000小时。
程序。最好的学习就是通过做学习。更简单地说,从技术上讲,"给定领域中个人的最高绩效水平不是作为扩展经验的函数自动实现的,但即使有经验的个人经过深思熟虑的改进,其绩效水平也可以提高。(第366)和"最有效的学习需要一个明确界定的任务,对于特定的个人,信息丰富的反馈,以及重复和纠正错误的机会,有适当的难度级别。平行性 (如克洛朱尔或去) 。
请记住,"计算机科学"中存在"计算机"。了解计算机执行指令、从内存中获取单词(有和没有缓存错过)、从磁盘读取连续单词以及查找磁盘上的新位置需要多长时间。(答案在这里。
参与语言标准化工作。它可能是 ANSI C++,也可以决定您的本地编码风格是否具有 2 或 4 个空间缩进级别。无论哪种方式,你都了解别人喜欢的语言,他们感觉有多深,甚至一点点关于他们为什么这样的感觉。
有好感,尽快摆脱语言标准化工作。
想到这一切, 你只要通过书本学习能多远, 就值得怀疑了。在我的第一个孩子出生之前,我读了所有的《如何》一书,仍然觉得自己是一个无知的新手。30 个月后, 当我的第二个孩子到期时, 我回到书本上复习一下吗?大声 笑相反,我依靠我个人的经验,事实证明,这比我有用和放心得多,比专家写的数千页。
弗雷德·布鲁克斯在他的论文《没有银弹》中确定了寻找伟大软件设计师的三部分计划:
尽早系统地确定顶级设计师。
指派一位职业导师负责潜在客户的发展,并仔细保存职业档案。
为成长的设计师提供互动和刺激的机会。
这假定有些人已经具备成为伟大设计师所需的素质;工作是正确地哄他们一起。艾伦·佩利斯说得更简洁:"每个人都可以被教导去雕刻:米开朗基罗必须被教导如何不雕刻。因此,这是与伟大的程序员"。欧洲和回 150 毫秒 = 150,000,000 纳米秒
附录:语言选择
有几个人问他们应该先学什么编程语言。没有一个答案,但请考虑以下几点:
用你的朋友。当被问及"我应该使用什么操作系统,Windows,Unix,还是Mac?从朋友那里学习的好处将抵消操作系统之间或编程语言之间的任何内在差异。还要考虑你未来的朋友:如果你继续,你将成为其中一员的程序员社区。您选择的语言是有一个庞大的成长社区还是一个垂死的小社区?是否有书籍、网站和在线论坛可以获得答案?你喜欢那些论坛里的人吗?
保持简单。编程语言(C++ 和 Java)是由经验丰富的程序员团队为专业开发而设计的,他们关注代码的运行时效率。因此,这些语言具有专为这些情况设计的复杂部分。你关心的是学习编程。你不需要这种并发症。您想要一种由单个新程序员设计得易于学习和记忆的语言。
玩。你宁愿学习哪种方式弹钢琴:正常的互动方式,你一点击一个键,或"批"模式,你只听到音符后,你完成了一整首歌?显然,交互式模式使钢琴和编程的学习更加容易。坚持使用交互式模式的语言并使用它。
鉴于这些标准,我对第一种编程语言的建议将是Python或S方案。另一个选择是Javascript,不是因为它是为初学者设计得完美的,而是因为有这么多的在线教程,如Khan学院的教程。但是,你的情况可能会有所不同,还有其他不错的选择。如果你的年龄是一位数,你可能更喜欢爱丽丝或吱吱声或块(年龄较大的学习者也可能喜欢这些)。重要的是你选择并开始。
附录:书籍和其他资源
有几个人问他们应该从哪些书籍和网页中学习。我再说一遍, "单靠书学习是不够的", 但我可以推荐以下内容:
方案:计算机程序的结构和解释(Abelson & Sussman)可能是计算机科学的最佳介绍,它教编程作为理解计算机科学的一种方式。您可以在线查看有关本书的讲座视频,以及完整的文本。这本书很有挑战性,将一些人从另一种方法中去掉。
方案:如何设计程序(Felleisen等人)是有关如何以优雅和实用的方式实际设计程序的最佳书籍之一。
Python: Python 编程: 使用 Python 的 Cs 简介 (Zelle) 是一个很好的介绍。
Python:在一些在线教程Python.org。
奥兹: 计算机编程的概念、技术和模型 (范罗伊和哈里迪) 被一些人视为阿贝尔森和苏斯曼的现代接班人。这是一个通过编程的大想法之旅, 涵盖比亚伯森和苏斯曼更广泛的范围, 而也许更容易阅读和遵循。它使用一种语言,Oz,这是不广为人知,但作为学习其他语言的基础。<
笔记
T. Capey指出,亚马逊上的"完全问题解决者"页面现在有"在21天内自学孟加拉语"和"自学语法和风格"的书籍下"为这个项目购物的顾客也为这些物品购物"部分。我猜看那本书的人很多来自这个页面。感谢罗斯·科恩对希波克拉底的帮助