三日编程

现代社会什么都流行快餐,从肯德基麦当劳等西式快餐,到真功夫吉野家,后来出现了文化快餐的说法。现在连编程都快餐化了。这种急功近利的办法其结果是不言而喻的。但纵然如此,市面上诸如《21天学会JAVA》等书籍依然销售火爆。本文将深入分析这种“三日编程”的来龙去脉。本文原文英文版,由十一城团队倾力翻译。

    三日编程

为什么都想速成?

逛逛书店,你会看到《7天自学Java》等诸如此类的N天或N小时学习Visual Basic、Windows、Internet的书。我用亚马逊网站的搜索引擎对出版年份选92年以后,用关键词“天”、“自学”、“教你”等字眼进行检索,然后有248个结果,前78个是计算机类图书,第79个是《30天学孟加拉语》。我用“小时”代替“天”再进行检索,结果惊人,有多达253本书,其中77本计算机图书,第78是《24小时自学语法句式》。在前200中,96%是计算机的书。结论就是要么人们急于学习电脑,要么计算机比任何东西都简单。没有任何书是关于几天学习贝多芬或量子物理的,甚至连是教你打扮你的狗这种书都没有。费雷森(Felleisen)等人在其著作《如何设计程序》中同意这个趋势,因为提到:“写出烂程序很简单,傻子用21天学还差不多,尽管他们的确真傻。” 

让我们看看书名如《三日学C++》的意味:

· 学习: 三天内你可能没有时间写出有意义的程序,或者从中积累经验。你没有时间去跟编程老鸟一起去体会这些程序在C++环境下的真实出现的状况。简而言之,你没有时间深入学习。所以这本书只能说一些极其肤浅的知识。正如亚历山大·波普(Alexander Pope)所言:一知半解乃危殆之事。

· C++: 三天内你可能学会C++的句法(如果你已经了解其他的语言),但你还不会使用它。简言之,假如是个Basic程序员,你可能写C++程序是Basic的风格,但你不能理解C++的优点。那要点是什么?艾伦·佩里斯(Alan Perlis)曾经说过:“一门不能影响你编程观点的语言不值得你去学。”. 有可能你学了一点点C++(更确切地说是如Javascript或Flash的Flex),因为你需要一个界面有现成的工具去完成特定的任务。但是你不是学习如何编程,而是学习如何去完成任务。

· 三天: 不幸地是,这远远不够,下一部分会详细讲。

 

十年树人

(Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973))等人有研究显示,任何领域中要想达到比较专深的水平需要十年的时间,包括下棋,音乐创作,电报,绘画,弹钢琴,游泳,网球,和研究的神经心理学和拓扑学。关键是好的方法:不要只是做了一遍又一遍,而要去挑战那些目前超过自己能力范围的任务,勇敢地尝试它,分析你的表现,并纠正错误。然后不断重复。似乎并不存在真正的捷径:即使是莫扎特,一个4岁的音乐神童,13年后才开始创作世界一流的音乐。在另一类文艺作品中,甲壳虫乐队似乎爆裂到现场与一系列# 1支安打和一出现在1964年的Ed Sullivan show。但从1957以来,他们一直在利物浦和汉堡的小俱乐部里活动,虽然他们在早期有很强的吸引力,他们的第一个伟大的成功的关键,军人,Peppers,在1967发布。Malcolm Gladwell的报告中,研究在班上比较顶端,中间,和末尾三类的柏林音乐学院学生时,问他们练习多少:所有三组的每个学生,大约在同一时间(五岁左右)开始练习。在前面几年,每个人练习大致相同数量-(每周2或3个小时)。但在八岁时开始出现真正的差异。最终成为班上最优秀的学生开始练习的比每个人都要多:九岁时每周六小时,12岁时每周八小时,14岁时每周16个小时,然后越来越多,直到20岁的时候他们每周练习时间超过30小时。20岁的时候,优秀的表演者都在他们的日常生活中练习时间共计10000小时。相比之下,好学生只是练习了8000个小时,而未来的音乐教师,刚刚超过4000小时。

因此,神奇的数字可能是10000小时,不是10年。(Henri Cartier-Bresson(1908年至04年)说:“你前面的10000张照片是最差的,但他拍了一个多小时。)Samuel Johnson(1709-1784)以为甚至需要更长的时间:“任何领域的卓越成就都只能通过一生的努力;它是用低一点的付出所得不到的。”Chaucer(1340—1400)抱怨“生命如此短暂,工作却如此长时间。”Hippocrates(公元前约400)是以他的名言“生命短暂,艺术长远”而家喻户晓,“这是一部分的时间报价,生命短暂,艺术长远,,more the opportunity is not common, more the try is dangerous(原文拉丁文:occasio praeceps, experimentum periculosum),传承艰难”,这在英语呈现为“生命是短暂的,技艺是长久的,机会稍纵即逝,实验是不可信的,判断是困难的。”虽然在拉丁语中,艺术可以指的是艺术或工艺,在原始希腊语单词“技艺”只意味着“技能”,而不是“艺术”。

 

这个是我的成功程序设计的秘诀:

1.对程序设计产生兴趣,并且因为其乐趣而去做一些事情。要保证它能够一直都有足够的兴趣能让你愿意花十年或者10000小时。

