现在的位置: 首页 > 综合 > 正文

【没有骗你哦】21天精通C++

2018年02月19日 ⁄ 综合 ⁄ 共 3720字 ⁄ 字号 评论关闭

如何在21天内精通C++:

言:

我很少转载,不论是微博还是文章。因为一般被大众广泛转载的流行内容我认为没有转载的价值,而看到被转载的有价值的文章我就会立刻记下来,不会转载然后说mark一下,回来看。

至于说向大众传播有价值的东西,我认为,目前笔者的影响力非常小,并不会得到一呼百应的结果。再如何传播也跑不出那个圈子。

在这个博客中大家也可以看到我的文章,除了原创,就是翻译。


这个转载,是第一次。或许也是唯一一次。

以下是我决定转载此文的由来:

前几天听到班里同学在感慨,编程能力非常差,连学弟学妹都不如。

其实类似的感慨早就不绝于耳了,我一直希望可以帮到大家,哪怕是一点点。而这,也是我开设这个博客的目的。每天讲一点编程知识,一年下来,就有几百点,大学结束,就有近千点了,如果里面有一个点能让大家有所受益,那这每天的半小时也就不会感到浪费了。

恰巧,这几天看到了这篇文章,非常犀利的阐述了如何在21天内精通C++。

于是,我在这里将其转述给大家(根据大家情况,有添加批注大幅度删减)。


声明:本文转载自酷壳网的这篇文章:http://coolshell.cn/articles/2250.html 著作权及解释权归酷壳网所有。

另外,向大家隆重推荐此网站,如果你想做一个优秀的程序员的话,你应该看看这里。


另外,我考虑到大家时间有限,如果你不愿意读下去的话,也请扫一眼着色的文字以及结语,那些是本文的精华部分。(当然,我认为如果你来到了这里,为什么不读下去呢?有时候多花几分钟,能比别人节省几年的时间。)

用十年来学编程
Peter Norvig

为什么每个人都急不可耐?

走进任何一家书店,你会看见《7天Java无师自通》的旁边是一长排看不到尽头的类似书籍,它们要教会你Visual
Basic、Windows、Internet等等,而只需要几天甚至几小时。
结论是,要么是人们非常急于学会计算机,要么就是不知道为什么计算机惊人地简单,比任何东西都容易学会。没有一本书是要在几天里教会人们欣赏贝多芬或者量子物理学,甚至怎样给狗打扮。就像在一本书里说的那样:“坏的程序是很容易的,就算他们是笨蛋白痴都可以在21天内学会。” 

让我们来分析一下像《3天学会C++》这样的题目到底是什么意思:
  • 学会:在3天时间里,你不够时间写一些有意义的程序,并从它们的失败与成功中学习。你不够时间跟一些有经验的程序员一起工作,你不会知道在C++那样的环境中是什么滋味。简而言之,没有足够的时间让你学到很多东西。所以这些书谈论的只是表面上的精通,而非深入的理解。如著名诗人Pope所言,一知半解是危险的。

  • C++:在3天时间里你可以学会C++的语法(如果你已经会一门类似的语言),但你无法学到多少如何运用这些语法。简而言之,如果你是,比如说一个Basic程序员,你可以学会用C++语法写出Basic风格的程序,但你学不到C++真正的优点(和缺点)。那关键在哪里?ACM第一任主席Alan
    Perlis曾经说过:“如果一门语言不能影响你对编程的想法,那它就不值得去学”。另一种观点是,有时候你不得不学一点C++(更可能是javascript和Flash Flex之类)的皮毛,因为你需要接触现有的工具,用来完成特定的任务。但此时你不是在学习如何编程,你是在学习如何完成任务。

  • 3天:不幸的是,这是不够的,正如下一节所言。

十年学编程

一些研究者的研究表明,在许多领域,都需要大约10 年时间才能培养出专业技能,包括国际象棋、作曲、绘画、钢琴、游泳、网球,以及神经心理学和拓扑学的研究。似乎并不存在真正的捷径:即使是莫扎特,他4 岁就显露出音乐天才,在他写出世界级的音乐之前仍然用了超过13年时间。

所以,这也许需要10,000 小时,并不是十年,但10 年还是不够的:“任何领域的卓越成就都只能通过一生的努力来获得;稍低一点的代价也换不来。

