探索C++语言中的秘密
许多编程人员学习C++总结经验为,有的觉得C++语言是一门独立的语言,并不是在C语言的基础上,可以直接学习C++不必先从C下手,希望大家切磋。。
评论数目也有一百多。为什么独独这篇能够激起这么多的回应,想必是国内的C++社群被C++压抑太久,或者,严格来说,是被C++的教育方式压抑太久。实际上,不管是在各大国内论坛上。
还是在comp.lang.c++.moderated这样的国际C++论坛上,乃至于在douban上的小组内,有心者都会发现,对C++语言的细节的关注一直都没有停止过,同样,对C++语言的细节的抱怨也从来都没有停止过。
一个例子就是comp.lang.c++.moderated上的一个技术牛人James Kanze说的,他说接触C++十年了,到现在还需要不时去翻C++标准。这就难怪Eric Raymond老大在《The Art of Unix Programming》中说“C++是反紧凑”的了。C++中的细节太多,就算都看过了,也不可能都记住。更关键的是,就算都记住了,也不能让你成为一个真正的好程序员。
绝大多数人都把细节太多(或者用贬义词来说就是“阴暗角落太多”)归结为C++的本质问题,认为一切邪恶由此而生。也正因此,大约9月份的时候,Linus在邮件列表上说“C++是一门有思想包袱的语言;仅仅是为了让程序员远离C++,我也要用C”。这句短短的话在国内引起了很大的反应,最初是刘江转了Linus的话,然后云风和孟岩都发表了自己的看法;我也写了一篇“Why C++”(后来发给Bjarne,Bjarne对这篇文章做了一个友情评注)。
然而,这一通浑水搅过之后,我相信引起的变化未必很大。大多数原先的反对者能从中找出反对的理由,于是更加反对;大多数原先的赞同者也能从中找到赞同的理由,于是更加赞同;而剩下来的原先没有明确意见的,看双方各有各的道理,可能还是没有头绪。
摆脱自我服务偏见――理性思考的前提 《决策与判断》上提到过一个有趣的真实故事:1980年的某一天,美国空战司令部的计算机突然发出警报――苏联的一枚核弹正在向美国本土飞来。司令部立即调兵遣将,迅速为一场核战做好了准备,然而3分钟之后,工程人员发现是计算机的一个小零部件故障造成的。
然而,这场虚惊之后,大众的反应才是真正有意思的:原先支持核武装的,认为现在感觉更加安全了(因为“事实证明这类的故障是完全可克服的”);而原先反对核武装的则认为更不安全了(因为“这类错误信号可能导致苏联过度反应,引发真正的核战”)。
类似的情况也发生在三里岛核泄露事件之后,同样的,反对者认为(“这表明管理部门没有办法安全管理核能”),支持者认为(“这正表明这样的危险没有想像得那么严重,是可克服的”)。社会心理学把诸如此类的现象总结为“自我服务偏见”。不幸的是,“真理越辩越明”其实只适用于理性思考者。
为什么抡饷匆淮笸兀烤褪且蛭恢币岳捶豪挠诔绦蛟鄙缛旱摹坝镅灾保澈笳嬲脑蚱涫挡⒉辉谟谟镅允抵噬系挠帕樱谟诠鄄煺叩难劬ΑT诠鄄煺叩难劬锩妫镅圆⒎且幻殴ぞ撸亲约夯N多时间(其中尤数C++为最)来“修炼”的技能,对于这样的技能,被否定无疑等同于自己被否定。所以,从心理学上讲,语言并不是工具(尽管一直有这么一种呼吁),而是信仰。
这样的信仰在越是花得时间久的语言上越是激烈。有趣的是,几乎所有的“热闹”的社群都有这样的现象,Java、Python、Ruby…莫不如是;因为就算语言本身不复杂,程序员仍然还是要投入大量的精力去学习各种各样的框架类库(想想Java的那些框架?)。因此这些语言社区的信仰未必不比C++社群的强烈。