十年内自学编程

为什么大家都这么着急?

走进任何一家书店,您都会看到如何在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个月后,当我的第二个孩子出生的时候,我是否又回到书中复习了一下?不。相反,我依靠的是我的个人经验,这对我来说比专家写的成千上万页要有用得多,也更让我安心。

Fred Brooks在他的文章No Silver Bullet中指出了寻找优秀软件设计师的三部分计划:

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

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

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

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

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

参考文献

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

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

布莱恩,W.L. &哈特,N.;“电报语言的研究:习惯层次的习得。”《心理学评论》1899年8,345 -375

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

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

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

答案

在典型PC上的各种操作的近似时间:

执行典型指令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的入门书。

Python:在Python.org上可以找到一些在线教程。

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

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

翻译

感谢以下作者,本页的翻译可在:

阿拉伯语

(穆罕默德·a·Yahya)

保加利亚

(Boyko Bantchev)

中国人

(于宁波郭)

克罗地亚

(Tvrtko Bedekovic)

世界语

(费德里科•中国人)

法国

(艾蒂安Beauchesne)

德国

(Stefan Ram)

希伯来语

(Eric麦凯恩)

北印度语

(Vikash女子)

匈牙利

(Marton Mestyan)

印尼

(Tridjito Santoso)

意大利

(法比奥·z . Tessitore)

日本

(yomoyomo)

韩国(约翰·黄)

波斯

(Mehdi Asgari)

波兰的

(库巴地毯诺瓦克)

葡萄牙语

(奥古斯托Radtke)

罗马尼亚

(Ştefan有没有ăr)

俄罗斯

(康斯坦丁Ptitsyn)

塞尔维亚

(Lazar Kovacevic)

西班牙语

(Carlos达)

斯洛伐克语

(Jan Waclawek)

土耳其

(Cağıl Uluşahin)

乌克兰

(Oleksii Molchanovskyi)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容