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的更多相关文章
- Java线程之间通信
用多线程的目的:更好的利用CPU的资源.因为所有的多线程代码都可以用单线程来实现. 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程. 并行:多个CPU实例或者多台机器同时执行一段处理逻辑, ...
- JSON 与JAVA对象之间的转换(转)
JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...
- Java类之间的关联关系(转载)
Java类之间的关联关系 UML类图中的关系分为四种:泛化.依赖.关联.实现:关联关系又可以细化为聚合和组合. 一.泛化(Generalization) 泛化是父类和子类之间的关系,子类继承父类的所有 ...
- 两个java工程之间的相互调用方法
如果你有两个java项目的话,如何向他们之间进行信息的通信前提:必须知道要通信的java项目(接收请求方)的服务器的IP地址和访问路径.其实两个java项目之间的通信还是使用HTTP的请求.主要有两种 ...
- 关于CPU核心,线程,进程,并发,并行,及java线程之间的关系
前言:作为一个转行java的小白,一直搞不清楚java中的多线程.于是来梳理一下关于CPU核心,线程,进程,并发,并行,及java线程之间的关系, 1.CPU角度来看: 我们以Intel的Core i ...
- 附:常见的Jdbc Type 与 Java Type之间的关系
附:常见的Jdbc Type 与 Java Type之间的关系 JDBC Type Java Type CHAR String VARCHAR String LONG ...
- JAVA多线程之间共享数据BlockingQueue介绍
在JAVA的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利. ...
- 别名现象,java对象之间的相互赋值
请看一下代码 import java.util.*; class book{ static int c = null; } public static void main(String[] args ...
- 使用RandomAccessFile在两个java进程之间传递数据
大部分情况下,我们面对在两个java进程只见传递数据的问题时,第一个想到的就是开server,然后通过socket收发消息.这方面有大量的框架可用,就不细说了.但如果两个进程是在一台机器上,那么还可以 ...
随机推荐
- oracle用户管理实例
oracle中的用户角色分为预定义角色和自定义角色. 角色是把常用的权限集中起来形成角色. 授权/分配角色命令 grant 权限/角色 to 用户 收回权限命令: revoke 综合案例: 创建一个用 ...
- http://bbs.phpcms.cn/thread-266337-1-1.html
http://bbs.phpcms.cn/thread-266337-1-1.html utf8 改成 ANSI”
- C#入门教程(三)–接收用户输入、转义字符、类型转换-打造C#入门教程
上次教程主要讲解了visual stdio快捷键.变量相关的知识.具体教程戳这里:http://www.chengxiaoxiao.com/net/1027.html 越来越深入去写教程越来越发现,自 ...
- mysql免安装版使用
打开命令行,到bin目录下,输入net start mysql 启动服务,输入mysql -u root -p回车后输入密码,进入mysql.
- (转)Spring读书笔记-----使用Spring容器(二)
一.使用ApplicationContext 前面介绍了,我们一般不会使用BeanFactory实例作为Spring容器,而是使用ApplicationContext实例作为容器,它增强了BeanFa ...
- 懒人神器之T4模板
最近遇到一个比较令人烦躁的问题,特别是对于我等懒癌末期者.实在难以忍受!具体问题是这样,这个项目是一个新的项目.使用EF框架来开发,那么在搭建架构时,当我们新加一个Entity时,就需要在每个层级添加 ...
- iOS 此证书的签发者无效
1.先检查Apple Worldwide Developer Relations Certification Authority Intermediate Certificate证书是否过期,该证书过 ...
- Quartz-2D绘图之概览
最近公司新项目需求要把数据图形化,趁着这个机会,重温了下Quarts-2D这个强大的跨平台2D绘图引擎. 一.Quartz概述 1.Quartz 2D是一个二维的绘图引擎,支持iOS和Mac OS平台 ...
- WPF常用控件应用demo
WPF常用控件应用demo 一.Demo 1.Demo截图如下: 2.demo实现过程 总体布局:因放大缩小窗体,控件很根据空间是否足够改变布局,故用WrapPanel布局. <ScrollVi ...
- 求最低分最高分---c#(冒泡排序的运用)
// 输入10个人的分数,去掉两个最高两个最低,求平均分 Console.Write("请输入人数:"); int renshu = int.Parse(Console.ReadL ...