• 简述C及 C++ 程序员学习历程

    觉得这篇文章说的很不错 给大家分享下。

    1、可以考虑先学习C.

      大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而是希望成为一个解决问题的专家。做一个有用的程序员,做一个赚钱的程序员。我们的价值,将体现在客户价值上,而不是语言写得好不好看。

      C++是C的一个面向对象的解释,C++为C扩充了大规模工程应用,复杂的系统结构的组织和掌控方法,但是,我认为,C++骨子里还是C的。

      毕竟,解决具体问题,每个函数内部,都是用C的方式写程序,还是面向过程的。

      因此,想要学习好C++,我的建议,先学习C,先学解决问题的能力,再讨论解决大问题的能力。就是先学习怎么走路,再学习怎么跑步。

      2、学习C的过程中,一定要理解结构化编程思维。

      为什么呢,我前面有文章说过,软件语言的发展过程,就是一个数据私有化的过程,大型工程应用,强调高内聚,低耦合,模块化设计,保持代码最大的灵活性和安全性。
    这是现代工程化开发的核心和灵魂。

      因此,利用C这门语言入门,借此理解结构化开发思维,可以说是个很方便的路子。因为C的函数,本来就是为重用做准备的。同时,全局变量和cpp内部私有变量的差别,其使用原则,这些都能学到很多结构化开发思维。

      3、开始学习C++

      C++不难学的,很多人觉得C++难学,其实是因为它在C之外,又提供了很多的概念,尤其是对象,很难以理解。

      不过我经过这么多年,把这个问题反而看淡了,我认为面向对象相对面向过程,仅仅是结构化程序设计的一个具体体现,是编译器提供手段,强迫程序员必须遵循数据私有化的一个实例,C++和C的关系,最核心的莫过于此。

      现在我们回到C再看看,如果我们把一个全局变量,写到一个cpp里面,并且在对应的h文件中不声明,它是不是就只有这个模块可以使用?它是不是就是私有变量,以这个理解,类能明白了吗?

      4、学习C++的深入技巧

      C++在类的基础上,经过这么多年的发展,其实提供了很多深入的概念,看起来很复杂,其实我看也很简单。比如模板,我的理解就是“类的类”,大家说是不是?

      既然模板理解了,STL,ATL这些,静态模板库,动态模板库,还难理解吗?就是一大堆类的类,可以借此实现很多应用中需要的类,不需要程序员再自己写而已。

      ok,STL都理解了,泛型开发还难吗?所谓泛型开发,其实就是我做一个模板,来定义一套算法规则,但是呢,我希望这个算法规则,能进一步抽象,对核心数据类型不要限死,我把各种数据套进去,都可以用,这样,仅算法这部分,我不需要重写了。你想想是不是这个道理?

      学到这里,C++和C,其实已经差不多了。再学语言,就是求全责备,过于钻牛角尖了。

      5、学习应用开发

      前面说了,学习语言,目的不是让别人认为自己是专家,是为了写程序赚钱。因此,语言学完,要学习应用开发。

      什么叫应用开发呢,我会一门语言,但是,客户不懂,客户说的很直接,在Windows下给我写个程序,我要什么什么功能。为啥Windows呢?因为我习惯。

      OK,很多时候,应用开发要尊重客户习惯,一般说来,语言这个东东,还是要结合具体平台的开发,才能开发出有意义的应用程序卖钱。那么,一般说来,客户端是Windows系统,服务器是Linux,这些都是行业习惯,嵌入式不好说,各种平台都有,Palm,S60,Linux,WinCE,等等。要根据自己的目标客户来定。

      当我们选定目标平台后,有一个问题,选什么语言,很多时候,学生和商用程序员差别就在这里,学生一般没得选,自己会啥就用啥呗,企业里的程序员不会,要先评估需求,看哪个语言更合适,不会的语言,要去学。

      ok,假定我们选了C和C++,那么,我们需要选择开发平台,Windows下不用说了,VC,这是最好用的,Linux下呢,gcc,其他的也差不多。

      假如我们开发VC,并且使用C++,这个时候,才需要考虑学习MFC了,因为这是微软的标准类库,至少Windows平台下,它最权威,你看见没有,我们从学习开始,走了多少步,才走到MFC?是不是MFC不是学习C++上来就必须学的?

      6、学习MFC

      学习MFC,很多人一上来就开始看其体系架构,看得一头雾水,那个模块关系依赖图,我到现在都看不懂。

      呵呵,其实不是啦,和学语言一样,我们学MFC的目的,也不是希望成为MFC的专家,而是要利用MFC开发Windows应用程序,为我们赚钱。看见没?MFC是手段,不是目的,目的是开发Windows程序。

      其实Windows下,有一套很标准的C接口,叫Win32API,这个才是Windows的标准编程核心,因此,学习MFC,真实的目的是理解Windows程序开发,建议可以先学习Win32API,看来我们又回到C了哈,呵呵。刚开始学C有用吧?

      7、Win32API

      其实Win32APi不难学的,因为虽然它很大,有很多接口,但不是必须的,我们真正做个简单的Windows应用,其实用不到这么多的。做个简单的Dialog,然后实现个功能,你遇到的接口函数,其实绝大多数,就是以后常用的了。把常用的记熟练,就ok了。

      关键是,这个时候要通过WinMain方式,去理解Windows的事件机制,这是核心,其实说起来简单得要死。就是以前你的程序,由于没有系统支撑,很多事必须自己做,比如检查鼠标和键盘输入,你需要写个死循环,自己不断去看,而Windows说,这些事你不要做了,我来做比你好。你没事就玩去吧,我把和你相关的消息放到一个队列里,就是你的事件队列,你自己没事去找找看,有没有新消息来,有就做事,没事就玩好了。很简单是不?

      当然,Windows是多任务操作系统,有时候,我们的逻辑需要并发一些功能,比如说,我在等鼠标键盘消息的时候,需要再看看打印机准备好了没有,这里就需要理解并行计算了,这和语言无关,和操作系统无关,这是另外一个话题,这里不多说了,你可以自己找找线程开发的相关资料看。

      看见没,为了学习好Windows编程,其实我们不仅仅需要学习语言,还要学习操作系统,并行计算原理,内存原理,可能有时候还需要学习网络通信,等很多知识,所以说,单凭学习语言,是成不了商用程序员的,一个合格的程序员,需要理解的东西,太多了,要广为学习。

      当我们把Win32API,以及基本的窗口化程序设计理解了,就可以回到MFC继续学习了。是不是有点递归返回的意思?呵呵。

      8、回到MFC

      原来学MFC很难的,因为其封装了太多细节,很难理解透彻。不过还好,我们有侯老师的深入浅出MFC,去找本来看看,如何从Win32API的纯C编程,改变为MFC的C++方式,看这个最快,基本上前6章看完,已经会了,这里我就不多说了。

      9、COM

      COM、COM、COM,我最头疼的COM,呵呵。

      COM就是一种远程过程调用,即你请求的代码是在另外一个进程中运行的,通过某种通信协议来回传递参数和结果。仅此而已。DCOM进了一步,服务者可以在另外一台计算机上。在公司开发中,大家可能各做一块,如果要合作,Windows下建议多使用COM.(我个人喜欢socket通信哈)

      简单说,COM提供了一种机制,可以跨进程通信,甚至跨机器通信。不过,为了传递各种类型的参数,COM可谓是无所不用其极,它发明了智能指针,可以指向任何类型的数据,同时,为了实现智能指针,它使用了大量的C++泛型设计,看见没,C++的基本功就起作用了,还用到了ATL.

      学习COM,要注意一个接口的概念。由于开发者是不同的人,调用程序和服务程序,可能不是同一种语言,OK,不能简单提供一个C或C++的。h文件来解答接口,因此,COM提供了标准接口,使用者在程序内部,以查询方式获得可用接口,进而以接口ID调用。很累人的。

      学会了COM,就可以多理解一点ActiveX了,那么再学习一点dll(动态链接库)的知识,我们就已经可以写OCX控件了。一般说来,OCX控件是个很好的设计,哪都能用,一个软件的模块,最理想是开发成这个样子,比exe灵活。

      10、没了。

      按少林派说法,学了上述这些,其实已经算打过18铜人阵了,已经可以下山助明主,扫奸佞,扭转乾坤,解万民于倒悬了。

      不过,关键是你通过上面的过程,是不是已经学会了学习的方法,再遇到新的东东,是不是已经不难学了?这大概就是武学中的悟性了,有了这个根基,以后只要慢慢修炼,估计20年后,可与天下英雄一较短长了。

       呵呵,你说是不是?
      呼呼,好累。

    本文来自CSDN博客 http://blog.csdn.net/deerfpp/archive/2009/10/13/4666333.aspx

  • C++从入门到精通十大最经典书籍

        1.《C++ Primer中文版》(第4版)

        【原书名】 C++ Primer (4th Edition)

        【原出版社】 Addison Wesley/Pearson

        【作者】 (美)Stanley B.Lippman,Josée LaJoie,Barbara E.Moo

        【译者】 李师贤

        【丛书名】 图灵计算机科学丛书

        【出版社】人民邮电出版社

        本书是久负盛名的C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++.本版对前一版进行了彻底的修订,内容经过了重新组织,更加入了C++先驱Barbara E. Moo在C++教学方面的真知灼见。既显著改善了可读性,又充分体现了C++语言的最新进展和当前的业界最佳实践。书中不但新增大量教学辅助内容,用于强调重要的知识点,提醒常见的错误,推荐优秀的编程实践,给出使用提示,还包含大量来自实战的示例和习题。对C++基本概念和技术全面而且权威的阐述,对现代C++编程风格的强调,使本书成为C++初学者的最佳指南;对于中高级程序员,本书也是不可或缺的参考书。本书的前言阐述了 第4版和前一版的不同之处。

        难度:★★☆

        质量:★★★★★

        广度:★★★★★

        深度:★★★★

        性价:★★★☆

        2.《C++ Primer Plus》(第四版)中文版

        【原书名】 C++ Primer Plus,Fourth Edition

        【原出版社】 Sams

        【作者】 (美)Stephen Prata

        【译者】 孙建春 韦强

        【丛书名】 Primer Plus 系列

        【出版社】 人民邮电出版社

        本书针对的是C++初学者,书中从C语言基础知识开始介绍,然后在此基础上详细阐述C++新增的特性,因此不要求读者有C语言方面的背景知识。本书可作为大中院校教授C++课程的教材,也可供初学者自学C++时使用。覆盖面较全,章节安排比较合理,由浅入深,也很容易,故因此失去了一些深度。价格比较便宜,但翻译质量略有不足。现在,第五版也出版了,不过还没有读,看章节都差不多。

        难度:☆

        质量:★★★☆

        广度:★★★★

        深度:★★★

        性价:★★★☆

        3.《Essential C++》(影印版)

        【原书名】 Essential C++

        【原出版社】Pearson Education

        【作者】 (美)Stanley B.Lippman

        【丛书名】 深入C++系列

        【出版社】 中国电力出版社

        lippman的一部面向初学者的作品。在他写了那么后一本primer之后,为何还要写这么薄这么浅的书呢?其实primer对于初学者来说太笨重了,而这本书却是从不同的方面——C++的本质和组织结构对语言进行阐释,可以帮助初学者对这门语言有一个大致的了解,但知识范围不很全面,不适合系统学习,读者需要一定的编程知识。

        难度:★☆

        质量:★★★★

        广度:★★★☆

        深度:★★★

        性价:★★☆

        4.《Effective C++》

        【原书名】 Effective C++, Third Edition

        【原出版社】 Addison Wesley/Pearson

        【作者】 (美)Scott Meyers

        【出版社】 电子工业出版社

        《More Effective C++》

        【原书名】 More Effective C++: 35 New Ways to Improve Your Programs and Designs

        【原出版社】 Addison Wesley/Pearson

        【作者】 (美)Scott Meyers

        【丛书名】 C++设计新思维系列丛书

        【出版社】 机械工业出版社

        C++真牛人大手笔,之以条款的形式回答了程序员在使用C++时经常提出的“因该注意些什么?”,“因该避免什么?”,“因该怎样去解决?”,“为什么?”等问题。C++程序员想要让自己的水平上更高的档次,此二书必看。价格稍贵,有一定难度,不适合初学者。

        难度:★★★☆

        质量:★★★★★

        广度:★★★

        深度:★★★★★

        性价:★★

        5.《C++编程思想》

        【原书名】 Thinking in C++

        【原出版社】 McGraw Hill

        【作者】 Bruce Eckel

        【译者】 刘宗田 等

        「丛书名」 计算机科学丛书

        【出版社】 机械工业出版社

         除了讲述语言之外,有一定的工程性,从设计者的角度来描述C++怎样应用在实际的项目中。语言描述的全面性欠佳,但还是有一定精度的,尤其是在一些小技巧方面。本书还引入了大量的战例,通过一个个的真实项目来引导你使用C++的思想去思考问题。翻译很差,有一定难度。

        难度:★★☆

        质量:★★★

        广度:★★★☆

        深度:★★★★

        性价:★★★

        6.《C++大学教程》(第二版)

        【原书名】 The Complete C++ Training Course,Second Edition

        【作者】 (美)Harvey M.Deitel Paul James Deitel

        【译者】 邱仲潘 等

        【丛书名】 国外计算机科学教材系列

        【出版社】 电子工业出版社

        正如其名,真正的大学教程,非常适合初学者学习,内容由浅入深,对C++各项特性的描述都很到位,章节的安排很有条理性,但深度略显不足,翻译质量不能称之为很好,有一定的疏漏,但对于厚度来讲,价格还算比较便宜。

        难度:★

        质量:★★★☆

        广度:★★★★★

        深度:★★★★

        性价:★★★★☆

        7.《C++语言的设计和演化》

        【原书名】 The Design and Evolution of C++

        【原出版社】 Addison-Wesley

        【作者】 (美)Bjarne Stroustrup

        【译者】 裘宗燕

        【丛书名】 计算机科学丛书

        【出版社】 机械工业出版社

        对于热爱C++的朋友来说,确实好书一本,可以当做小说来读,可以放在厕所或床头上以供消遣。本书对语言本身描述很少,并有一定难度。读者需要对C++有一定了解,不适合初学者阅读。本书也有英文版,如果不喜欢翻译的朋友可以看看。

        难度:★★★

        质量:★★★

        广度:★★☆

        深度:★★★★

        性价:★★★

        8.《C++程序设计语言》

        【原书名】 The C++ Programming Language, Special Edition

        【原出版社】 Addison Wesley

        【作者】 (美)Bjarne Stroustrup

        【译者】 裘宗燕

        【丛书名】 计算机科学丛书

        【出版社】 机械工业出版社

        C++之父所作,被称之为“C++圣经”。不仅对语言,而且对语言周边的一些如发展史、语义哲学都有比较详细的描述。对语言的描述较为全面,同时包含一部分和程序库相关联的知识,并有一定深度,适合有一定语言基础的初学者,翻译质量不错,价格适中。

        难度:★☆

        质量:★★★★☆

        广度:★★★★☆

        深度:★★★★

        性价:★★★☆

        9.《深度探索C++对象模型》(影印版)

        【原书名】 Inside the C++ Object Model

        【原出版社】 Pearson Education

        【作者】 (美)Stanley B.Lippman

        【丛书名】 深入C++系列

        【出版社】 中国电力出版社

        第一代C++编译器开发主管所写。如果你想成为真正的C++高手,看这本书,他为你讲述了编译器在处理各种语法时在“后台”所做的事。对C++有较深入了解的读者会在读后有恍然大悟之感。候杰翻译,质量相当不错,但内容太深,只适合对C++有较深了解的读者,价格偏贵。

        难度:★★★★☆

        质量:★★★★★

        广度:★★★

        深度:★★★★★

        性价:★★

        10.《C++程序设计教程》(钱能-清华版)

        【作者】 钱能 董灵平 张敏霞

        【丛书名】 C++程序设计系列教材

        【出版社】 清华大学出版社

        国人所著,国人水平实在有限,深度和广度欠佳,放在这十大里实在是因为再挑不出好书了。可圈可点之处有讲解较为清析、简单,符合中国学生思路,价格便宜。

        难度:☆

        质量:★★★

        广度:★★★☆

        深度:★★★

        性价:★★★★★