下面是我在编程这个行当里获得成功的处方:

  • 对编程感兴趣,因为乐趣而去编程。确定始终都能保持足够的乐趣,以致你能够将10年时间投入其中(笔者注:我喜欢编程,这就是我能将它从高中时代开始持续五年并会一直进行下去的原因)。

  • 跟其他程序员交谈;阅读其他程序。这比任何书籍或训练课程都更重要。

  • 编程。最好的学习是从实践中学习。用更加技术性的语言来讲,“个体在特定领域最高水平的表现不是作为长期的经验的结果而自动获得的,但即使是非常富有经验的个体也可以通过刻意的努力而提高其表现水平”,而且“最有效的学习要求为特定个体制定适当难度的任务,有意义的反馈,以及重复及改正错误的机会。”

  • 如果你愿意,在大学里花上4年时间(或者再花几年读研究生)。这能让你获得一些工作的入门资格,还能让你对此领域有更深入的理解,但如果你不喜欢进学校,(作出一点牺牲)你在工作中也同样能获得类似的经验。在任何情况下,单从书本上学习都是不够的。“计算机科学的教育不会让任何人成为内行的程序员,正如研究画笔和颜料不会让任何人成为内行的画家”,
    Eric Raymond,《新黑客字典》的作者如是说。我曾经雇用过的最优秀的程序员之一仅有高中学历;但他创造出了许多伟大的软件(笔者注:其中之一是火狐浏览器)。

  • 跟别的程序员一起完成项目。在一些项目中成为最好的程序员;在其他一些项目中当最差的一个。当你是最好的程序员时,你要测试自己领导项目的能力,并通过你的洞见鼓舞其他人。当你是最差的时候,你学习高手们在做些什么,以及他们不喜欢做什么(因为他们让你帮他们做那些事)。
  • 接手别的程序员完成项目。用心理解别人编写的程序。看看在没有最初的程序员在场的时候理解和修改程序需要些什么。想一想怎样设计你的程序才能让别人接手维护你的程序时更容易一些。

  • 学会至少半打编程语言。包括一门支持类抽象的语言(如Java或C++),一门支持函数抽象的语言(如Lisp或ML),一门支持句法抽象的语言(如Lisp),一门支持说明性规约的语言(如Prolog或C++模版),一门支持协同程序的语言(如Icon或Scheme,笔者注:我更喜欢Lua),以及一门支持并行处理的语言(如Sisal)。

  • 记住在“计算机科学”这个词组里包含“计算机”这个词。了解你的计算机执行一条指令要多长时间,从内存中取一个word要多长时间(包括缓存命中和未命中的情况),从磁盘上读取连续的数据要多长时间,定位到磁盘上的新位置又要多长时间。(答案见底部)

结语:

我不知道,能有多少同学能够看到这里。笔者并非圣人,所能起到的作用,可能还不及老师对各位帮助的1/10000。我也知道,大家都希望大学生活丰富多彩。但是,丰富并不意味着无自身特点。每天都随波逐流,永远跟大众走在一起,开心的打打游戏,谈谈恋爱,刷刷人人,生活无比逍遥自在。可是,我不知道大家有没有想过别的事,例如说——自己的未来。
每个人都会感慨,中国的教育怎样怎样,这个专业或许并不是自己所擅长的方向之类云云。以至于自己只能望洋兴叹,感慨时运不济,生活在这样一个考试考试考试的国度。诚然,落后的教育制度只能让大部分学生除了"Xiao习"其他的什么都不会,残酷的社会只能泯灭大家昔日的梦想,一身投入到工资业绩主义中去。

那么,环境如此恶劣,而你又做了什么?
马化腾,出身深圳农村穷小子。
李彦宏,出身山西荒山野岭。
马云,非偶像派,纯实力派。
潘石屹,也是农村人。
看,社会不是不给大家机会。
莫说治国平天下等宏伟大事,很多人又都会说"我只是普通人"来以不变应万变。
但是,普通人,并不意味着一事无成。每个人,都要有生活的意义。
哪怕是奥运工地的一个搬砖工,他都可以自豪的说参与了建造世界级建筑。
哪怕是一个无甚战功的小兵,他都可以骄傲地说为了荣誉而战。
哪怕是被广大中国群众’'尊敬‘’的苍井空,她都可以说:我脱光衣服站在镜头前是为了生存,而你衣冠楚楚的站在镜头前是为了私欲和欺骗。
每个人,没有高低贵贱。出生与死亡的时候,谁都一样平等。
莫要自暴自弃,人生不是只有输赢。
不要消沉自溺,别忘了家中父母始终对你充满期待
你可能不是那个天塌下来需要将它撑起来的人,但是至少,你要保护得了那些对你重要的人还有——你自己。
真正能够评价你的人生的,不是社会,不是他人,而是你。
当你离世的时候,还在遗憾当初没有那样做,这样,自己就承认自己败了。
抱歉,各位,骗大家到这里来并没有什么传说中的C++秘籍,
没有什么绝世武功。
这里,
只有一个普通的作者,
跟一群普通的读者,
在讲一些普普通通的事情。
仰望星空,脚踏实地。
趁着年轻,做一些事情吧。
别让自己遗憾下去。
(P.S. 如果你现在很想做些什么,但不知从哪里开始,请看这里。)
2013.3.24 By 姚武洲


附,上述问题答案:

执行一条指令  1 纳秒 =1/1,000,000,000 秒

从L1缓存中获取数据0.5 纳秒

分支误预测5纳秒

从L2缓存中获取数据7 纳秒

互斥锁/解锁25 纳秒

从主内存中获取数据100 纳秒

使用1Gbps的网络发送2K字节20,000 纳秒

从内存中读取连续1M数据250,000 纳秒

定位到硬盘中的新位置8,000,000 纳秒

从硬盘中读取连续1M数据20,000,000 纳秒

从美国发送数据包到欧洲并返回150,000,000 纳秒 =150 毫秒

抱歉!评论已关闭.