C++转 Java 开发需要注意些什么?

2016-01-28 16:49:39 +08:00
 letv

看哪些书比较好?

8106 次点击
所在节点    程序员
82 条回复
orianna
2016-01-28 23:28:49 +08:00
看上面的很多人回复,语气里感觉出很多对 java 的不屑啊,用什么语言都能用出优越感,我觉得这是不好的事情.
slixurd
2016-01-28 23:39:16 +08:00
@wizardforcel java 虽然没有指针,但是除了基本类型以外所有的都是传引用啊。
你这误导别人了, Java 最坑的地方就在于方法的参数没办法类似 C#用 ref 或 out 关键字来实现参数的按引用传递。
闭包更坑,作用域有问题, Java 8 的 Lambda 才解决了作用域的问题,虽然 final 还是不可避免。
Boxing 和数组没有半毛钱关系, Boxing 是基本类型和包装类型的转换。
少年你得好好学学 Java 啊。
libook
2016-01-28 23:53:22 +08:00
首先不建议转,原因如下:
1. Java 工程师供过于求,身价低,而 C++工程师相反;
2. Java 技术快被淘汰了,前段时间刚刚宣布彻底淘汰浏览器端 Java 应用技术,目前 Java 的用武之地只在于 Android 和国企 WEB 系统,其中 Android 的技术栈正在被 HTML5 蚕食;
3. Java 技术体系相当庞大和成熟,学习时间成本相当高,特别是你对 C++的诸多概念已经根深蒂固,转 Java 难以摆脱 C++的思维定势;吃透语言半年,领会思想一年,每个框架半年融会贯通,想成为有一定经验的 Java 工程师至少要 5 年的时间;
4. 虽然 Java 的抽象级别可以很高,做项目架构可以很清晰,但 Java 太重,执行效率太差,编译和运行环境配置过于烦琐和复杂( IDE 也帮不了你,因为这些配置都是业务的一部分),我之前给 ICNTV 做 BOSS 的时候由于用小型机堆硬件也无法让 Java 承受住那样的高并发,所以最后并发最大的部分还是用 C++写的;
5. 你身边会很难遇到优秀的 Java 工程师,大多数人都是可能连 HTTP 协议都没有学过的培训生出身,特别是往往编码习惯很不好。

如果你一定要转,作为一个两年都没有碰 Java 的人也给不了什么最新的好建议,仅供参考, Java 大牛看到也请放过我:
1. 初学不要去找 Java 与 C++的相似点,很容易被思维定势带进坑,总之鄙人不才,觉得用完 C 系再完全理解 Java 的思想挺困难的;
2. Java 完全可以达到让开发者的精力集中在业务逻辑上,可以完全不用考虑内存、协议等等底层问题上,但后期因为性能问题肯定也会不得不研究 JVM 的机制细节;
3. 要研究好每个依赖库的版本号的兼容性,引入的包多了,兼容性解决不好是无法编译通过的;
4. 要了解正在使用的各个组件在当前版本所存在的问题,包括服务器、容器等,我曾经因为一个问题纠结了 3 天,最后在 Tomcat 官方的 Changelog 中发现是 Tomcat 在特定版本存在的 BUG ,需要构造程序绕过这个 BUG ;
5. Java 有好多的框架,如果你所在的团队是求稳的话,那么恭喜你有可能要去学用得最广泛的 SSH 框架,通常是 struts(或者 Springmvc 或者 Struts2)+spring+hibernate 这样的组合,这些东西每一个拎出来都很抽象,很难理解,不过一旦你完全理解了就非常好用,毕竟抽象级别高了。

Java 历史悠久,极度成熟,想知道看什么书比较好直接去网上搜一艘就可以,相信沉淀这么多年一定是有很多精品的教材的。
libook
2016-01-28 23:53:53 +08:00
@Amit 这个非常重要!哈哈哈
orianna
2016-01-29 00:20:08 +08:00
@libook 目前 Java 的用武之地只在于 Android 和国企 WEB 系统?????看到这样的回复,我突然觉得 V2 也会有见识这么浅薄的人程序员,阿里这么庞大的 JAVA 系被你吃掉了吗.
libook
2016-01-29 00:23:54 +08:00
@orianna 个人觉得其实并不是用语言用出优越感,我非常赞同语言不分好坏,每种语言或技术都是有自己的用武之地的,我也希望大家能理解这一点,不再对语言本身的优劣进行讨论。

