“21天教你学会C++”
下面是一个《Teach Yourself C++ in 21 Days》的流程图,请各位程序员同仁认真领会。如果有必要,你可以查看这个图书以作参照:http://www.china-pub.com/27043
看完上面这个图片,我在想,我学习C++有12年了,好像C++也没有学得特别懂,看到STL和泛型,还是很头大。不过,我应该去考虑研究量子物理和生物化学,这样,我才能重返98年杀掉还在大学的我,然后达到21天搞定C++的目标。另外,得要特别提醒刚刚开始学习C++的朋友,第21天的时候,小心被人杀害。呵呵。
当然,上面只是一个恶搞此类图片,学习一门技术,需要你很长的时间,正如图片中的第三图和第四图所示,你需要用十年的时间去不断在尝试,并在错误中总结经验教训,以及在项目开发中通过与别人相互沟通互相学习来历练自己。你才能算得上是真正学会。
这里有篇文章叫《Teach Yourself Programming in Ten Years》,网上有人翻译了一下,不过原文已被更新了,我把网上的译文转载并更新如下:
用十年来学编程
Peter Norvig
为什么每个人都急不可耐?
(出版日期:1992年后 and 书名:天 and (书名:学会 or 书名:无师自通))
- 学会:在3天时间里,你不够时间写一些有意义的程序,并从它们的失败与成功中学习。你不够时间跟一些有经验的程序员一起工作,你不会知道在C++那样的环境中是什么滋味。简而言之,没有足够的时间让你学到很多东西。所以这些书谈论的只是表面上的精通,而非深入的理解。如Alexander Pope(英国诗人、作家,1688-1744)所言,一知半解是危险的(a little learning is a dangerous thing)
- C++:在3天时间里你可以学会C++的语法(如果你已经会一门类似的语言),但你无法学到多少如何运用这些语法。简而言之,如果你是,比如说一个Basic程序员,你可以学会用C++语法写出Basic风格的程序,但你学不到C++真正的优点(和缺点)。那关键在哪里?Alan Perlis(ACM第一任主席,图灵奖得主,1922-1990)曾经说过:“如果一门语言不能影响你对编程的想法,那它就不值得去学”。另一种观点是,有时候你不得不学一点C++(更可能是javascript和Flash Flex之类)的皮毛,因为你需要接触现有的工具,用来完成特定的任务。但此时你不是在学习如何编程,你是在学习如何完成任务。
- 3天:不幸的是,这是不够的,正如下一节所言。
10年学编程
在这三个小组中的每一个人基本上都是从相同的时间开始练习的(在五岁的时候)。在开始的几年里,每个人都是每周练习2-3个小时。但是在八岁的时候,练习的强度开始显现差异。在这个班中水平最牛的人开始比别人练习得更多——在九岁的时候每周练习6个小时,十二岁的时候,每周8个小时,十四岁的时候每周16个小时,并在成长过程中练习得越来越多,到20岁的时候,其每周练习可超过30个小时。到了20岁,这些优秀者在其生命中练习音乐总共超过 10,000 小时。与之对比,其它人只平均有8,000小时,而未来只能留校当老师的人仅仅是4,000 小时。
- 对编程感兴趣,因为乐趣而去编程。确定始终都能保持足够的乐趣,以致你能够将10年时间投入其中。
- 跟其他程序员交谈;阅读其他程序。这比任何书籍或训练课程都更重要。
- 编程。最好的学习是从实践中学习。用更加技术性的语言来讲,“个体在特定领域最高水平的表现不是作为长期的经验的结果而自动获得的,但即使是非常富有经验的个体也可以通过刻意的努力而提高其表现水平。”(p. 366),而且“最有效的学习要求为特定个体制定适当难度的任务,有意义的反馈,以及重复及改正错误的机会。”(p. 20-21)《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》(在实践中认知:心智、数学和日常生活的文化)是关于这个观点的一本有趣的参考书。
- 如果你愿意,在大学里花上4年时间(或者再花几年读研究生)。这能让你获得一些工作的入门资格,还能让你对此领域有更深入的理解,但如果你不喜欢进学校,(作出一点牺牲)你在工作中也同样能获得类似的经验。在任何情况下,单从书本上学习都是不够的。“计算机科学的教育不会让任何人成为内行的程序员,正如研究画笔和颜料不会让任何人成为内行的画家”, Eric Raymond,《The New Hacker’s Dictionary》(新黑客字典)的作者如是说。我曾经雇用过的最优秀的程序员之一仅有高中学历;但他创造出了许多伟大的软件(XEmacs, Mozilla),甚至有讨论他本人的新闻组,而且股票期权让他达到我无法企及的富有程度(译注:指Jamie Zawinski,Xemacs和Netscape的作者)。
- 跟别的程序员一起完成项目。在一些项目中成为最好的程序员;在其他一些项目中当最差的一个。当你是最好的程序员时,你要测试自己领导项目的能力,并通过你的洞见鼓舞其他人。当你是最差的时候,你学习高手们在做些什么,以及他们不喜欢做什么(因为他们让你帮他们做那些事)。
- 接手别的程序员完成项目。用心理解别人编写的程序。看看在没有最初的程序员在场的时候理解和修改程序需要些什么。想一想怎样设计你的程序才能让别人接手维护你的程序时更容易一些。
- 学会至少半打编程语言。包括一门支持类抽象(class abstraction)的语言(如Java或C++),一门支持函数抽象(functional abstraction)的语言(如Lisp或ML),一门支持句法抽象(syntactic abstraction)的语言(如Lisp),一门支持说明性规约(declarative specification)的语言(如Prolog或C++模版),一门支持协程(coroutine)的语言(如Icon或Scheme),以及一门支持并行处理(parallelism)的语言(如Sisal)。
- 记住在“计算机科学”这个词组里包含“计算机”这个词。了解你的计算机执行一条指令要多长时间,从内存中取一个word要多长时间(包括缓存命中和未命中的情况),从磁盘上读取连续的数据要多长时间,定位到磁盘上的新位置又要多长时间。(答案在这里)
- 尝试参与到一项语言标准化工作中。可以是ANSI C++委员会,也可以是决定自己团队的编码风格到底采用2个空格的缩进还是4个。不论是哪一种,你都可以学到在这门语言中到底人们喜欢些什么,他们有多喜欢,甚至有可能稍微了解为什么他们会有这样的感觉。
- 拥有尽快从语言标准化工作中抽身的良好判断力。
抱着这些想法,我很怀疑从书上到底能学到多少东西。在我第一个孩子出生前,我读完了所有“怎样……”的书,却仍然感到自己是个茫无头绪的新手。30个月后,我第二个孩子出生的时候,我重新拿起那些书来复习了吗?不。相反,我依靠我自己的经验,结果比专家写的几千页东西更有用更靠得住。
Fred Brooks在他的短文《No Silver Bullets》(没有银弹)中确立了如何发现杰出的软件设计者的三步规划:
- 尽早系统地识别出最好的设计者群体。
- 指派一个事业上的导师负责有潜质的对象的发展,小心地帮他保持职业生涯的履历。
- 让成长中的设计师们有机会互相影响,互相激励。
这实际上是假定了有些人本身就具有成为杰出设计师的必要潜质;要做的只是引导他们前进。Alan Perlis说得更简洁:“每个人都可以被教授如何雕塑;而对米开朗基罗来说,能教给他的倒是怎样能够不去雕塑。杰出的程序员也一样”。
所以尽管去买那些Java书;你很可能会从中找到些用处。但你的生活,或者你作为程序员的真正的专业技术,并不会因此在24小时、24天甚至24个月内发生真正的变化。
(全文完)
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
《“21天教你学会C++”》的相关评论
能写出这样的程序也不容易啊
@浮槎
呃,原文就是《十年自学编程》(Teach Yourself Programming in Ten Years)啊?
另外,Malcolm Gladwell 研究报告也提到,虽然贝多芬、海顿、莫扎特成名都很早,但他们从很小就开始学习音乐,投入的时间只多不少(所以我们看到计算投入时间是按小时而不是年计算,因为那样更准确),没有这些努力就没有后面的成就。
@那个昵称好像不太好听
没看懂想说什么
真是很形象生动!
这样的书目总会给急于求成的人很多希望,可是,急于求成是无法做好任何事情的。基础不搭好,最后会很痛苦。
为什么每个人都急不可耐?
好多次看见这个文章题目都没进来,因为我根本就不相信21天能学会门语言。
意外点链接进来,发现不同。所以还是换个题目好:《21学会C++???》
看到评论有反对声音。这也让我有点动摇,你说,我没事干我学一门烂语言,我图什么啊?
后来想想,无论是linus说了C++烂,还是C++的创造者说了,这都基于一个事实:他们也多少研究过C++。
我也没有期望能发明一个语言,一个系统,但是C++能让我有饭吃,让我以后生活有提高。既然如此,我不介意学C++,如果你们说C++不好,那我就再学一门语言,反正我现在也会接触好几门语言,关键是精通问题。
所以假如从实际角度看,或者学术,C++还是可以学的。
就像我们没有因为历史上哪个国家战败了,就不认可那个国家的历史的。
网上流传的 Teach Yourself Programming in Ten Years 中译本是我的作品,我不同意你在大部分照搬我的作品的同时对局部进行修改,尤其你还要改错掉。
我要求,你要么提供原本的译文并标明作者,你希望做出改动的地方可以用不致令人混淆作者的方式表明,比如用删除线或者不同的颜色等。
要么你自己重新译一份。
@浮槎 C++弥补高级语言的低效, 和C语言某些功能上的不足. C++是有它的生存空间的. 哥们你数数你常用的玩意, 有多少是用C++开发的, 有多少网站的后台是用C++开发的
nice
曾经就买过一本《21天精通C++》,然而十多年过去了,书早已不见尸骨,仍然不懂C++。。。
执子之手,与子偕老。谁有陪机器偕老的精神?哈哈 还有老婆和孩子啊~~
其实,编程语言和现实生活语言是一样的。多练多用就能学会,但是学会并不代表精通一样。就像我们的母语就算说了那么多年,但要真正写出有深意的文章的人却寥寥无几,只因为研究的深度不一样罢了。 编程语言也是。 楼主应该是看到现在中国快餐式的业界从而如此感叹。现实生活中,我们用母语能够交流信息也就可以了,而不是每个人都成为了文学家。 编程语言也是,并不是每个人都会成为大师,来改变我们的生活。不过有一点确实,中国目前的状态不是很好。这严重阻碍了中国的发展,中国科学技术的发展。希望能够更多的人去专研技术,而不是去揽一个有一个的项目,重复一遍又一边类似的代码,赚取更多的钱。
@浮槎
还是发现自己没有主见。细细读着文章,越往下读越觉着恐怖,想着自己这样的连菜鸟都算不上的要怎么学、学到啥时候啊!然后,看了您的评论,兀然觉着自己对牛人还是过度崇拜了···
谢谢作者,也O(∩_∩)O谢谢~您