相信很多做技术的同学都自学过,也看过「Teach Yourself Programming in Ten Years」这篇文章。虽然离初次发表已经好几年了,但所有试图自学编程的人都应该发自内心的同意它的说法(除去少数过时的具体技术部分)。直到今天,这篇经典的文章依然很有借鉴意义。以下是这篇文章的中文版。
结论是,要么人们急于学习编程,要么编程比其他任何东西都更容易学习。Felleisen 等人在他们的书《How to Design Programs》中提到,「糟糕的编程很容易,即便是白痴都可以在 21 天内学会」时,请对这一观点表示赞同。
让我们来分析一下在 24 小时内学会 C++意味着什么:
自学:24 小时内,你将没有时间写几个重要的程序,并从成功和失败中吸取教训。你将没有时间和一个有经验的程序员一起工作,并理解在 C++环境中编程会是什么样子。简而言之,你将没有时间去学习多少东西。所以这本书只能说是肤浅的熟悉,而不是深刻的理解。正如 Alexander Pope 所说,只学会一点点点东西是危险的
当然,没有一个数字可以作为最终的答案,假定所有的技能(如编程、下棋、跳棋和音乐演奏)都需要完全相同的时间来掌握,或者所有人都需要完全相同的时间是不合理的。正如 K. Anders Ericsson 教授所说,「在大多数领域,即使是最有才华的人也需要很多时间才能达到最高水平,这是非常值得注意的。10000 小时这个数字让你感觉到,我们说的是一周 10 到 20 个小时。」
编码。最好的学习方式是实践。更严格地说,「在特定领域中,一个人的最高水平不是由于经验的积累自动获得的,而是经过深思熟虑的改进,经验丰富的人也可以提高水平。」,「最有效的学习需要有一个明确的任务,对特定的人来说难度适中,还要有信息反馈以及重复试错和纠正错误的机会。」「Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life」这本书正是这一观点的有趣参考。
与其他程序员交谈;阅读其他程序。这比任何书籍或培训课程都重要。
如果你愿意,可以在大学(或研究生院)呆四年。这将使你有机会获得一份需要证书的工作,让你对这个领域有更深的了解,但如果你不喜欢学校,你可以自学或在工作中获得类似的经验。无论如何,光靠书本知识是远远不够的。「The New Hacker's Dictionary」的作者 Eric Raymond 说:「计算机科学教育不能使任何人成为一个专业的程序员,就像学习刷子和颜料不可以使某人成为一个专业的画家一样。」我雇用过的最好的程序员之一只有高中学历,他开发了许多优秀的软件,拥有自己的团队,并且拥有足够买下一个夜店的股票期权。
考虑到这些标准,对于要学习的第一种编程语言我的建议是 Python 或 Scheme。另一个选择是 JavaScript,这不是因为它是为初学者精心设计的,而是因为它有很多在线教程,比如 Khan Academy 的教程。但每个人的情况都略有不同,还有一些其他的好选择。如果你还是隔小孩,你可能更喜欢 Alice 或 Squeak 或 Blockly(年长的学习者也可能喜欢这些)。这些都没关系,重要的是你要选择并开始。
附录:书籍和其他资源
有人问他们应该从哪些书和网页上学习。我再重复一遍:仅仅看书是不够的。但我可以推荐以下资源:
Scheme:「Structure and Interpretation of Computer Programs (Abelson & Sussman)」可能是计算机科学最好的导论书籍,它也确实将教授编程作为理解计算机科学的一种方式。你可以在网上看到关于这本书的讲座视频,以及完整的文本。这本书读起来具有挑战性,将淘汰一些可能通过这种方法获得成功的人。
Scheme:「How to Design Programs (Felleisen et al.)」是关于在实践中如何以优雅和实用的方式设计程序的最佳书籍之一。
Python:「Python Programming: An Intro to CS (Zelle)」很好地介绍了如何使用 Python。
Python:Python.org 上有一些在线教程。
Oz:「Concepts, Techniques, and Models of Computer Programming (Van Roy & Haridi)」被一些人视为 Abelson 和 Sussman 的现代继承人。读这本书会让你理解编程思想,它的涵盖范围比 Abelson 和 Sussman 更广泛,同时可能更容易阅读和理解。它使用的语言是 Oz,这种语言并不广为人知,但它却是学习其他语言的基础。
备注
T. Capey 指出,Amazon 网页上那个「Complete Problem Solver」页面把《Teach Yourself Bengali in 21 days》以及《Teach Yourself Grammar and Style》这两本书移到了「购买此书的用户还购买过这些产品」这个区域内。我估计大部分人就是从这个区域看到这本书的。感谢 Ross Cohen 的帮助。