十年内自学编程

走进任何一家书店,您都会看到如何在24小时内自学Java,以及在几天或几个小时内自学C、SQL、Ruby、算法等各种各样的语言。亚马逊高级搜索[标题:teach, yourself, hours, since: 2000,找到了512本这样的书。在前十本书中,九本是编程书(另一本是关于簿记的)。用“学习”代替“自学”,用“天”代替“小时”,也会得到类似的结果。

结论是,要么人们急于学习编程,要么编程比其他任何东西都要容易得多。Felleisen等人在他们的《如何设计程序》一书中承认了这一趋势,他们说“糟糕的编程很容易。”傻瓜可以在21天内学会它,即使他们是傻瓜。”《Abtruse Goose》漫画也有自己的风格。

让我们来分析一下《24小时自学c++》这款游戏的意义:

自学:在24小时内,你将没有时间写几个重要的程序,并从你的成功和失败中学习。您将没有时间与有经验的程序员一起工作,了解在c++环境中生活是什么样子的。简而言之,你没有时间学太多东西。所以这本书只能谈论肤浅的熟悉,而不是深刻的理解。正如亚历山大·蒲柏所说,一知半解是一件危险的事情。

c++:在24小时内,你可能能够学习一些c++的语法(如果你已经知道另一种语言),但你不可能学到很多关于如何使用这门语言的知识。简而言之,如果你是一个基本的程序员,你可以学习用c++语法编写Basic风格的程序,但是你不能学习c++到底有什么好处(和坏处)。那么重点是什么呢?Alan Perlis曾经说过:“如果一门语言不影响你思考编程的方式,那么它就不值得你去了解。”一个可能的问题是,您必须学习一点c++知识(或者更有可能是JavaScript或Processing之类的知识),因为您需要与现有的工具进行接口,以完成特定的任务。但是你并不是在学习如何编程;你正在学习如何完成这项任务。

24小时:不幸的是,这还不够,如下一节所示。

十年内自学编程

研究人员(布鲁姆(1985),布莱恩和哈特(1899),海斯(1989),西蒙& Chase(1973))显示大约需要十年开发经验的各种领域,包括国际象棋、音乐作曲,电报操作,绘画、弹钢琴、游泳、网球以及神经心理学和拓扑学的研究。关键是深思熟虑的练习:不仅仅是一遍又一遍地做,而是挑战自己,做一个超出你目前能力范围的任务,尝试它,在做的时候和之后分析你的表现,并纠正任何错误。然后重复。并再次重复。似乎没有真正的捷径:即使是4岁的音乐天才莫扎特,也花了13年多的时间才开始创作出世界级的音乐作品。在另一个流派中,甲壳虫乐队似乎以一系列的热门歌曲和1964年在埃德·苏利文秀上亮相而突然走红。但自1957年以来,他们一直在利物浦和汉堡的小俱乐部踢球,虽然他们在早期有广泛的吸引力,但他们的第一个巨大的成功是1967年发行的Sgt. Peppers。

马尔科姆•格拉德威尔(Malcolm Gladwell)推广了这一观点,尽管他专注于1万个小时,而不是10年。亨利·卡蒂埃-布列松(1908-2004)有另一个衡量标准:“你的前一万张照片是你最差的。”(他没有预料到,有了数码相机,有些人能在一周内达到这个水平。)真正的专长可能需要一生的时间:塞缪尔•约翰逊(Samuel Johnson, 1709-1784)曾说过:“任何部门的卓越成就都只能通过一生的努力获得;不能以较低的价格购买。”乔叟(1340-1400)抱怨道:“吕弗河太短,去勒内的船太长。”希波克拉底(约公元前400年)以摘录“ars longa, vita brevis”而闻名,这是较长的引文“ars longa, vita brevis, praeceps, experimentum pericullosum, idirium difficile”的一部分,英文翻译为“生命短暂,工艺漫长,机会稍息,实验不确定,判断困难”。当然,没有一个数字可以最终答案:这似乎不合理假设所有技能(如编程,国际象棋,跳棋,和播放音乐)可能都需要完全相同的时间掌握,也没有,所有的人将完全相同的时间。正如k·安德斯·埃里克森(K. Anders Ericsson)教授所说:“在大多数领域,即使是最有才华的人也需要多少时间才能达到最高水平,这是值得注意的。”1万小时这个数字给你的感觉是我们在说的是每周10到20小时的年数,有些人会认为这些人是最有天赋的人

所以你想成为一名程序员

以下是我的编程成功秘诀:

对编程感兴趣,并做一些因为它很有趣的事情。确保你的工作始终充满乐趣,这样你才愿意为之投入10年或1万个小时。

程序。最好的学习是在实践中学习。更专业地说,“在一个特定领域中,个人的最高表现水平并不是通过积累经验而自动达到的,但即使是经验丰富的个人,也可以通过有意识的努力来提高表现水平。”(第366页)和“最有效的学习需要一个明确定义的任务,对特定的个人有适当的难度水平,信息反馈,以及重复和纠正错误的机会。”(p. 20-21)《实践中的认知:日常生活中的心智、数学和文化》一书为这一观点提供了有趣的参考。

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

如果你愿意,在大学里读四年(或者在研究生院读更多)。这会让你获得一些需要证书的工作,也会让你对这个领域有更深的了解,但如果你不喜欢学校,你可以(通过一些努力)在自己或工作中获得类似的经验。无论如何,光靠书本知识是不够的。《新黑客词典》(The New Hacker’s Dictionary)的作者埃里克•雷蒙德(Eric Raymond)说:“计算机科学教育不能让任何人成为专业程序员,就像学习画笔和颜料不能让人成为专业画家一样。”我曾经雇佣过的最好的程序员之一只有高中学历;他制作了很多很棒的软件,拥有自己的新闻集团,通过股票期权赚的钱足以买下自己的夜总会。

和其他程序员一起做项目。在某些项目中成为最好的程序员;在另一些人身上做最差的。当你是最好的,你可以测试自己领导一个项目的能力,以及用你的愿景激励他人的能力。当你是最糟糕的时候,你会了解大师们做什么,以及他们不喜欢做什么(因为他们让你为他们做这些)。

在其他程序员之后做项目。理解别人写的程序。当最初的程序员不在时,看看如何理解和修复它。考虑如何设计您的程序,使那些在您之后维护它们的人能够更容易地维护它们。

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

参与语言标准化工作。它可以是ANSI c++委员会,或者它可以决定你的本地编码风格是有2个或4个空格缩进级别。无论哪种方式,你都可以了解到其他人在语言中喜欢什么,他们的感受有多深,甚至可能了解一点他们为什么会有这样的感觉。

有良好的判断力,尽快摆脱语言标准化工作。

考虑到所有这些,仅仅通过书本学习你能走多远是值得怀疑的。在我的第一个孩子出生之前,我读了所有的“如何做”的书,仍然觉得自己是个毫无头绪的新手。30个月后,当我的第二个孩子出生的时候,我是否又回到书中复习了一下?不。相反,我依靠的是我的个人经验,这对我来说比专家写的成千上万页要有用得多,也更让我安心。

尽早系统地确定顶级设计师。

指派一名职业导师,负责发展未来客户,并仔细保存职业档案。

为成长中的设计师提供相互交流和激励的机会。

这是假设有些人已经具备成为优秀设计师的必备素质;要做的就是好好地哄着它们。艾伦·佩利斯(Alan Perlis)说得更简洁:“每个人都可以被教会雕刻,而米开朗基罗(Michelangelo)则必须被教会如何不去雕刻。”伟大的程序员也是如此。”佩利斯说的是,伟人有一些内在的品质超越了他们的训练。但质量从何而来?是天生的吗?还是通过勤奋来发展?就像奥古斯特·古斯特(《料理鼠王》中虚构的厨师)说的那样,“人人都能做菜,但只有无所畏惧的人才能变得伟大。”我认为它更多的是一种愿意把一个人的很大一部分l奉献出来的意愿

所以去买一本Java/Ruby/Javascript/PHP的书吧;你可能会用它的。但在24小时或21天内,你不会改变你的生活,或你真正的程序员专业知识。在过去的24个月里努力工作以不断提高怎么样?现在你开始有进展了…

参考文献

本杰明·布卢姆(编著)《培养年轻人的才能》,百龄坛出版社,1985年版。

布鲁克斯,弗雷德,《没有银弹》,IEEE计算机,第20卷,No。1987年4月,第10-19页。

John R. Hayes,《完全问题解决者Lawrence Erlbaum》,1989年。

蔡斯,威廉G. &西蒙,赫伯特A.。《国际象棋中的知觉》,认知心理学,1973年,4,55 -81。

《实践中的认知:思维、数学和日常生活中的文化》,剑桥大学出版社,1988年。

答案

执行典型指令1/ 1000,000,000秒= 1纳秒

从L1缓存中读取0.5纳秒

分支错误预测5毫微秒

从L2缓存内存中获取7纳秒

互斥锁锁定/解锁25纳秒

从主存中获取100纳秒

通过1Gbps网络发送2K字节,20,000纳秒

从内存中连续读取1MB 25万纳秒

从新磁盘位置(寻址)获取800万纳秒

从磁盘上连续读取1MB 2000万纳秒

将数据包发送到欧洲,然后返回150毫秒= 1.5亿纳秒

附录:语言选择

有几个人问他们应该首先学习哪种编程语言。没有一个答案,但考虑以下几点:

使用你的朋友。当被问到“我应该用什么操作系统,Windows, Unix还是Mac?”,我的回答通常是:“随便你朋友用什么都行。”从朋友那里学习的好处将抵消操作系统或编程语言之间的内在差异。还要考虑你未来的朋友:如果你继续下去,你将成为其中一员的程序员社区。你选择的语言有一个正在成长的大社区还是一个正在消亡的小社区?是否有书籍、网站和在线论坛可以得到答案?你喜欢那些论坛里的人吗?

保持简单。像c++和Java这样的编程语言是专为专业开发而设计的,这些开发团队由经验丰富的程序员组成,他们关心代码的运行时效率。因此,这些语言有针对这些情况而设计的复杂部件。你关心的是学习编程。你不需要那么复杂。你想要一种语言被设计成一个新程序员容易学习和记忆。

玩了。你更愿意用哪种方式来学习弹钢琴:正常的、互动的方式,即你一按下一个键就能听到每个音符,还是“批量”模式,即你只在完成整首歌后才能听到每个音符?显然,交互模式使学习钢琴和编程变得更容易。坚持使用具有交互模式的语言并使用它。

鉴于这些标准,我建议首选编程语言是Python或Scheme。另一个选择是Javascript,不是因为它为初学者设计得非常好,而是因为有很多关于它的在线教程,比如可汗学院的教程。但你的情况可能会有所不同,还有其他好的选择。如果您的年龄是个位数,您可能更喜欢Alice或Squeak或Blockly(年龄较大的学习者可能也喜欢这些)。重要的是你选择并开始。

附录:书籍和其他资源

一些人问他们应该从哪些书籍和网页中学习。我重申,“单靠书本学习是不够的”,但我可以推荐以下内容:

《方案:计算机程序的结构和解释》(Abelson & Sussman)可能是最好的计算机科学入门,它将编程作为理解计算机科学的一种方式来教授。你可以在网上看到这本书的讲座视频,以及完整的文本。这本书具有挑战性,它将淘汰一些可能通过另一种方法获得成功的人。

《方案:如何设计程序》(Felleisen等人)是关于如何以优雅和实用的方式实际设计程序的最好的书籍之一。

《Python: Python编程:CS入门》(Zelle)是一本很好的使用Python的入门书。

《Oz:计算机编程的概念、技术和模型》(Van Roy & Haridi)被一些人视为Abelson & Sussman的现代继承者。这是一次编程的大理念之旅,涵盖范围比Abelson & Sussman更广泛,但可能更容易阅读和理解。它使用一种语言,奥兹,不广为人知,但作为学习其他语言的基础。<笔记>

T. Capey指出,亚马逊上的完整问题解决页面现在有“在21天内自学孟加拉语”和“自学语法和风格”的书籍,在“买过这种商品的顾客也买过这些商品”的栏目下。我猜大部分看这本书的人都来自这一页。感谢罗斯·科恩对希波克拉底的帮助。

THE END
0.LearnArabicforBeginnersLearn Arabic with the world’s most effective language learning educational app for Free. This app is an ultimate quick Arabic learning package for 更多 一般 What's new Surface Pro Surface Laptop Surface Laptop Studio 2 Copilot for organizations Copilot for personal use AI in jvzquC41yy}/orhtquugv7hqo1€i/}|1r1rfc{s/ctgckl2hqt3cgpnppgxt1B||fpisfzr5p
1.eval()pythonPython教程(二)——基础语法本次教程二我们来基于小猪佩奇的代码来开始基础语法的入门。 编码 默认情况下,Python3 源码文件以UTF-8编码,所有字符串都是unicode 字符串。 # coding:utf-8 AI写代码 为什么要有编码呢?可以简单地理解,就是,世界上人会说很多语言,汉语,英语,阿拉伯语等等,但是计算机只会二进制语言,所以就有了编码来转换。差不jvzquC41dnuh0lxfp0tfv8|gkzooa<>;73:2;8ftvkimg8igvcomu86328;1396
2.越南语基础写作教程世界图书出版广东有限公司基础越南语(1亚非语言文学重量特色专业建设点系列教材) 世界图书出版公司 ¥25.00 马来语阅读教程(2) 世界图书出版公司 ¥23.30 限时抢 新经典葡萄牙语写作 外语教学与研究出版社 ¥27.90 限时抢 土耳其语汉语词典 商务印书馆 ¥106.50 限时抢 阿拉伯语美文晨读 世界图书出版公司 ¥23.20 新启航西班jvzq<84rtqjve}3o0fgoimfpi0ipo86696884?:90jznn
3.免费Python网站搭建教程,轻松学习,快速上手,零基础也能掌握免费Python网站搭建教程:零基础也能快速上手在数字化时代,拥有一个个人网站或小型网站已经成为许多人展示自己、分享想法和建立在线业务的重要工具,对于许多初学者来说,网站搭建似乎是一个复杂且难以触及的领域,幸运的是,借助Python这一强大的编程语言及其丰富的框架,如Django和Flask,搭建网站变得前所未有的简单,本文将为jvzq<84o0cyuw}jmpq}mgmlg0et0c}ytcezjxn433390596324e6;B:940nuo
4.四川外国语大学2023年考研参考书(第4页)考研615 基础日语 《日语综合教程》陈小芬编著,新世纪高等学校本科生系列教材,上海外语教育出版社,2018 年 2 月 815 日语翻译与写作 《日汉互译教程》高宁、张秀华著, (第二版) ,南开大学出版社,2010 年版 复试参考书目: 《日语文语语法》,王廷凯主编,四川大学出版社 2010 年 9 月第二版 jvzquC41mcuzcw3mqqrfc{s0eqs049742;761::73:;6a=3jvor