Teach Yourself Programming in Ten Years
彼得·诺维格(Peter Norvig)是美国计算机科学家。他是Google,LLC的研究总监,并曾担任Google搜索质量总监。他也是美国人工智能促进协会(AAAI)的会员和委员,与斯图尔特·罗素(Stuart Russell)共同撰写了《人工智能:现代方法》,目前是该领域的领先大学教材。他曾是NASA Ames研究中心计算科学部(现为智能系统部)的负责人。
本文是他非常有名的一篇文章,也是业界公认的神文,相信大家可以从中得到启发,成为一个更优秀的计算机从业者。另外他在文中推荐的几本书也值得一读。(链接:https://pan.baidu.com/s/1jeMC1KLSr0ZEJ1Idi4kGdA 提取码:55at)。
1。你们着什么急
随意步入一家书店,满目都是《7天搞定Java编程》这种速成书目,同样的书籍还包括Visual Basic、Window系统、Internet互联网等等,它们都承诺在几天,甚至几小时之内就让你能够学会相关技术。我在亚马逊网站上做了如下的条件检索:[pubdate: after 1992 and title: days and title: learn or title: teach yourself] (出版日期:1992年以后,题目关键字:“天”,“学会”或者“自学”) 然后得到了248条搜索结果。头78条都是计算机类书籍(第79条记录是《30天学会孟加拉语》)。我将“天”关键字换成了“小时”,不出意外地搜索到了253条记录,其中头77条记录是计算机书籍,第78条的搜索记录是《24小时语法和样式自学手册》。在总共搜索到的头200条记录中,有96%是计算机书籍。
从上面的搜索结果可以看出来,要么就是人们对计算机技术的学习如饥似渴,要么就是计算机技术实在太简单,不费吹灰之力就能学会。相比于计算机技术书籍的如此“速成”,在其他领域的书籍里,你却很难找到诸如:“三天学会贝多芬”,或者“五天搞定量子力学”,这种速成教材,甚至连《狗狗喂养手册》这种宠物指南,都鲜有“几天搞定”的说法。Felleisen et al.在他们的著作《如何设计程序》一书中明确指出了这种“速成”的趋势,并评论到:“垃圾的编程技术当然非常容易,傻子都能在21天之内学会,哪怕他天生就是个白痴。”
让我们来仔细看看《3天学会C++》这种速成教材实际上意味着什么:
- 学会:在3天时间里你几乎没有时间去写任何有意义的程序,就更不要谈什么从编程中获得经验和教训这种事情了。你也不可能有时间和有经验的程序员一起工作和交流,也不会体验到在真正的C++环境下工作是什么感觉。长话短说吧,你就是没时间,也学不到什么。所以这种书籍最多也就让你有个粗浅的印象,但是绝对不可能有深入的理解。就像亚历山大教皇说的那样,“浅尝辄止是很危险的”。
- C++: 如果你有其他编程语言的基础,那么3天之内你也许可以学到C++的一些语法,但即使是这样,你还是无法了解如何使用该语言编程。简言之,如果你之前是一个Basic程序员,那么经过3天的学习,你会成为一个“能使用C++语法编写Basic风格程序的程序员”,不过这样是没法发挥出C++语言本身的优势的(说句不好听的,你连怎么犯C++的典型错误都不会)。仅仅知道一点语法意味着什么呢?Allan Perlis曾经说过:“一个无法改变你思维方式的编程语言是不值得学习的。”;另一种可能性是,你可以只学一点点C++知识(类似的,或者一点点JavaScript,或者一点点Flex Script)