并不是我不推荐 Java ,而是技术的发展趋势不推荐 Java 了, Java 无疑是人类最伟大的发明之一,但是在那个时代 Java 主要是被用来解决信息技术行业从无到有的问题的,技术在推进时代的发展,当今时代人们已经不再关注从无到有的问题了,关注的更多的是利用技术来改善世界的运转方式。以前人们习惯潜心研发,历时数年开发出完整的系统来上线运营;现在人们却希望快速实现、上线自己的 Idea ,以抢占市场和尽早拿到第一手数据;以前人们需要使用昂贵的物理服务器和无止境的算法优化来应对日益增长的业务量,现在人们可以直接使用云计算思想进行开发和部署,弹性按需结算成本,对系统性能容量直接进行倍数调整;以前只是实现服务本身就是一件很厉害的事,现在实现服务只是产品的第一步,需要使用大数据等技术来主动改善产品以贴合用户需求。虽然 Java 在当今时代依然能够用于生产,但是时代已经催生出了很多更加适应当今乃至未来发展趋势的技术,极度缩短了产品从无到有的过程,极度降低了开发和部署的成本,让人们能更早地投入产品运营的工作中。
鄙人啰嗦这么多,只是想说明为什么现在在潮流之中的是 Go 、 Nodejs 等等新技术,而不是 Java 、.Net 等老技术。各位朋友们觉得在理就好,若觉得不在理也不用计较。
libook
2016-01-29 00:27:41 +08:00
@orianna 我有同学在阿里工作,他们内部已经开始向最新的技术转化了,比如 Nodejs 和 Go 还有 Docker ,之所以现在还在重度使用 Java 我相信只是历史遗留问题,毕竟无比硕大的软件系统体系不是说转就能转的,特别是他们内部之前自己造了很多轮子,都需要时间慢慢变化的。
orianna
2016-01-29 00:32:17 +08:00
@libook 你所说的潮流的判定方法是什么?你身边的人?还是?说话要有根据.不要看到有部分人用,就变成了潮流.如果非要找出一个判定方法,我只能用 TIOBE 社区的排行榜了,2015 年 12 月份榜单,一二三分别是 JAVA,C,C++,你说的 GO 排第 50.
不可否认的是,你一直在诋毁 java,虽然你又一直在否认.说 java 不好,也要说出一堆理由啊,可是你说的都是空话....表示无解
libook
2016-01-29 00:48:46 +08:00
@orianna 都说了不需要计较了嘛,我是做过项目的,所以我给出了预言,至于是否合理我们看时间的见证不就好了嘛~~我欢迎见识高远的人也来做预言,毕竟 V2 就是大家自由交流想法的地方,我相信这一点我们所有人都持相同立场哒。
Reficul
2016-01-29 01:05:16 +08:00
@zts1993
Go 的工作的确不好找啊,如果别的语言没啥经验的话就跟不好找了=-=
coldear
2016-01-29 02:28:37 +08:00
core java for the impatient, 并发权威指南两本就够了,不行在看 effective java
woai110120130
2016-01-29 07:14:45 +08:00
@libook 说的很多 也很漂亮 确几乎每一条是错误的
ericyl
2016-01-29 07:20:46 +08:00
@libook 呵呵, Android 被 HTML5 蚕食,做过项目的。真不知道是做哪一块的。说的好像原生应用已经慢慢的没人开发一样,如果说 Google 后期把原生开发语言切换成 Go 可能还有人会信。
bobuick
2016-01-29 07:58:38 +08:00
把 java 设计模式熟读好了。 c++转 java 不是分分钟的事么,脑力都能省掉一大堆
dphdjy
2016-01-29 08:09:20 +08:00
@libook 虽然 js 已经可以逆天的跨平台~但是我依然在需要的地方用原生代码~效率差的不是一点点~语言本身并不具有优越性,灵活运用各种语言达成目标多好。虽然有去 java 的趋势,那也是看环境的好伐。阿里部分换 nodejs 也只是因为那部分适合 nodejs 的特性,越是复杂的系统越难用一种语言达到尽可能优越的性能。

弱弱的预测只要甲骨文不作死,即使培训班扯的再呵呵,任何语言都不会被淘汰(打酱油那种不在此类)

以及 Android 用 html5 ,请用 2.3 或 512mb 机型试试,卡的不要不要的

最后, js 太棒了~
StvSun
2016-01-29 08:30:05 +08:00
@libook 很好, Java 又要死了
ragnaroks
2016-01-29 08:52:00 +08:00
一次编译,到处调试.
wizardforcel
2016-01-29 08:58:36 +08:00
@slixurd 你的“没办法...实现参数的按引用传递”和我说的“ java 没有引用传值”是一个意思

请你理清一个概念。对于引用类型的对象,把栈上的引用复制一份不叫“引用传递”,还是叫值传递,只不过是“引用类型的值传递”。

Boxing 这个名词可能是我记错了,不过 java 的库在处理这种情况的时候,的确是这么处理的。不信你翻源码。
neutrino
2016-01-29 09:00:27 +08:00
xp+java 6 挺好的,希望能多撑几个十年。
wizardforcel
2016-01-29 09:00:29 +08:00
@wizardforcel sorry 。。打错了

引用传值 => 引用传递

传值 == 值传递。

难怪别人不知道我指的是啥。= =

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/254037

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX