个人认为本文较偏激,且年代较久远,但可以一看。


转自c++和java(c#)之间的pk

1、谁好谁坏?



  如同当初我没有想到会进入java阵营一样,这次闯入c++阵营也是意料之外的。多年前,受到微软的影响,我几乎是微软的铁杆,对从QB到c#都是深入学习过的。我一直以为微软的软件是做的最人性化的,最好的。2年前,不经意的走进了java的大门,虽然我学习过java,但是对于这个不能做漂亮界面的语言一直有抵触的思想。这一次走入,让我成了java的忠实支持者。支持java的开源社区,群众的力量远远大于微软的那几个,和他们相比,微软的东西(除了操作系统)就算是机械时代的产物了。



  再次转移到c++阵营,迎面而来的是一阵担忧的云雾。无论是Linux创造者对c++的鄙视,还是c++应用范围的严重萎缩,都不得不让我担惊害怕。经过1个多月的熟悉之后,我又慢慢的恢复了一点点感觉。我们承认,做应用c++不如c#(java)等没有指针的语言,做底层c++不如c等速度快的语言。但,我们不能否认,在复杂度较高的算法级别,在使用了stl和boost等大量优秀库后,c++绝对比c#(java)运行快,比c编码快。要注意,这时的c++,拥有了c#(java)的内存处理的优点,也拥有c的速度的优点。



  如果你要编写复杂的算法,那么c++是最好的选择。如果你只是测试算法,你可以用java(c#);如果是要在单片机上面运行,你可以用c。但是,如果你要做一个在pc上运行的程序的算法底层,c++绝对是最好的选择。



  2、java的编程特点



  java的成功完全得益于它在网络应用上的推广。广大开源阵营的兄弟们也是java得以红遍天的主要推动者。虽然js和java没有什么本质联系,但js标准也成了java语言的宣传者。比较起来,java自己宣称的跨平台特性反而并不受人关注。



  java语言目前最成功的地方至少有3个方面:1)jvm速度的不断提高;2)大量优秀ide的出现;3)数也数不清的开源库。简单的说,可以用java的地方,一个审时度势的人不会使用c/c++。



  java的最大优势是它的不断持续的发展。在java世界,早就是j2ee的分布式部署、rmi的远程调用、spring的反转控制、aop的切片控制等其他语言想都不敢想的技术的天下了。使用java的人,永远都要走在技术的最前沿!



  使用java编程,你必须理解各种构架,你必须理解各种设计模式;使用其他语言,可能你就只需要知道怎么写函数即可。举例来说,有个用c/c++写了10年代码的人,猛然看到java的程序,他看的头晕目眩,说到处是接口,跳来跳去都看不清楚怎么回事。他只理解到函数级别,当然看不明白基于对象级别设计的java程序。



  3、c++的编程特点



  c++最大的麻烦来自于ide编程环境。比较起来VS.net的编程环境已经算是这个方面的佼佼者了,可是,你必须要给它安装许多插件才能够达到Java的ide的那种程度。如果你没有给你的vs.net安装代码自动提示和代码格式化的插件,那就说明你还在浪费力气的多敲空格(《代码大全》上面说,程序员有30%的编写代码的时间花费在敲额外的空格上了)。



  使用c++编程的最大好处是,你能够使用到最新的算法。一般研究算法的人都会用c/c++来构建他们的代码库,究其原因,恐怕是因为那些大学者们年纪比较大,没有学过java(呵呵)。所以,你要找个基础的数据结构,比如,kdb-tree的实现,找c++的要容易得多。集中一点,c++就是为算法而生的。你用它来做任何其他事情都不是很合适。



  使用c++的兄弟大部分都是被c++的古怪特性吓怕了的。无论是到处会出现的const无法转化为非const,还是常数无法转化为引用,还是有的函数指针居然是8字节,还是namespace只具有象征意义等等,c++中的古怪行为实在难以枚举。如果你还没有遇到过,那恭喜你啦,你已经成为顶级高手了或者你还在十分低效的编程。这里要告诫那些以理解c++的一些奇特性质而沾沾自喜的兄弟们,不要学这些垃圾的东西,这些古怪的特征肯定会被抛弃的。这点如同你不要用java中标明为deprecated的方法一样。



  在c++中,你一定要万分注意命名规则(因为ide并不会告诉你某个名字的真正类型)。为了你自己也是为了别人好。



  4、相互学习



  学习c++,你最该看的书是:stl相关、boost相关、effective c++、c++ prime、代码大全 等等。学习java,你最该看的书是:设计模式、软件工程(如敏捷编程)、java3标准、算法设计。用c++的人一般把自己看成一个低级程序员,用java的人一般把自己看成一个设计师。虽然初级c++程序员比初级java程序员薪水高。但高级的c++程序员却不比高级的java程序员薪水高。



  另外,让人感觉到意外的一点是,使用java的人普遍比使用c++的对基本算法了解更加深入。我想可能是因为java里面的算法是开源库,容易看明白;同时,java要想跑的快,算法是必须考虑的。当然了,用java写一个算法比用c++写一个要来得快很多。举例来说,几乎用java的人人人都知道动态数组(ArrayList)是怎么工作的,但是,使用c++的人却只有少数知道动态数组怎么工作(vector)。



  c++和java程序员的自我感觉真的差好远,居然会有c++团队3个月都不交流一次!这点在java看来几乎是不可能的,3个月之后构想肯定发生改变了。



  根据分析,c++程序员应该提高自己的构架能力,而java程序员应该提高自己对语言的理解和代码编写能力。只有相互学习才能够让我们编写的软件不成为垃圾。

