从Java转到C++感悟

4 篇文章 0 订阅
2 篇文章 0 订阅

从我刚接触程序时,学习的就是c/c++,大学毕业后去北京找工作,c++岗位需求少,自己学的又浅,很不好找。幸运的是从学校走时在别人宿舍地上捡到一本被遗弃的Java思想,并被我带到北京垫了床脚。了解到Java岗位需求多,所以尝试学习Java,可能是生活的压力,一本厚厚的书,只用了一周就看完了,并编了些测试小程序。将海投岗位转成Java,并很快找到了工作,开始了我Java程序开发生涯,并一晃十年过去了。刚开始做Java客户端开发,后来又做后台服务开发,基本把Java的里里外外都接触到了,现在又因为业务需要需使用C++开发,经过一年左右的时间,有些感悟记录一下,看看自己走偏的路,希望别人可以顺利些。

搞了十几年开发,用过很多其它语言,自认为语言本身已经不是我开发的障碍了,程序设计的思路是想通的。但在转c++的这一年里我却备受煎熬,我分析了一下主要有以下几个问题。

第一,Java是种相对高级的语言,他屏蔽了很多底层差异,最主要的是对内存的自动回收,让转到c++的我看到各种指针和内存回收都很恐慌。一不小心就会程序崩溃,人也跟着崩溃。当然高级的Java后台开发者也需要应对各种内存处理的挑战,但不会像c++这样写个小程序就会面临很多内存处理的压力。

第二,Java适用于复杂的业务处理,他的面向对象的设计思想更多的是抽象高层的业务逻辑,对于一般水平的程序员还是比较好理解的。常抽象的类主要是人、事、物;而c++更适用于做功能开发,所以抽象的层次比较偏向硬件难理解。常抽象的类是数据存储结构、文档模型、硬件设备等。

第三,Java里基本类型比较直接,除了基本类型就是类,很直观。一个你从来没有接触过的类创建出来后,基本顺着走就可以使用;c++里有类型定义,明明就是一个简单的基本类型,各个平台会根据用途、含义或职责给他进行多层的定义封装。让习惯了Java哪种直接使用基本类型的我想当崩溃。没有尽快看清这种定义的本质,也是我搞c++最大的障碍。在很长一段时间里,完全不知道怎样给方法传参数,怎样处理返回参数,看到随处可见的类型强转就晕菜。

第四,因为JVM虚拟机屏蔽了底层的差异,使上层架构很稳定,所有有大量稳定可靠的官方库支持,只要找到一个靠谱的jar,一切基础功能操作都很轻松,你只需要关心业务逻辑处理;c++因为可以和c这种系统开发语言看齐,所以有很灵活和强大的能力,但如果我只是想做一些简单的开发,还没有对系统底层有很深入的认识和了解就会被那些数不尽的细节纠缠到吐血。真的要好好深入解析Windows操作系统运行原理后才能轻松自如的在Window平台上开发。

还有很多问题,对于我这个老程序员来说还比较好克服,就不再多说了。

针对这几个问题我总结一下应对方法:

第一,多看看基础书籍,充分利用指针的高效优势,把恐惧变成喜欢。牢记谁创建谁销毁。

第二,转变思路,把原来对高层事物的抽象转变为底层抽象。需要充分了解操作系统底层,把所有的抽象都映到内存结构上去。

第三,早点查看windows底层类型定义的头文件,将常见类型记烂,记死,理解透彻后,那些乱七八糟的类型在你眼中就又变成基本类型了,想怎么转就怎么转,你也会不自觉的定义一些你自己的类型了。

第四,透彻了解你所开发的平台运行机制和原理。堆、栈、进程、线程自不必说,常用的数据结构也要熟练。

最后的最后我以我的感悟打个比喻。在Java领域开发像是在陆地上爬山,开始缓,登顶珠峰难。但你不爬山在平原上歇着也很轻松;在c++领域开发像是在海里潜水,一开始就不容易,下面更是深不可测。不会游泳的直接淹死,坐上潜艇的也很难探底。

 

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值