学习C++方法 计算机.docx
《学习C++方法 计算机.docx》由会员分享,可在线阅读,更多相关《学习C++方法 计算机.docx(14页珍藏版)》请在第壹文秘上搜索。
1、刘未鹏前言我的blog以前很长一段时间关注的都是生中的技术&细节,乃至于读者和应者都寥寥。然而5月份的时候写的一篇“你应当如何学习生”,阅读量却达到了3万多,在blog上所有文章中却是最高的(且远远超过了第二位);评论数目也有一百多。为什么独独这篇能够激起这么多的回应,想必是国内的C+社群被C+压抑太久,或者,严格来说,是被C+的教育方式压抑太久。实际上,不管是在各大国内论坛上,还是在comp.lang.c+.moderated这样的国际C+论坛上,乃至于在douban上的小组内,有心者都会发现,对C+语言的细节的关注一直都没有停止过,同样,对C+语言的细节的抱怨也从来都没有停止过。一个例子就
2、是comp.lang.c+.moderated上的一个技术牛人JamesKanze说的,他说接触C+十年了,到现在还需要不时去翻C+标准。这就难怪EriCRaymond老大在TheArtofUnixProgramming)中说“C+是反紧凑”的了。C+中的细节太多,就算都看过了,也不可能都记住。更关键的是,就算都记住了,也不能让你成为一个真正的好程序员。绝大多数人都把细节太多(或者用贬义词来说就是“阴暗角落太多”)归结为C+的本质问题,认为一切邪恶由此而生。也正因此,大约9月份的时候,1.inUS在邮件列表上说“C+是一门有思想包袱的语言;仅仅是为了让程序员远离C+,我也要用C。这句短短的话在
3、国内引起了很大的反应,最初是刘江转T1.inus的话,然后云风和孟岩都发表了自己的看法;我也写了一篇“WhyC+”(后来发给Bjarne,Bjarne对这篇文章做了一个友情评注)。然而,这一通浑水搅过之后,我相信引起的变化未必很大。大多数原先的反对者能从中找出反对的理由,于是更加反对;大多数原先的赞同者也能从中找到赞同的理由,于是更加赞同;而剩下来的原先没有明确意见的,看双方各有各的道理,可能还是没有头绪。摆脱自我服务偏见一理性思考的前提决策与判断上提到过一个有趣的真实故事:1980年的某一天,美国空战司令部的计算机突然发出警报一一苏联的一枚核弹正在向美国本土飞来。司令部立即调兵遣将,迅速为一
4、场核战做好了准备,然而3分钟之后,工程人员发现是计算机的一个小零部件故障造成的。然而,这场虚惊之后,大众的反应才是真正有意思的:原先支持核武装的,认为现在感觉更加安全了(因为“事实证明这类的故障是完全可克服的”);而原先反对核武装的则认为更不专金了(因为“这类错误信号可能导致苏联过度反应,引发真正的核战”)。类似的情况也发生在三里岛核泄露事件之后,同样的,反对者认为(“这表明管理部门没有办法安全管理核能”),支持者认为(“这正表明这样的危险没有想像得那么严重,是可克服的”)。社会心理学把诸如此类的现象总结为“自我服务偏见”。不幸的是,“真理越辩越明”其实只适用于理性思考者。为什么啰嗦这么一大通
5、呢?就是因为,一直以来泛滥于程序员社群的“语言之争”,背后真正的原因其实并不在于语言实质上的优劣,而在于观察者的眼睛。在观察者的眼睛里面,语言并非一门工具,而是自己花了N多时间(其中尤数C+为最)来“修炼”的技能,对于这样的技能,被否定无疑等同于自己被否定。所以,从心理学上讲,语言并不是工具(尽管一直有这么一种呼吁),而是信仰。这样的信仰在越是花得时间久的语言上越是激烈。有趣的是,几乎所有的“热闹”的社群都有这样的现象,JavaPython.RUby莫不如是;因为就算语言本身不复杂,程序员仍然还是要投入大量的精力去学习各种各样的框架类库(想想画包的那些框架?)。因此这些语言社区的信仰未必不比C
6、+社群的强烈。然而,一旦弄清我们为什么会把语言当成信仰,就非常有助于摆脱在看待语言时的“自我服务偏见”,从客观的角度去看待问题。一一“当你看到的是支持某个意见的证据时,试着去想一想有哪些证据是不支持它的”。那么为什么要摆脱自我服务偏见?说小了,是为了成为一个更优秀的程序员(谁也不希望因为偏见而去使用一门低效的语言乃至不妥当的语言)。说大了是节省生命(因为偏见可能导致越陷越深,浪费时间)。所以,如果你能够理性的思考我们将要讨论的问题,避免自我服务偏见(就当你从来没有花时间在C+上一样)。那么我们便可以开始讨论真正的问题To前言2现在,几乎每个学习C+的都知道C+的核心问题是其复杂性;甚至本身不在
7、C+社群的,也知道这是事实。群众的眼睛是雪亮的,何况这还是个太显而易见的事实。但看了无数篇阐述C+复杂性的文章,和争论C+复杂性的吐沫星子(包括我前段时间写的两篇关于C+的总结)。我始终都有一个感觉一一没分析透,就跟盲人摸象一样。正如“WhyC+”的一位读者批评的,我在文章里面没有写明到底哪些是C+的“非本质复杂性”。当然,我自己凭感觉就能知道,而接触C+一段时间的人大致也能知道,但新手乃至非新手则对我所谓的“非本质复杂性”根本没有一个具体的认识,这就使得那篇“WhyC+”脱离了原本的意图面向所有C+使用者和学习者。同样的原因,在写了“你应当如何学习C+”一文之后,当孟岩先生邀请我给程序员写一
8、个系列的文章,介绍一下我在接触C+的过程中的态度和认识转变时,我虽然非常高兴的答应了,但直到现在3个月过去了还是颗粒无收。为什么?因为我觉得真正本质的问题没有被清晰的触摸到;所以直到现在我都没有动笔,免得废话说了一大堆,除了能被当成小说读读之外,对真正考虑是否要学习乃至使用C+的人未必有什么实际用处。然而,这么个念头一直都放在潜意识里面。前一阵子和Bjarne通信,谈到了关于C+复杂性的一些想法,在邮件里面总结了一下C+的复杂性来源,感觉思路清晰了许多。而这篇文章要达到的目的,正是传达对C+的复杂性的一个具体而明确的认识,有了这个认识作为支持,我们便可以推导出学习C+的最佳(实践者)的方法。为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习C+方法 计算机 学习 C+ 方法
