`
raojl
  • 浏览: 210529 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

从java转向C\c++开发要学会些什么

阅读更多
1、继续保持java平台的可移植作风: 尽量使用标准库(顺便学学STL)、开源的东西、条件编译
2、学会忍受引用和指针的混合使用
3、继续保持面向对象的管理方式
4、学会内存管理,不要想象java的内存自管理
5、不要C++\C的网络应用库很丰富,就算有java那么丰富,你的头也会大。所以学会一门脚本语言,
   来实现一些对时效没有要求,但对功能有较高要求的网络应用。
6、该要算法的时候一定要思考,没必要的别自讨苦吃。
7、还有一点,多看别人的代码,思考与java的异同。
8、最重要的,不要告诉你在学校没学过C,没有C的基础,吃的苦头可不小。
9、想到再补充,大家一起补充。。。。
分享到:
评论
30 楼 neodoxy 2009-09-30  
做java的往往基础较差,做C++更需要和细节打交道
与其是关注语言本身,还不如把操作系统,网络通信等等的基础补起来
29 楼 mathgl 2009-09-30  
ankyhe 写道
我觉得本质的区别在于,真正需要用C/C++的项目都是比较关注性能的,否则真的建议使用Java。既然项目关注性能,那么我们在做架构,设计和编码的时候,贯穿始终的东西都是这个:性能。那么有的时候可能我们的设计会有妥协,然后具体设计和编码的时候,对算法的要求比较高。

    其次,我觉得C/C++太关注细节,和底层操作系统结合比较紧。一般来说,一个Team里面要有几个大牛,专门做这块东西的封装。指针的使用仍然是C/C++系统里面一个常见的问题根源。按照C++的建议,对指针的使用应尽量使用智能指针(这个不一定是auto_ptr或者shared_ptr,有可能是自己封装的)。不过,实际中,很少有项目会这样做。指针的问题还是比较浪费时间的。

    再则,就是线程安全。这个最重要的是第三方库的安全和系统调用是否安全,这个在Unix/Linux上非常非常重要。

    还有就是C++多年来的一些问题。没有一个权威的日志库,没有一个权威的单元测试库,没有一个跨平台的GUI库。
我觉得新项目选择使用C++要谨慎,实在觉得有性能需要,也可能只是系统的20%。其他80%可以考虑使用Java。



GUI我还真没见过 完全跨平台的的 什么库。

不改改能直接用的估计也只是个demo罢了....

C++并非写应用的首选,特别是所谓的 操作db, crud之类。光是string编码就够喝一壶的了。
28 楼 raojl 2009-09-29  
ankyhe 写道
我觉得本质的区别在于,真正需要用C/C++的项目都是比较关注性能的,否则真的建议使用Java。既然项目关注性能,那么我们在做架构,设计和编码的时候,贯穿始终的东西都是这个:性能。那么有的时候可能我们的设计会有妥协,然后具体设计和编码的时候,对算法的要求比较高。

    其次,我觉得C/C++太关注细节,和底层操作系统结合比较紧。一般来说,一个Team里面要有几个大牛,专门做这块东西的封装。指针的使用仍然是C/C++系统里面一个常见的问题根源。按照C++的建议,对指针的使用应尽量使用智能指针(这个不一定是auto_ptr或者shared_ptr,有可能是自己封装的)。不过,实际中,很少有项目会这样做。指针的问题还是比较浪费时间的。

    再则,就是线程安全。这个最重要的是第三方库的安全和系统调用是否安全,这个在Unix/Linux上非常非常重要。

    还有就是C++多年来的一些问题。没有一个权威的日志库,没有一个权威的单元测试库,没有一个跨平台的GUI库。
我觉得新项目选择使用C++要谨慎,实在觉得有性能需要,也可能只是系统的20%。其他80%可以考虑使用Java。


1、本人喜欢log4j的c++版本 log4cplus
2、没有一个跨平台的GUI库(有一个sw库是跨所有平台的,只是你不了解)。

我觉得新项目选择使用C++要谨慎,实在觉得有性能需要,也可能只是系统的20%。其他80%可以考虑使用Java。
3、这个说的好,业务通通用java,核心通讯或服务器用c
27 楼 istudy 2009-09-29  
C++跟java相比最大的好处是速度快,C++是一门不完善的语言,发展速度极慢,java程序员向C++转换也是不得已
26 楼 ankyhe 2009-09-29  
我觉得本质的区别在于,真正需要用C/C++的项目都是比较关注性能的,否则真的建议使用Java。既然项目关注性能,那么我们在做架构,设计和编码的时候,贯穿始终的东西都是这个:性能。那么有的时候可能我们的设计会有妥协,然后具体设计和编码的时候,对算法的要求比较高。

    其次,我觉得C/C++太关注细节,和底层操作系统结合比较紧。一般来说,一个Team里面要有几个大牛,专门做这块东西的封装。指针的使用仍然是C/C++系统里面一个常见的问题根源。按照C++的建议,对指针的使用应尽量使用智能指针(这个不一定是auto_ptr或者shared_ptr,有可能是自己封装的)。不过,实际中,很少有项目会这样做。指针的问题还是比较浪费时间的。

    再则,就是线程安全。这个最重要的是第三方库的安全和系统调用是否安全,这个在Unix/Linux上非常非常重要。

    还有就是C++多年来的一些问题。没有一个权威的日志库,没有一个权威的单元测试库,没有一个跨平台的GUI库。
我觉得新项目选择使用C++要谨慎,实在觉得有性能需要,也可能只是系统的20%。其他80%可以考虑使用Java。
25 楼 rappy 2009-09-28  
mxswl 写道

java 转 c++还是容易些的,毕竟oo那一部份对于有一些功力的java coder来说是基本没问题了.

转c的话要花一些功夫. 我觉得学c要结合着操作系统,编译原理, runtime env来理解,才能有所成.
不能像玩java的时候一样,把底层都交给jvm,自己只管的oo就行.


这个帖子就这个回复有用。
24 楼 8vip 2009-09-28  
个人觉得指针
23 楼 hongkong 2009-09-28  
更‘高级’的语言,更关注的是业务
‘低级’点的语言,要更多考虑实现细节
C的字符串操作就是个典型的例子
22 楼 zhuyx808 2009-09-28  
就凭我自身经验来看,一个是 操作系统内核方面的知识要熟悉,就象winapi、宏 之类的东东,另一个就是 java确实是关注业务方面,c/c++是技术实现问题

实际操作过程中发现java的IDE比如eclipse很好用,而c/c++的IDE至今没发现一个很好用的,可能是太熟悉eclipse的操作了
21 楼 thxg 2009-09-27  
需要的是耐心,是重视。如果以为很简单,那结果会令你失望了。

举例来说,单是字符串操作,从JAVA到C++,你都可能会觉得难以适应。如果你用STL库,还好办些(不过刚学C++的话你还没功夫学STL吧),如果你不用这些库,你会发现多数情况下你要自己对字符串指针的长度与结尾负责,你会发现以前做JAVA时较多关心业务问题,现在做C++时陷进了技术细节问题上。
20 楼 raojl 2009-09-27  
shendl 写道
楼主说得不对。  
   C,C++,Java是3种截然不同的语言。   要用该语言的能力去编程。  不要总是记得Java。否则你写出的C++就是Java风格的代码。而这不好。不行。

我并没说记得什么,这不是武侠小说,废掉武功练出葵花宝典。我们要记得不是语法的条条框框。我们要的思想,设计的思想。
19 楼 mxswl 2009-09-27  

java 转 c++还是容易些的,毕竟oo那一部份对于有一些功力的java coder来说是基本没问题了.

转c的话要花一些功夫. 我觉得学c要结合着操作系统,编译原理, runtime env来理解,才能有所成.
不能像玩java的时候一样,把底层都交给jvm,自己只管的oo就行.
18 楼 raojl 2009-09-27  
兄弟们注意队形,讨论不是在讨论谁对谁错,既然讨论有的是是是非非,然后怎么改进?不是要一棍子打死谁!
17 楼 pister 2009-09-27  
visualcatsharp 写道
pister 写道
2、如果你想,你完全可以不用c++的引用,你完全可以把c++的指针当做java的引用来看,最多只是多了个资源的管理问题,要确保时候释放,正确释放。

从你这句话就可以知道你根本不懂c++


或许吧,呵呵
16 楼 visualcatsharp 2009-09-26  
从java转向c,c++,最需要的不是熟悉c++的指针,引用,甚至模板,友元之类的东东。
作为一个c/c++程序员,面向的是各种操作系统,并非浏览器,因此最需要补充的是操作系统的知识,包括内核对象,多线程等各种跟操作系统密切相关的东东。
15 楼 visualcatsharp 2009-09-26  
pister 写道
2、如果你想,你完全可以不用c++的引用,你完全可以把c++的指针当做java的引用来看,最多只是多了个资源的管理问题,要确保时候释放,正确释放。

从你这句话就可以知道你根本不懂c++
14 楼 jjcang 2009-09-26  
指针是精髓。
13 楼 william_ai 2009-09-26  
pister 写道
raojl 写道
1、继续保持java平台的可移植作风: 尽量使用标准库(顺便学学STL)、开源的东西、条件编译
2、学会忍受引用和指针的混合使用
3、继续保持面向对象的管理方式
4、学会内存管理,不要想象java的内存自管理
5、不要C++\C的网络应用库很丰富,就算有java那么丰富,你的头也会大。所以学会一门脚本语言,
   来实现一些对时效没有要求,但对功能有较高要求的网络应用。
6、该要算法的时候一定要思考,没必要的别自讨苦吃。
7、还有一点,多看别人的代码,思考与java的异同。
8、最重要的,不要告诉你在学校没学过C,没有C的基础,吃的苦头可不小。
9、想到再补充,大家一起补充。。。。


1、需求驱动技术,如果要保持可移植的作风,那么肯定要牺牲些什么,牺牲的是不同平台的差异,牺牲的是不同平台的优势,除非你想做成通用库,一般的应用没有必要这么做。可移植性即使保证了,但是时间保证了吗,成本保证了吗?我们要在之间找个平衡点,而不是一味的追求移植。
2、如果你想,你完全可以不用c++的引用,你完全可以把c++的指针当做java的引用来看,最多只是多了个资源的管理问题,要确保时候释放,正确释放。
3、不能白什么是“面向对象的管理方式”,如果说是编程方式,除了面向过程和oop外,花些时间在gp上还是值得的,目前c++的gp要比java的gp强很多。
4、见2
5、还是那就话,需求决定技术,什么技术能够要求,谁的成本低,就用谁。
……

第五条,不太准,有时候是谁的关系硬,就用谁,O(∩_∩)O哈哈~
12 楼 cyberblue 2009-09-23  
mathgl 写道
cyberblue 写道
宏和指针,其他的影响不大。

不过很多人喜欢炫耀冷僻的语法,某些语法甚至不可移植,相关这方面内容可以参观下“国际C语言混乱代码大赛”。


template是个很神奇的东东。。可以看看boost里头的实现...相当诡异


模板确实很抽象,比Java里的泛型诡异多了,做Java的一般都不怎么愿意用。

有个说法,C++是一些数学很强的搞出来的,抽象的东西很多,Java是一群电子很强的人搞出来的,用起来的感觉基本和在板子上摆弄元器件差不多。
11 楼 raojl 2009-09-23  
pister 写道
raojl 写道
1、继续保持java平台的可移植作风: 尽量使用标准库(顺便学学STL)、开源的东西、条件编译
2、学会忍受引用和指针的混合使用
3、继续保持面向对象的管理方式
4、学会内存管理,不要想象java的内存自管理
5、不要C++\C的网络应用库很丰富,就算有java那么丰富,你的头也会大。所以学会一门脚本语言,
   来实现一些对时效没有要求,但对功能有较高要求的网络应用。
6、该要算法的时候一定要思考,没必要的别自讨苦吃。
7、还有一点,多看别人的代码,思考与java的异同。
8、最重要的,不要告诉你在学校没学过C,没有C的基础,吃的苦头可不小。
9、想到再补充,大家一起补充。。。。


1、需求驱动技术,如果要保持可移植的作风,那么肯定要牺牲些什么,牺牲的是不同平台的差异,牺牲的是不同平台的优势,除非你想做成通用库,一般的应用没有必要这么做。可移植性即使保证了,但是时间保证了吗,成本保证了吗?我们要在之间找个平衡点,而不是一味的追求移植。
2、如果你想,你完全可以不用c++的引用,你完全可以把c++的指针当做java的引用来看,最多只是多了个资源的管理问题,要确保时候释放,正确释放。
3、不能白什么是“面向对象的管理方式”,如果说是编程方式,除了面向过程和oop外,花些时间在gp上还是值得的,目前c++的gp要比java的gp强很多。
4、见2
5、还是那就话,需求决定技术,什么技术能够要求,谁的成本低,就用谁。
……


分析的淋漓尽致。
需求决定技术,什么技术能够要求,谁的成本低,就用谁 --这只是我们程序自由的理想。往往一线的技术人员没有
决定使用哪种技术的权利,不然我为什么会被和谐呢?


相关推荐

    面向对象编程C++和Java比较教程

    在从C++转向Java或反之的过程中,开发者需要适应这些语言间的差异。例如,C++程序员可能需要学习如何避免指针的直接操作,理解Java的垃圾回收机制;Java程序员则需要学会使用C++的模板和内存管理。 总之,C++和Java...

    给C++初学者的忠告

    - **建议**:对于初学者来说,建议先从较为简单的语言入手,掌握基本的编程思想后再转向C++的学习。如果直接选择C++,则需确保自己有足够的耐心和时间去逐步攻克难关。 #### 2. 通过阅读《Thinking in C++》加深...

    钱能的c++书籍

    本书的特色在于其技术参照的变更,从以C语言为背景转向了以标准C++为蓝本,同时参考Java技术,并在内容结构上进行了大幅度的重组。这些更新使得第二版更加贴合当前的编程需求,同时也更加符合计算机科学的教学大纲。...

    编程技巧:C/C++,ASP.NET,JAVA,Linux shell,SQL等

    本文将深入探讨C/C++, ASP.NET, JAVA, Linux Shell以及SQL等编程语言的实用技巧,帮助你无论在哪个领域都能游刃有余。 首先,让我们从C/C++开始。C++是一种面向对象的语言,它的模板和继承机制为程序员提供了极大的...

    C语言经典编程900例

    虽然随着技术的发展,许多开发者转向了更高级的语言如Java和C++,但C语言作为计算机科学的基础,其简洁、高效的特点依然被广泛应用在系统编程、嵌入式开发等领域。 C语言,由Dennis Ritchie在20世纪70年代初为Unix...

    大学生软件企业实习报告800字范文.pdf

    同时,要灵活调整求职策略,比如接受不同岗位的挑战,如从技术服务开始,积累经验后再转向开发工作。 5. 工作体验与成长:在工作中,可能会经历压力、挫折,但这些都是个人成长的催化剂。要学会适应工作环境,处理...

    注意:涵盖Java相关技术堆栈

    1. **Go语法**:Go语言的语法简洁,与C/C++类似,但更加强调安全和效率。 2. **并发编程**:Go的goroutine和channel是其并发模型的核心,它们提供了轻量级线程和同步机制。 3. **接口**:Go的接口定义方式不同于其他...

    编写程序的要领

    2. **C#**:结合了C++和Java的优点,主要用于Windows平台的开发。 3. **C++**:提供高性能和底层控制,适用于系统级编程和游戏开发。 4. **C**:用于系统编程,是学习计算机科学基础的绝佳选择。 5. **Visual Basic ...

    AndroidPPt

    - **主要编程语言**:Android 应用主要基于 Java 开发,同时支持 SQL 和 C/C++(底层基于 Linux)。 - **编程方式**: - 基于 ADT 的 Java 编程。 - 基于 NDK 的 C 编程。 #### 六、Android 编程环境配置 - **...

    JSP实验题目和代码

    ### JSP实验知识点详解 #### 实验一:编写、保存、运行...通过以上两个实验,学生不仅能够掌握基本的JSP页面开发流程,还能够深入了解JSP页面中的Java语法和逻辑控制。这对于后续更复杂的应用开发具有重要的基础意义。

    windows环境下32位汇编语言程序设计

    用汇编写复杂的运算程序固然会比C更有效率,但同样的事在C中用一个表达式就全部搞定了,从这里开始学汇编,给人的感觉就像从复杂的公式开始学算术,要知道,加法还没有学会呢!而对于高级语言封装起来的系统功能,用...

    C数据结构C#数据结构

    传统上,数据结构与算法的教学资源多以Java或C++语言编写,然而随着C#的崛起,越来越多的开发者转向这一语言。《C数据结构C#数据结构》一书填补了C#数据结构与算法学习资料的空白,为C#程序员提供了深入理解并应用...

    我的sourceinsight配置和宏工具

    它提供了对多种编程语言的支持,如C、C++、Java、Python等,并且具有强大的代码导航、搜索、语法高亮和自动完成功能。在这个“我的sourceinsight配置和宏工具”主题中,我们将深入探讨如何配置SourceInsight以及利用...

    Scala Functional Programming Patterns

    之后,他转向C++,进而又深入Java和Scala。Atul对开源项目充满热情,热爱脚本语言和整洁的代码。他总是乐于学习新的命令行技巧,目前在Webonise Labs担任工程师,并曾作为Dr. Dobb's Jolt Awards的评审团成员。此外...

    C#教程,书,PDF

    C#语言起源于.NET框架,它既有C和C++语言的简洁性,又有Java语言的安全性与稳定性。在这部分,读者将学会如何使用Visual Studio这样的强大集成开发环境(IDE),并开始编写和运行简单的C#程序,感受编程的魅力。 ...

    Concepts in Programming Languages

    进入21世纪,随着互联网的普及,Java、Python和JavaScript等高级语言以其易用性、跨平台能力和强大的社区支持,成为了当今最流行的编程语言。这一部分的学习帮助学生理解各种编程语言的设计初衷和它们的发展轨迹。 ...

Global site tag (gtag.js) - Google Analytics