编程需十年
by noreply@blogger.com (rain)
at 2010-10-18 23:26:05
original http://feedproxy.google.com/~r/blogspot/CRBRG/~3/yiD_NdmG49w/blog-post_7592.html
原作者: 结论就是要么人们急于学习电脑,要么计算机比其他东西学起来要异常简单。没有任何书是关于几天学习贝多芬或量子物理的,甚至连犬类装扮都没有。费雷森(Felleisen)等人在其著作《如何设计程序》中同意这个趋势,因为提到:"坏设计很简单,笨蛋才用21天学,尽管他们还是真傻。" 让我们看看书名如《三日学C++》的意味: 所以,更确切地说,一万小时,而非十年,是个神奇之数。萨缪尔·约翰逊(Samuel Johnson, 1709-1784) 认为还需更长时间:"卓越乃一生之追求,而非其他。" 乔叟(Chaucer , 1340-1400)抱怨道"the lyf so short, the craft so long to lerne." (生之有限,学也无涯)。希波克拉底(Hippocrates , c. 400BC)因这句话被世人所知:"ars longa, vita brevis"(译注:拉丁语,意为"艺无尽,生有涯"),更长的版本是 "Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile",翻译成英文就是 "Life is short, [the] craft long, opportunity fleeting, experiment treacherous, judgment difficult." (生有涯,艺无尽,机遇瞬逝,践行误导,决断不易),然而在拉丁语中,ars 既含艺术,又寓工艺,希腊语原文使用的 "techne" 只表示"技艺",而非"艺术"。 我的编程成功秘笈是: 弗莱德·布鲁克斯(Fred Brooks) 撰文《没有尚方宝剑》(No Silver Bullet,又译"没有银弹") 给出了寻找顶级设计师的三条建议: 所以径直去买那本Java书,你或许发现些许有用的东西。但你不会改变你的未来,或者在24小时内甚至24天,抑或24月成为专才里手。 Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985. Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19. Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989. Chase, William G. & Simon, Herbert A. "Perception in Chess" Cognitive Psychology, 1973, 4, 55-81. Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
来源Teach Yourself Programming in Ten Years
译者opipa为何都想速成?
逛逛书店,你会看到《7天自学Java》等诸如此类的N天或N小时学习Visual Basic、Windows、Internet的书。我用了亚马逊网站的强大搜索(点此),出版年份选92年以后,书名关键词"天"、"自学"、"教你",然后有248个结果,前78个是计算机类图书,第79个是《30天学孟加拉语》。我用"小时"换下"天",结果惊人,有多达253本书,其中77本计算机图书,第78是《24小时自学语法句式》。在前200中,96%是计算机的书。十年磨砺编程
研究人员 (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) 得出结论欲在诸多领域达到职业水平需要十年,比如国际象棋,作曲,电报操作,绘画,弹钢琴,游泳,网球以及神经心理学和拓扑学的研究。 关键是精心练习,不只是一遍一遍重复,而是挑战一项恰好超越你能限的事情,尝试并思考你的表现,并自我矫正。然后不断挑战。这并无捷径,4岁的音乐奇才莫扎特用了13年才能创作世界级的音乐。另外,披头士乐队似乎在1964年的埃德·苏利文( Ed Sullivan show)演出中一炮而红,但是他们自从1957年就在利物浦和汉堡的酒吧演出,在取得广泛关注后的早期,第一部重量级作品《佩珀军士》(Sgt. Peppers)发行是在1967年。 马尔科姆·格兰德维尔(Malcolm Gladwell)撰文描述了一项针对柏林音乐学院学生的研究,他们被分为尖子,中等和不足三类,并被问到他们练琴的情况: 所有三组中的人,开始学琴的年龄大概相差无几,五岁左右。在刚开始的几年,所有人练习量也差不多,一周两三个小时。自八岁开始,实质性变化就有了。那些精英学生开始比其他人练习更多:九岁的时候一周六个小时,十二岁的时候一周八个小时,十四岁的时候一周十六个小时,一直到二十岁的时候一周要超过三十小时。截止到二十岁,在他们的生涯里已经有总计一万小时练琴。仅仅表现可以的那部分学生加起来是八千小时,那些未来的音乐老师有四千小时。
知道统统这些,只通过书本的学习达到之程度就令人持疑。我的第一个孩子降生的时候,我读了所有的"如何做"(How To)系列书籍,仍然对于育婴是个漫无头绪的新手。30个月后,我第二个孩子出生,我还要温习一下那些书?绝对不,相反,我根据个人经验,结果相当有用,并让我确信我的经验比那些专家们写的上千页文字强。
这里假定有部分人已经有成为伟大设计师的潜质,你所需的就是要诱导他们。艾伦·佩里斯(Alan Perlis)一针见血:"谁人都可以学雕刻,要如此,那要教米开朗基罗如何不去干雕刻。对于伟大程序员来讲亦如是。"参引文献
答案
典型操作在个人电脑上的大概运行时间:普通指令 1/1,000,000,000 sec = 1 nanosec L1缓存中取字 0.5 nanosec 分支错误预测 5 nanosec L2缓存中取字 7 nanosec 互斥量上锁/解锁 25 nanosec 主存中取字 100 nanosec 在1Gbps网络发送2KB的信息 20,000 nanosec 从内存中顺次取1MB内容 250,000 nanosec 在新的磁盘位置取内容(搜索) 8,000,000 nanosec 从磁盘顺次读1MB内容 20,000,000 nanosec 信息在美国到欧洲一个来回 150 milliseconds = 150,000,000 nanosec 附录:语言甄选
有人问先学那种语言合适。这里有一个答案,但要考虑下述几点:
有了这些基准,我的建议是你要学的第一门语言是 Python 或者 Scheme. 但是你的情况可能不同,选择也多多。如果你的年龄还是个位数,你可能更喜欢 Alice 或者 Squeak (年龄大的一些人也可能喜欢哦). 重要的是选择一种并开始学习。
附录:书目和其他资源
也有人问应该从何学起,看哪些书哪些网站。我反复讲"只读书远远不够",但我还是推荐一些:注释
T. Capey 指出现在亚马逊的"解疑大全"网页(Complete Problem Solver),在"购买此书的顾客还购买"一栏里有《21天学会孟加拉语》,《自学文法和风格》。我想一大部分人看这些书的都是从这页过来的。多谢Ross Cohen教我希波克拉底的那部分。