`
ppgunjack
  • 浏览: 80297 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

重拾c++的一些体会

 
阅读更多

业余时间里逐渐开始将学习重点移到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结合的天然优势。

 

算法、信息论和数学的理解才是一个计算机从业者的核心竞争力,任何高端的工程问题最终都会在这些领域交汇。

尽量尝试用数学的方式来思考现实世界的问题会是一个好习惯,我们可能会在将来极大的受益于此。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics