1998年,互联网泡沫方兴未艾,编程教育市场充斥着“21天精通Java”“7天学会C++”的速成秘籍。就在这一年,著名计算机科学家、Google研究总监彼得·诺维格(Peter Norvig)在个人网站上发布了一篇不足三千词的短文——《Teach Yourself Programming in Ten Years》。这篇文章没有提供一行代码,却以冷静的笔触拆解了“快速学会编程”的谎言,提出了一个让当时无数急功近利者不适的结论:真正掌握编程,至少需要十年。
二十多年过去,当AI编程工具Copilot能自动生成代码、当“提示工程师”成为新职业,回望这篇经典文章,它的每个论点都像一记重锤,敲在浮躁的互联网时代脸上。
反速成的宣言
诺维格写作此文时,正值《21天学通Visual Basic》等书籍霸榜书店。他在开头毫不留情地指出:如果真有人21天就能学会编程,那应该是“21年”的笔误。他引用心理学家安德斯·埃里克森的研究——即后来被普及为“一万小时定律”的刻意练习理论——指出:成为世界级专家需要约十年的专注投入。
但这十年不是单纯“写代码十年”。诺维格重点区分了“经验”与“练习”。如果只是重复做同样的工作,十年后可能只是一个熟练的初级程序员。真正的成长需要主动挑战舒适区、系统学习理论、参与复杂项目、阅读大师代码。他甚至建议学习者:“和别的程序员一起做项目,做最好的程序员会做的事;向最好的程序员学习,但不要迷信权威。”
十条箴言背后的认知框架
文章主体是十条自学建议,如今已是编程界口耳相传的金科玉律:
- 对编程产生兴趣——只有热爱才能支撑漫长的积累。
- 动手写代码——看书不写代码等于没学。
- 和别的程序员交流——审查他人的代码,也让他人审查你的代码。
- 在大学里学习计算机科学——理论(算法、数据结构、编译原理)是长跑中的耐力。
- 不要只盯着Java/Python——学习多种编程范式(函数式、逻辑式、命令式等)。
- 不要只盯着“用户友好”的语言——C、Lisp、Smalltalk等看似难学的语言往往藏着真知。
- 关注“基本原理”而非“最新金花”——框架三年换一轮,但数据结构与算法永不过时。
- 不要被“两年经验”这样的招聘要求吓倒——经验不等于年限,深度思考胜过打卡式工作。
- “用十年”,不是连续盯屏幕十年——睡眠、锻炼、其他爱好对大脑至关重要。
- 享受过程——编程是一场马拉松,保持幽默感。
这些建议看似朴素,但每一条都对应着当时及至今仍在泛滥的学习误区。比如第5条,如今很多初学者只学Python,却不知道函数式编程的不可变性思维对调试有多重要;第7条,无数人跟风学习Spring Boot,却对计算机组成原理一窍不通。
时代的回响
文章发表后迅速传播,成为黑客新闻(Hacker News)、Reddit等社区的长青话题。它不只是一篇编程指南,更被视作对消费主义式学习的抵抗。诺维格后来在《人工智能:一种现代方法》合著中继续贯彻这种思想:真正的技术深度无法通过碎片化课程获得。
有趣的是,乔布斯那句广为流传的“Stay Hungry, Stay Foolish”最初是在斯坦福大学演讲中提出的,而诺维格的文章比他早七年就已经在表达相同的理念:保持对基本原理的“饥饿”,对自身局限的“愚钝”认知。
2025年的再审视
如今,大模型能在秒级生成千行代码,初级编程岗位需求萎缩。但诺维格的告诫反而更加尖锐:生成式AI可以写CRUD(增删改查)逻辑,但无法替代人类对系统架构、安全性、伦理判断的深层理解。当代码成本趋近于零,真正稀缺的是“能设计十年后还在运行的系统”的工程师。
《Teach Yourself Programming in Ten Years》不是一篇技术文章,而是一剂清醒剂。它提醒每一个想踏入编程世界的人:速成是谎言,但长期主义不是鸡汤,是科学。 在时代潮水中,守住十年磨一剑的耐心,或许才是程序员最需要的“算法”。