c++和java(c#)之间的pk的更多相关文章

  1. Java线程之间通信

    用多线程的目的:更好的利用CPU的资源.因为所有的多线程代码都可以用单线程来实现. 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程. 并行:多个CPU实例或者多台机器同时执行一段处理逻辑, ...

  2. JSON 与JAVA对象之间的转换(转)

    JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...

  3. Java类之间的关联关系(转载)

    Java类之间的关联关系 UML类图中的关系分为四种:泛化.依赖.关联.实现:关联关系又可以细化为聚合和组合. 一.泛化(Generalization) 泛化是父类和子类之间的关系,子类继承父类的所有 ...

  4. 两个java工程之间的相互调用方法

    如果你有两个java项目的话,如何向他们之间进行信息的通信前提:必须知道要通信的java项目(接收请求方)的服务器的IP地址和访问路径.其实两个java项目之间的通信还是使用HTTP的请求.主要有两种 ...

  5. 关于CPU核心,线程,进程,并发,并行,及java线程之间的关系

    前言:作为一个转行java的小白,一直搞不清楚java中的多线程.于是来梳理一下关于CPU核心,线程,进程,并发,并行,及java线程之间的关系, 1.CPU角度来看: 我们以Intel的Core i ...

  6. 附:常见的Jdbc Type 与 Java Type之间的关系

    附:常见的Jdbc Type 与 Java Type之间的关系 JDBC Type Java Type CHAR                  String VARCHAR String LONG ...

  7. JAVA多线程之间共享数据BlockingQueue介绍

    在JAVA的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利. ...

  8. 别名现象,java对象之间的相互赋值

    请看一下代码 import java.util.*; class book{ static  int c = null; } public static void main(String[] args ...

  9. 使用RandomAccessFile在两个java进程之间传递数据

    大部分情况下,我们面对在两个java进程只见传递数据的问题时,第一个想到的就是开server,然后通过socket收发消息.这方面有大量的框架可用,就不细说了.但如果两个进程是在一台机器上,那么还可以 ...

随机推荐

  1. [MySQL 5.6] 初识5.6的optimizer trace

      在MySQL5.6中,支持将执行的SQL的查询计划树记录下来,目前来看,即使对于非常简单的查询,也会打印出冗长的查询计划,看起来似乎不是很可读,不过对于一个经验丰富,对查询计划的生成过程比较了解的 ...

  2. CentOS远程系统管理之VNC

    写这篇有摘自他人的地方,如若侵犯请立即告知,第一时间下降!! 现在比较好用的用的广泛的是SSH和PUTTY,通过这些客户端来管理LINUX服务器的,下面主要介绍另一款VNC软件,主要由两个部分组成:V ...

  3. 亲测git与github

    1.安装MyEclipse 8.5,略去不表.2.下载Eclipse的git插件——EGit.下载网址http://download.eclipse.org/egit/updates-1.3/org. ...

  4. Day04 - Python 迭代器、装饰器、软件开发规范

    1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...

  5. iOS 9 关键字的简单使用

    前言: 在iOS 9 苹果推出了很多关键字, 目的其实很明确, 主要就是提高开发人员的效率, 有益于程序员之间的沟通与交流, 在开发中代码更加规范! 1. nullable 与 nonnull nul ...

  6. Installing the .NET Framework 4.5, 4.5.1

    This article provides links for installing the .NET Framework 4.5 and 4.5.1 on your computer.  If yo ...

  7. C++ 常见问题

    1:保证编译后方法名不被修改:  The: extern "C" { function declarations here in h file } will disable C++ ...

  8. [C# 基础知识系列]专题十六:Linq介绍

    转自http://www.cnblogs.com/zhili/archive/2012/12/24/Linq.html 本专题概要: Linq是什么 使用Linq的好处在哪里 Linq的实际操作例子— ...

  9. .NET设计模式(2):单件模式(Singleton Pattern)

    转载:http://terrylee.cnblogs.com/archive/2005/12/09/293509.html 单件模式(Singleton Pattern) --.NET设计模式系列之二 ...

  10. jmeter中webdriver插件,进行自动化压测

    1.下载JMeterPlugins-WebDriver-1.1.2 2.将JMeterPlugins-WebDriver-1.1.2\lib\ext中的*.jar拷贝到D:\apache-jmeter ...