}
编辑本段c++的开发方式
在unix世界有大量的程序员是传统的非IDE的方式进行软件开发。
一般是如下组合:
1.编译器:
gcc,clang等
2.编辑器:
一般是vim/emacs
3.make:
gnumake或者bsd的pmake等,功能与用法基本一样
4.版本管理:
cvs,svn,git等
5.代码阅读:
cscope,ctags,lxr等
编辑本段C++的集成开发环境
1.VisualStudio(VisualC++)
2.BorlandC++Builder
3.Eclipse(Myln+CDT+Mingw32+GCC)
4.Dev-C++(Mingw32+GCC)
5.Code:
:
Blocks(可配合多款编译核心使用)
6.Codelite
7.C-Free
如上所示,目前流行的GNUGCC和微软的VisualStudio系列各执一套基本的编译链,其他的IDE都是衍生产品
GNUGCC
[1]
C++Builder6.0
编辑本段C++著作
《TheC++StandardLibrary:
ATutorialandReference》原文版
中文版:
《C++标准程序库:
自修教程与参考手册》
这是一本百科全书式的C++标准库著作,是一本需要一再查阅的参考大全。
它在完备性、细致性以及精确性方面都是无与伦比的。
本书详细介绍了每一标准库组件的规格和用法,内容涵盖包括流和本地化在内的整个标准库而不仅仅是STL。
正如本书副标题所示,它首先适合作为教程阅读,尔后又可用作参考手册。
浅显易懂的写作风格使得这本书非常易读。
如果你希望学习标准库的用法并尽可能地发挥其潜能,那你必须拥有这本书。
正如网络上所言,这本书不仅仅应该摆在你的书橱中,更应该放到你的电脑桌上。
我向每一位职业C++程序员强烈推荐。
《StandardC++IOStreamsandLocales:
AdvancedProgrammer'sGuideandReference》原文版
中文版《标准C++输入输出流与本地化》
C++标准库由STL、流和本地化三部分构成。
关于STL的书市面上已经有不少,但罕见流和本地化方面的专着。
本书是这两个领域中最优秀的一本,迄今为止没有任何一本书比这一本更全面详尽地讨论了流和本地化。
如果你不满足于停留在“会用”流库的层面,千万不要错过它。
2001年夏天,我草草翻阅过这本书的中文版,从内容到包装都给我留下了比较深刻的印象--不过负面的居多一些。
2003年秋天,无意中得知某网络书店正以超低价格甩卖这本书的中译本,情不自禁,一阵唏嘘。
《EffectiveSTL》影印版、中文版
读完Scott的《EffectiveC++》和《MoreEffectiveC++》的中译本之后,我一直期待这本书的中文版。
我从潘爱民先生的个人主页上了解到,他和他的合作伙伴似乎早已完成了这本书的翻译工作,可惜至今市面上仍不得见。
幸运的是,我们可以看到它的原版。
本书是使用STL的程序员必读之作。
在这本书中,Scott向我们讲述STL容器和算法的工作机制以及如何以最佳方式使用它们。
和Scott的其他作品一样,这本书的写作风格清晰、精确,具有极佳的可读性。
看过这本书以后,我想你也许会和我以及其他C++程序员一样产生这样的想法:
Scott什么时候会写出一本“More
EffectiveSTL”?
《GenericProgrammingandtheSTL:
UsingandExtendingtheC++StandardTemplateLibrary》影印版、中文版《泛型编程与STL》
关于STL,我还提醒你留心MatthewH.Austern的《GenericProgrammingandtheSTL:
UsingandExtendingtheC++StandardTemplateLibrary》(《泛型编程与STL》,中国电力出版社)。
这本书散发着浓厚的学院气息。
AndrewKoenig和BarbaraMoo在《AcceleratedC++:
PracticalProgrammingbyExample》一书末尾郑重推荐另外两本进阶好书(除了他们自己的《RuminationsonC++》外),其中一本是TCPL,另外一本就是本书!
编辑本段网络编程
在网络编程时代,C++应该扮演着怎样的角色,让ACE(AdaptiveCommunicationsEnvironment)来告诉你。
DouglasC.Schmidt,StephenD.Huston,《C++NetworkProgramming》Volume1:
MasteringComplexitywithACEandPatterns、Volume2:
SystematicReusewithACEandFrameworks
中文版:
《C++网络编程》卷1:
运用ACE和模式消除复杂性、卷2:
基于ACE和框架的系统化复用
采用C++进行企业级网络编程,目前ACE(以及这两本书)是一个值得考虑的选择。
ACE是一个面向对象、跨平台、开放源码的网络编程框架,目标在于构建高性能网络应用和中间件。
Douglas是ACE的创始人,Stephen则已为ACE提供了数年的技术支持和顾问服务,两位都是ACE社群(是的,ACE的影响和实际应用的程度已经形成了一个社群)的专家。
ACE并不单单被大学和研究所追捧,它已经被成功地应用于世界上成千上万个商业应用中。
在电信、宇航、医药和财经领域的网络系统中,ACE已经并继续发挥着重要的作用。
如果你准备开发高性能通讯系统,你应该考虑考虑这一汇集世界顶尖专家智慧的成果。
除了使用C++面向对象设计技术和模板等高级语言特性外,ACE还运用了大量的模式。
《C++网络编程》卷1和卷2并不仅仅教你关于ACE的方方面面,它还会教给你模式和通用框架设计等高级技术等。
所以,作为一名中、高级C++程序员,即使你很少进行正儿八经的C++网络程序设计,阅读这两本书同样可以从中受益。
是的,并非所有网络应用都要使用Web服务器(以及其他应用服务器)和重量级组件模型,换个思路,它们或许也可以从轻量级的ACE组件中获益。
杂项
以下几本书所以被列入“杂项”单元,是因为我没有考虑到合适的归类方法,它们和上面的书籍一样,值得一读。
BruceEckel,《ThinkinginC++》影印版二版、三版(又名卷二)
中文《C++编程思想》二版、卷一:
标准C++导引卷二:
实用编程技术
《ThinkinginC++》的第1版于1996年荣获“软件研发”杂志评选的图书震撼大奖。
最新推出的第2版对内容进行了大幅改写和调整,以反映C++标准化带来的影响以及近几年面向对象领域最新研究和实践成果。
“输入输入流”、“多重继承”、“异常处理”和“运行时类型识别”等高级主题连同C++标准化以后增加的一些内容则被放入第二卷中。
Bruce是一名经验丰富的C++讲师和顾问,其培训和写作经验都是世界一流水准,他的作品比那些“玩票”的技术人员写的东西更能吸引读者。
事实上,在同类图书中,对于大多数读者而言,这本书的可读性要超过TCPL和《C++Primer》。
顺带一提,访问作者的站点,你可以先睹第二卷的风采。
AndrewKoenig,BarbaraE.Moo,,《RuminationsonC++:
ADecadeofProgrammingInsightandExperience》原版、中文版《C++沉思录》
Andrew是世界上屈指可数的C++专家。
这是一本关于C++编程思想和程序设计技术而非语言细节的著作。
如果你已经具有一定的基础,这本书将教你在进行C++编程时应该怎样思考,应该如何表达解决方案。
整本书技术表达透彻,文字通俗易懂。
Bjarne这样评价这本书:
本书遍布“C++是什么?
C++能够做什么?
”的真知灼见。
StanleyB.Lippman,《InsideTheC++ObjectModel》影印版、中文版《深度探索C++对象模型》
从编译器的角度观察C++可以使你知其然并知其所以然。
本书探讨了大量的C++面向对象程序设计的底层运作机制,包括构造函数、函数、临时对象、继承、虚拟、模板的实例化、异常处理、运行期类型识别等,另外还介绍了一些在实现C++对象模型过程中做出的权衡折衷。
喜欢刨根问底的C++程序员不要错过这本书。
ErichGamma,RichardHelm,RalphJohnson,JohnVlissides,DesignPatterns:
ElementsofReusableObject-Orientedsoftware
ErichGamma,RichardHelm,RalphJohnson,JohnVlissides,《DesignPatterns:
ElementsofReusableObject-Orientedsoftware》影印版、中文版《设计模式:
可复用面向对象软件的基础》
设计可复用的面向对象的软件,你需要掌握设计模式。
本书并非专为C++程序员而写,但它采用了C++(以及Smalltalk)作为主要示例语言,C++程序员尤其易于从中受益。
四位作者都是国际公认的面向对象软件领域专家,他们将面向对象软件的设计经验作为设计模式详细记录下来。
这本书影响是如此深远,以至于四位作者以及本书都被昵称为GoF(GangofFour)。
本书学院气息浓厚,行文风格严谨简洁,虽然它不如某些讲解模式的书籍易读,但真正要精准地理解设计模式,本书是终极权威。
学习设计模式,这本书需要一而再、再而三的咀嚼。
顺带一句:
请将设计模式化作开拓思维的钥匙,切莫成为封闭思维的枷锁。
JohnLakos,《Large-ScaleC++SoftwareDesign》中文版《大规模C++程序设计》、候捷:
《STL源码剖析》
还有一些C++好书值得一读,恕此处无法一一列出。
例如JohnLakos的著作《Large-ScaleC++SoftwareDesign》(《大规模C++程序设计》,中国电力出版社)和侯捷先生的《STL源码剖析》(华中科技大学出版社)等。
《STL源码剖析》是一本很有特色的书,但我认为它还可以更好。
我个人期待侯捷先生自第一版发行以来经过对模板技术的沉淀和再思考之后,再写一本剖析得更深入、更透彻并且更全面的“第二版”。
遗憾的是,侯捷先生在完成《C++Templates:
TheCompleteGuide》一书的翻译后似乎决定暂时告别模板、泛型编程和STL领域。
使用C++成功开发大规模软件系统,不仅需要很好地理解大多数C++书籍中讲述的逻辑设计问题,更需要掌握《大规模C++程序设计》中讲述的物理设计技术。
当然,这本书的确有点过时了,不过,如果你的精力和金钱都比较宽绰,买一本看看并无坏处。
至此,我想有必要声明一下,有一些(好)书没有得到推荐,主要原因如下:
以上这些书已经足够多、足够好了。
我不会推荐通过正常渠道很难购买到的书籍--不管是中文版还是英文版。
作(译)者名气大小不影响我的推荐。
我们是在看书,不是看人。
我不会推荐我从来没有看过的书。
我至少要看过其中的某个版本(包括电子档)。
这个“看”,一般指“认真阅读”,不过有一些也只能算是“浏览”。
结语
作为一名普通技术写译者,我深知技术创作和翻译的艰辛(和快乐),并多多少少了解一些有关技术书籍创作、翻译、制作、出版以及市场推介背后的细节。
今天,我不会再对一本看上去差强人意的图书信口开河。
罗列同一本书的各种版本的用意只在于为你多提供一些信息,让你多一种选择。
在本文成文的后期,我给Bjarne写了一封信,请教如果他来写这篇文章会怎么写。
他给了我简明扼要的建议。
在肯定以上列出的绝大部分图书都是世界顶尖水平的C++著作的同时,Bjarne提醒我别忘了向专家级程序员推荐《TheC++Standard:
IncorporatingTechnicalCorrigendumNo.1》
《TheC++Standard:
IncorporatingTechnicalCorrigendumNo.1》
Bjarne还友好地提醒我,在我的推荐列表中没有哪一本有助于C++程序员进行Windows编程--这正是我的本意。
在这篇文章中,我只推荐、点评平台中立的C++著作(网络编程除外)--和操作系统无关,和集成开发环境无关,我甚至幻想它们和编译器也无关。
你可以根据业务开发需要,选读自己喜爱的领域相关的C++书籍。
说到“系统无关、平台中立”,我不由得想起了“抽象层”的概念。
开发实际应用的C++程序员通常工作于特定操作系统、特定开发环境和特定业务领域之中,而对标准C++和C++标准库扎实而深刻的把握,无疑是你得以在不同的操作系统、不同的开发环境以及不同的业务领域之间纵横驰骋的“抽象”本钱。
C++面向对象程序设计(作者:
WalterSavitch)这本书是老外出的书,从基础到深入,很容从C过渡到C++
C++Primer中文版(第4版)(一本久负盛名的C++经典教程)
作 者:
(美)StanleyB.LippmanBarbaraE.MooJoseeLaJoie着,李师贤等译
出版社:
人民邮电出版社
出版时间:
2006-3-1字 数:
1149000版 次:
1页 数:
745印刷时间:
2006/03/01开 本:
印 次:
纸 张:
胶版纸ISBN:
9787115145543包 装:
平装
编辑本段C++名人坊
有两位GoogleMapsAPI的初学者向我请教他们按照最简单例子写的程序为什么不能正常的运行。
其中一位用GTalk跟我交流,我仔细了看了他的代码,没看出问题,把代码保存在本地,打开Firefox的错误控制台,用Firefox打开他的页面。
出错的那一行被清晰的显示出来,我再仔细端详那句话,原来有两个应该是英文逗号的地方,写上了中文逗号。
另一位,在我的论坛跟我交流他的GoogleMapsAPI中遇到的问题,我看他代码的时候也没有马上发现问题。
然而,同样在用Firefox打开后,问题很明显的找到了,原来是一个方法openInfoWindow被他写成OpenInfoWindow了。
在我帮助别人解决的程序调试问题中,这是非常常见的。
人人都可能打出中文逗号,人人都可能把大小写写错。
但是在我帮助他们解决问题以后,他们总是感慨的说,谢谢我解决了这个问题,这个问题困扰了他们几个小时,甚至是几天。
这其实并不是只有初学者才会遇到的问题,我还帮助过些有非常丰富经验的工程师解决问题,有时候问题仅仅出自某个参数没有传递进来,或者是拼接字符串的时候少些了一个冒号,或者是拼接地址的时候漏掉了http:
。
我甚至帮助一些人调试一些我根本不懂的语言的程序,因为多半出现的问题,都和语言特性无关,不是程序员写错了字符,就是写错了逻辑,或者是错误理解了一个函数。
出问题是正常的,写程序是一个复杂的边思考边打字的过程,笔误和一时糊涂都是难以避免的。
程序员一般把这种问题叫做低级问题,因为这类问题跟你的智商完全无关,任何人都可能犯。
但是,问题在于,有时候即使是很优秀的程序员,也会被一个低级错误困扰,可能会几天都解决不了。
所以,关键在于,如何找到问题。
编辑本段遇到问题的时候:
1,不要怨天怨地。
出了问题,当然有可能是系统的bug,API的问题,但是那些几率往往比你犯低级错误的几率要低多了,先从自己身上找原因,是不是自己写错了。
2,要掌握工具。
最低限度你要会写Log,最好是Log和调试器结合。
好的工具可以大大的提高效率。
以前有人跟我说,Dll不能调试,我发现可以;有人说多线程不能调试,我发现可以;有人说COM不能调试,我发现可以;有人说IE插件不能调试,我发现可以;有人说OE插件不能调试,我发现也可以。
当然,你确实会遇到不能调试的时候,当年我们做东芝芯片的嵌入程序,一个组都没有一个仿真器和调试器,但是至少可以用Log嘛,无非是麻烦点。
3,分析问题要有逻辑。
遇到问题可以先把所有的可能性都列出来,然后一个一个分析,肯定能找到原因的。
4,要学会隔离问题。
问题涉及到的代码越多,越难以理解,问题越难以解决。
遇到这样的情况,可以利用Log或者调试器,一行代码一行代码的给它们洗清嫌疑,这样很快你就可以找到出问题的地方。
如果代码特别长,程序特别复杂,可以用二分法来做,效率很高。
5,千万不要懒惰,不要事事求别人。
一次复杂的调试过程就像一部侦探剧,如果你有非常好的逻辑性,那这部剧的主角就是福尔摩斯,剧情一定非常精彩。
我说这个是有巨大风