红联Linux门户
Linux帮助

linux下学习C/C++的一点感受

发布时间:2008-11-21 05:05:22来源:红联作者:apple753357
本人是物理PHD在读, 原先硕士阶段学习的是fortran,后来转到了C++,因为想为以后毕业进入industry所以认为C++比较适合,随后开始自学c++。开始的时候用的是lippman的c++ essential,在这本书里面主要介绍了c++的最主要概念, lippman的c++ primer虽然论述更加细致,但是只适合工具书来用, 初学者很容易迷失在细节里面, 所以essential最好, 介绍了最主要的一些概念, 至于细节完全可以在具体工作中学习。

刚开始的时候,是用C++写一些数值算法, 包括随机矩阵以及monte carlo算法的一些具体应用,就算法的实现来说C++和fortran的差别不大, 因为通常一个程序只是为了做一件事情, 所以那时候并没有体会到所谓的面向对象到底是什么意思, 反正把c++当fortran用就是了。

真正开始考虑所谓的面向对象的程序的时候, 是因为一年前在金融工程论坛和几个朋友讨论一些monte carlo算法的实现问题, 这时候恰好我系里的一个跟我关系很好的同学擅长写并行算法, 他突然提议说为什么不用MPI把monte carlo部分单独用并行算法实现, 然后写一个pricingengnie抽象类来向上提供接口呢?我们觉得很有道理, 于是开始构思这件事情, 但是后来细致的一分析, 这个问题不是这么简单的, 因为不同的instrument对算法的要求是不一样的, 包括参数, 变量, 对结果的处理。我们觉得完全没有头绪。于是我们开始寻找有没有类似的软件, 很幸运, 我们找到一4。 用了将近两个月间阅读源代码, 看高手是怎么样设计整个结构的。 这时候才发现 stl不是可有可无的, 它可以极大的简化代码。 boost也不是一种简单的补充, 至少它的any和smart_pointer对我们而言是必不可少的工具。这期间鉴于vim的默认配置效率低下, 我和我同学通过copy,paste, modify最终强化出一个在fluxbox下很棒的配置文件, 有效的支持了latex,c/c++的编辑。又鉴于维护自己维护文档的痛苦,学习了doxygen,一个自动的文档产生工具, 可以把你写的源代码自动转化为manual pdf文件。在阅读源代码和自己写一些东西的过程中, 慢慢学到了类,继承类,虚拟继承类,嵌套类,虚函数,纯虚函数。Vector, map, list, any, smart_pointer等一系列平时不太用的东西, 包括一些底层的东西, 像是local variable设置, linux里对线程的一些函数fork之类的, 以及平时不常用的c++/c中 error处理部分exception,assert等类文件。 同时对模式设计的名著gang of four的那本书中的observer模式特别深入的理解(因为任何数值算法模型,都适用这个模式)。与此同时, 我们还学习gsl(最强大的科学函数库)的使用, gnuplot(很棒的画图软件)的使用,gsl可以简化数值计算中的一些常用算法的实现, gnuplot可以做出非常美观的图来显示数据。

至此,学习C++和linux 3年之际,自己回头一看都下了一跳,原来自己学到了这么多东西。有几个体会特别深
1)c和c++本质上没有什么关系
2)学习东西兴趣是最好的老师
3)source code!!!source code!!!source code!!!阅读源代码永远是最好的学习方法之一。
4)当你坚持做一件事情的时候, 进步在不知不觉间

最后的建议
1)makefile 和doxygen对于编程为生的人不可不学,这会是你的维护工作变的简单
2)g++/gcc 编译要深入了解一点,
3)shell编程能学就学点,很有好处
4)尽量使用google,凡是自己解决不了的问题去看看别人是怎么解决的
5)学好英语, 不是为了别的, 只是为了你能明白人家在说什么, 你要说什么, linux的主流是用英文写的

[ 本帖最后由 apple753357 于 2008-11-21 05:13 编辑 ]
文章评论

共有 13 条评论

  1. makaay 于 2008-12-21 08:34:52发表:

    感谢楼主的建议

  2. tkfly0324 于 2008-12-19 12:01:07发表:

    谢谢

  3. loginadd 于 2008-12-17 09:15:21发表:

    慢慢学习中,阅读别人的学习过程也是自己积累的过程~(()):s

  4. h450182775 于 2008-11-23 17:15:27发表:

    英语是我的痛处
    ~~~~~~~~~~(5ty(

  5. apple753357 于 2008-11-22 21:14:52发表:

    引用:
    原帖由 linuxhong 于 2008-11-22 15:12 发表
    觉得你的经验还是不够!c/c++语言有很多的细节问题需要注意的,尤其是在做底层开打的时候。有思想是一个程序员最重要的财富,没有面向对象的思想等于你单纯的在写代码而不是和代码,程序交流。


    我的本职不是写程序,也从来没有想过做底层开发,我用的最多的是写算法,所以经验自然差一些。至于思想,嘿嘿!不好意思, 我没有什么程序思想, 物理思想倒是有一点, c++只是我实现物理思想的一个计算工具。

  6. warmb2009 于 2008-11-22 20:49:36发表:

    顶一个

  7. linuxhong 于 2008-11-22 15:12:12发表:

    觉得你的经验还是不够!c/c++语言有很多的细节问题需要注意的,尤其是在做底层开打的时候。有思想是一个程序员最重要的财富,没有面向对象的思想等于你单纯的在写代码而不是和代码,程序交流。

  8. merlyn 于 2008-11-22 13:54:04发表:

    我顶,我要坚持!!!

  9. tandongyuan 于 2008-11-22 13:25:32发表:

    恩,顶一个
    :0wmjh(1

  10. daiwei 于 2008-11-21 23:58:31发表:

    我希望我对自己要求还要严格一点,
    向lz学习!

  11. 乌鸦 于 2008-11-21 16:18:30发表:

    实践!实践!!没有实践,没有程序员!

  12. Sanptzx 于 2008-11-21 11:39:36发表:

    我顶```同上取经来的`

  13. Haocn 于 2008-11-21 07:59:24发表:

    取楼主的经