• C与JAVA论道之11月编程语言排行榜的较量

    cvsjava

    今日无意浏览一网站的时候发现了一条新闻,11月编程语言排行榜中C与JAVA的差距变小了,这个差距指的不是功能及性能方面的,而是使用率上,05年的时候JAVA与C曾经接近过一次,11月份这样的现象又重现了。

     

    下面是TIOBE Programming Community Index for November 2009的一些数据及图片。这些均来自于TIOBE官网。

     

    rank1

    从上图中我们可以看出JAVA与C非常接近了。

    tpci_trends

     而从上面这幅图中我们可以看到JAVA略有下降,C有回升的趋势。

    C语言不知道有多少朋友学过?我的感觉是语法简单精练,很适合刚接触编程的朋友,另外C作为有30多年历史的语言,其优秀的特性至今仍被很多朋友使用。而JAVA由于其跨平台及面向对象等特性普及率越来越高,成为越来越多朋友的首选编程语言。

    下面是TIOBE官网的一些原文。

    November Headline: C is closing its gap with Java

    The difference between the number 1 and 2 of the TIOBE index is getting smaller. C is only a little over 1% behind Java now. Last time C and Java were so close was in 2005. Both languages show a long-term downtrend, but Java’s downtrend appears to be steeper. In two months’ time TIOBE will announce the programming language of the year 2009. Candidates so far are: C, C#, PHP and may be even Objective-C.

    The TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. The popular search engines Google, MSN, Yahoo!, Wikipedia and YouTube are used to calculate the ratings. Observe that the TIOBE index is not about the best programming language or the language in which most lines of code have been written.

    The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system. The definition of the TIOBE index can be found here.

    不知道各位朋友对C及JAVA有何看法呢?

  • 简述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++程序设计系列教材

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

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

        难度:☆

        质量:★★★

        广度:★★★☆

        深度:★★★

        性价:★★★★★