2.程序:最好的学习方式是通过实际操作来学习。说的更专业一些就是:“在给定领域内做出的成绩的水平并不是凭借人的机械般的经验主义得来的,而实际上是靠老练的人的深入的努力来提高的。”(P366)“最有效的学习需要一个对具体到某个人能够有着合理的困难度定界定的任务,有意义的反馈,还有就是要有提供副本与错误更正的机会。”(P20-21)这本书Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life是这个观点的一个好的参考。

3.和其他程序员交流,阅读其他的程序。这比任何书目和培训课程都重要。

4.如果你想,那么就去上个全日制大学(更好的在研究所)。这个将会让你更能靠近那些要求文凭的工作岗位,并且能给你对这个领域的更深层次的理解,但是如果你并不对学校感兴趣,你可以带着你的埋头苦干的劲头给你或者你的工作带来相似的历练。在任何情况下,光靠书本学习肯定是不行的。The New Hacker’s Dictionary 的作者Eric Raymond 说:“电脑科学教育让一个人成为编程高手的情况不会再比学习绘画和调色让一个人成为画家的情况多了”。我曾经雇用的一个最棒的程序员之一只有高中学位,他曾创编过很多很好的软件。他有他自己新建组群,并且做了很多选择就是为了去购置属于他自己的夜店。

5.和其他程序员在项目中合作。在一些项目中成为做好的程序员,在其他项目中成为最差的。当你是最好的时候,你应该检测一下你领导这个项目的能力,并且带着你的洞察力去激励其他人。当你是最差的时候,你去了解主管在做什么,还要去了解他们不喜欢做什么(因为是他们要你为他们做)。

6.在其他程序员之后进行项目工作。要理解一个程序会被其他人录入。看看需要理解掌握什么,还有当最初书写程序的程序员不在的时候会去修改它。考虑如何去设计你的程序以让在你之后的那些人运用那些程序。

7.学习至少六种程序语言。包括支持抽象类的语言(比如java或C++),支持抽象函数的语言(比如LISP或者ML),一种支持抽象语法的语言(比如LISP),支持说明性规范的语言(比如Prolog或者C++模板),支持代码协同的语言(比如LCON或者SCHEME),和支持平行度的语言(比如Sisal)。

8.记住在电脑科学中有“计算机”这个元素存在。要知道你的电脑需要花掉多长时间去执行一个指示,从存储器中拿出一个单词(有或者没有告诉缓存缺失),从磁盘中读取连续的字段,并且在磁盘中找寻一个新的定位。

9.要涉及到语言标准化工作。这可能就是ANSI C++委员会的工作,或者它可能是决定你当地的编码风格是2或4个空格的缩进级别。无论哪种方式,你都需要了解其他人喜欢哪种语言,以及他们的感受是什么,甚至只有一点感受。

10.要对语言标准化工作尽可能快的做出判断。这点是可疑的,即你光靠书本上学到的东西你能走多远。在我第一个孩子出生前,我读了所有的HOW TO BOOKS,并且仍然感觉是什么都不懂的新手。三十个月之后,当我第二个孩子出生的时候,我难道又把自己当成个初学者再次回到那些书里?答案是不会。反而我会依赖于我的个人经历,这个到最后会更加受用,而且相比几千页的有专家撰写的书来说,靠个人经历能更让我觉得踏实。

在我的文章No Silver Bullet i里,Fred Brooks证实了一个有三部分组成的为寻找出色的软件设计员的计划:

1.尽可能早的系统性地证明顶尖设计员的身份

2.分配一个职业导师,可以对你的未来的发展负责,并且妥善保存有关职业的文件。

3.提供让不断成长的设计员与他人交流和互动的机会。

有些人已经具备成为一个好的程序员所必需的品质了,现在的工作是以适合的方式引导他们前进。Alan Perlis 让它更简洁化:“每个人都能被向好的方向教育,而米开朗琪罗则是不得不被反方向教育。所以这就是好的程序员。”Perlis说伟大的人具备一些内在的品质,这些品质是胜过他们接受的培训。但是这些品质是哪来的呢?是天生的?或者是靠他们的努力得来的?正如Auguste Gusteau (the finctional chef in Ratatouille)说的那样:“每个人都能做饭,但是只有胆大的人才能把饭做好吃”。我觉得这更多的是一个人愿意花去生活中的一大部分精力去精心练习。但是可能大胆才是对它最好的诠释。正如Gusteau的评论家 Ego所说的:“不是所有人都能成为伟大的艺术家,但是一个伟大的艺术家是可以来自任何一个地方的”。

所以继续去做你该做的是吧,买一些ava/Ruby/Javascript/PHP 相关书籍。你将有可能从中获得有用的东西。但是你任何时间都不要为此改变你的生活,或者你真正掌握的一个程序员所具备的专业知识。如何在两年内不断地提高?那么,你现在就应该开始了。

因梦想而改变,世界因你而不同,十一城 ECs
在这里你可以获取更多精彩文章,实用短文,寻找更多生活中你未触及的角落。
及时推荐更新,可以添加十一城人人:http://www.renren.com/429725675

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注