第二本
《C++ CodingStandard》。无需多作介绍,这是一本浓缩了C++社群多年来宝贵的经验结晶的书,贴近实践,处处以80%场景为主导,不钻语言旮旯,用本为主…总之,非常值得放在手边时时参阅。因为书很薄,所以也不妨先往脑袋里面装一遍。书中的101条建议的介绍都很简略,并且指出了详细介绍的延伸阅读,在延伸阅读的时候还是要注意不要陷入无关的细节和不必要的技巧中,时时抬头看一看你需要解决的问题。在C++编码标准方面,Bjarne也有一些建议。
第一本
《The PragmaticProgrammer》,用本程序员的杰作;虽然不是一本C++的书,但其介绍的实践理念却是所有程序员都需要的。
第三本
《Code Complete, 2ndEdition》,这是一本非常卓越的参考资料,涉及开发过程的全景,有大量宝贵的经验。你未必要一口气读完,但你至少应该知道它里面都写了哪些内容,以便可以回头参阅。
其它
所有优秀的技术书籍都是资料来源。一旦养成了查文档的习惯,所有的电子书、纸书、网络上的资源实际上都是你的财富。不过,查文档的前提是你要从手边的问题分析出应该到什么地方去查资料,这里,分析问题的能力很重要,因此:
建议5:思考。
这个建议就把我们带到了第四本书:
第四本:
《你的灯亮着吗?》。不作介绍,自己阅读,这本书只有一百多页,但精彩非常,妙趣横生。
最后,要想理性地运用一门语言,不仅需要看到这门语言的特点,还要能够从另一个角度去看这门语言——即看到它的缺点,因为从心理上——
事实10:一旦我们熟悉了一门语言之后,就容易不知不觉地在其框架下思考,受到语言特性的细节的影响,作出second-class的设计。
对于像C++这样的在抽象机制上作了折衷的语言,尤其如此,思考容易受到语言机制本身细节的影响,往往在心里头还没想好怎么抽象,就已经确定了使用什么语言机制乃至技巧;更有甚者是为了使用某个特性而去使用某个特性。然而,实际上,我们应该——
建议6:脱离语言思考,使用语言实现。
关于设计的一般理念,EricRaymond在《The Art of Unix Programming》的第二部分有非常精彩的阐述。
此外,除了脱离语言的具体抽象机制来思考设计之外,学习其它语言对同类抽象机制的支持也是非常有益的,正如老话所说,“兼听则明”。前一阵子reddit上也常出现“HowLearning XXX help me become a Better YYYprogrammer”(其中XXX和YYY指代编程语言)的帖子,正是这个道理,这就把我们带到了最后一个建议:学习其它语言。
建议7:学习其它语言。
如果你是一个系统程序员,你可能会觉得没有必要学习其它语言,然而未必如此,你未必需要精通其它语言,而是可以去试着了解其它语言的设计理念,是如何支持日常编程中的设计的。这一招非常有利于在使用你自己的语言编程时心理上脱离语言机制细节的影响,作出更好的抽象设计。
尾声
建议8(可选):重读本文。
注:这篇文章的目的是给国内的C++学习者(尤其是初学者)一个可操作的建议。我打算不断修订并完善它;因为这是根据我个人的经验来写的,而基于我对C++的熟悉程度,可能会有地方并不能完完全全站到初学者的视角来看问题。
相关链接:
学习C++:实践者的方法(上)