业余时间里逐渐开始将学习重点移到c++领域,之前虽然读书时用MFC做过gis,工作中也用纯c++做过etl,但始终不属于产品级的正规军开发,还是属于游击性质的小打小闹,涉水不深。
重新拿起c++,基础知识一点点看起来这还不是什么大问题,毕竟毕业之前就读完了深入c++对象模型,effective系列,c++ language programming这些书。
工作了几年之后,回头来重新拾起c++,另有一番体会:
1.语言远远不是c++的全部
我们其实无需选择c++众多晦涩的语法和奇淫技巧,单以开发应用系统来说,在基础的语言层面看完类似c++ language programming或者prime c++已经足够,剩下的只需要了解如何选择和使用stl库和极少的boost库,经过这个阶段,基本上可以做些单机上的小程序了。
之后可以慢慢学习各种图形库,网络库,gui框架,这些是构建大型系统的重点,尤其是图形库可以多花些功夫,对于科学计算和企业应用,熟悉掌握一两个图形库做可视化可以将系统的可用性提高一大截。而网络库相对来说其实花样不多,现存的很多实现大都是ACE设计模式的变种或是跨语言版本,ACE的3本书,目前只能在淘宝上买到复印版了。
Gui库是比较难选择的部分,目前来看,花时间在QT上面学习是比较保险的,跨平台很诱人,不过因为还完全没接触过QT,所以还是倾向MFC,例子文档都很完备,以前也做过。MSDN上面的很多demo很容易拼出一个非常像样的client应用。wxWidget看过段时间,感觉和MFC很像,被MFC和QT夹在中间,目前来看还太不具备学习价值。另一个比较重要的原因是skia对VS支持很好,在window上用VS编译skia的库和demo非常容易,这样在window平台上,用户界面和图形化都能用VS很好的解决,再去追求gui跨平台意义也就不大了,除非想搞移动领域的东西。
2.c++异常要谨慎对待
它的使用比java异常更复杂,而其机制的实现,在不同OS和不同编译器上差异很大,也没有提供那么完善的trace机制,这是要自己花功夫解决的问题。
看过不少blog的观点是,尽量不要用c++的excpetion,我还要多实践来验证这些观点。
3.工具链的合理使用可能比语言使用更重要
工作几年,语言已经不会是门槛,但工具链的使用却会成为使用这门语言的门槛,尤其是c++。
在不同平台c++的工具链大相径庭,相比Java,学习c++的工具链的使用显然重要很多。Java通过IDE和开发插件,屏蔽了很多对工具链的使用,也惯坏了开发者。
刚进入c++领域的java开发者通常会很不适应,编译一个hello world都要花上半天找资料查命令。
而随着使用的工具和库逐渐增多,还会遇到很多编译、链接冲突问题。在解决这些问题的过程中,会逐渐需要去学习工具链的各种细微用法以及链接、编译和脚本知识。
这些部分都是学习c++必要的潜在成本,而且比较头疼的是,通常这些部分还没有系统性的教程,网上资料也都非常零碎,还有不少误导性。
根据我的经历,这些潜在的学习成本其实会高于学习c++本身所花费的时间,工具链的使用技能是需要时间来沉淀的能力。
windbg,gdb是必须掌握的两大工具,也是工具链中最需要花时间学习的部分,而学习它的使用又必须结合调试知识、计算机原理还有一些语言规范的理解,这是将应用、语言、抽象层次硬件这几类知识穿起来的综合环节。
4.要学会使用编辑器
不管是目前依赖VS还是Eclipse,都应该开始强迫自己学习vim或者emacs。
这不是信仰或者装的问题,当需要在不同语言脚本间、不同系统间切换,这些编辑器能大幅提高你的效率,减少你的不适应。并且这些编辑器的设计的确是以编辑为主要目的,花些时间学会配置和习惯他们是项高收益的长远投资。
更重要的是,这些工具的使用需要你频繁和那些工具链直接打交道,而不像在VS或者eclipse上,IDE已经跟你打点了一切。
不要轻视这点,认为是这是自找麻烦。工具链的灵活使用我认为是c++开发里面最重要的内容之一,并且如果你不能很好的脱离IDE来运用那些工具链,那么也会很难构建、定制很多重要的库,因为往往这些库都只提供那些支持工具链的编译脚本,而不会提供支持某个IDE的project文件。
5.抓住算法、信息论和数学作为核心
现在使用c++的目的当然不是为了单纯的crud式的单纯企业应用,它的优势在于使用形形色色的图形库以及那些阳春白雪的学术性质很强的工程库以及和Matlab结合的天然优势。
算法、信息论和数学的理解才是一个计算机从业者的核心竞争力,任何高端的工程问题最终都会在这些领域交汇。
尽量尝试用数学的方式来思考现实世界的问题会是一个好习惯,我们可能会在将来极大的受益于此。
分享到:
相关推荐
C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++
这是本人在网上看到的 觉得很有用 拿来 与大家一起分享
本书作者根据自己学习C++的亲身体会及多年教学经验,用简单的例子和简练的叙述讲解C++编程,别具特色。 全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流...
c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏...
c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器
CT 医学图像重建 算法 c++实现。CT 医学图像重建 算法 c++实现
主要讲述了C++中的一些关键点的重点,以及别人使用C++以来的一些心得体会,对于抓住C++中的重点是一个比较好的文档
C++对图像进行2×2双线性内插重采样,构造影像金字塔 仅支持8位和24位Windows位图
我不怕触犯众怒地说句大话:“C++没有高手,C 语言才有高手。”在用C 和C++编程8年之后,我深深地遗憾自己不是C 语言的高手,更遗憾没有人点拨我如何进行面向对象程序设计。我和很多C++程序员一样,在享用到C++语法...
《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和...
一些很有意思的c++程序源代码,供初学者使用。可为学习增添很多乐趣。
IKM 的c++考试 有一些英文例题 考前必看啊~
c++课程实习心得体会.doc
c++个人实习心得体会
c++ 实验报告参考 代码问题 关于c++中虚函数,数组,指针问题
C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏
Nurbs 曲线 C++Nurbs 曲线 C++
C++实现快速查找文件 C++实现快速查找文件C++实现快速查找文件 C++实现快速查找文件C++实现快速查找文件 C++实现快速查找文件
C++计算器 C++超强计算器 C++多功能计算器 C++超强计算器 C++多功能计算器