71
回答
高手问答第 188 期 — 从 Java 开发说起,聊聊 Java 的现状和未来

OSCHINA 本期高手问答(3 月 7 日 - 3 月 13 日)我们请来了李刚老师@疯狂软件李刚 和大家一起探讨关于 Java 的问题。

李刚,十余年的软件开发从业经验,疯狂软件教育中心教学总监,疯狂 Java 实训营创始人,疯狂 Java 体系原创图书作者。李刚老师作为国内著名高端 IT 技术作家,已出版《疯狂Java讲义》、《疯狂Android讲义》、《轻量级Java EE企业应用实战》、《经典Java EE企业应用实战》、《Struts 2.x权威指南》、《疯狂HTML 5/CSS 3/JavaScript讲义》等著作。

Java 从诞生至今,便一直长盛不衰,作为一门长期霸占编程语言排行榜前列的语言,它有何独特之处呢?我们可以列出许多因素,比如 Java 是工业级别的编程语言,它的标准和规范都是面向对象编程的代表;比如 Java 的生态相当成熟,社区活跃度高,无论什么样的问题基本都有现成的开源解决方案。

而且恰恰是由于 Java 的流行和开放性,在 Java 平台之上还衍生出了很多轻量级的编程语言,比如 Scala、Groovy、Kotlin 等等,这些语言都可以运行在 JVM 之上,形成了极具生命力的生态环境。而这种反哺的关系使得 Java 生态越来越壮大。

李刚老师从事软件开发十多年,对于 Java 开发有着丰富的经验和见解。本期高手问答十分有幸邀请到李刚老师和大家一起探讨 Java 相关问题,欢迎大家踊跃提问。

本期问答内容:

  • Java 10 的新特性
  • Java 9 的更新和发展
  • Kotlin 和 Java 的区别,以及发展趋势

或有其他关于 Java 的问题,也欢迎大家积极提问!

为了鼓励踊跃提问,李刚老师会在问答结束后从提问者中抽取 5 名幸运会员赠予《疯狂Java讲义(第4版)》一书。

图书购买地址:京东当当

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就 Java 相关问题向李刚老师提问,请直接回帖提问。

举报
局长
发帖于8个月前 71回/11K+阅
共有71个答案 最后回答: 6个月前

@疯狂软件李刚 我坐标成都,按我接触到的业内行情,这边小作坊式的创业公司遍地横生,出于对经济效益的追求,成本压制等等,给新人慢慢成长机会的公司比较少。

我觉得现阶段我们这边对于程序员的需求,可以概括为“小、快、灵”。小,是指项目小,项目开发人员少;快,是指开发周期短,灵是说程序员通常干的活儿都比较杂,甚至有时候需要从架构设计到前后端撸代码一溜儿干完。

请问大佬,在这样的情况下,加班特严重,收入拉平均工资后腿儿,如何有效提升自我,规划进阶之路。

--- 共有 3 条评论 ---
紫电清霜 回复 @疯狂软件李刚 : 赞一个: 8个月前 回复
疯狂软件李刚 回复 @qwzh110 : 首先要说明一点,小的创业公司才是软件行业的真正活力。我对小的创业公司一直都充满尊敬。 从一个普通开发者的角度来说:小公司学技能,大公司学规范。 从工作者的角度来看,当你觉得小公司容不下工作者伟岸的身躯时,他完全可以跳槽到其他大公司的。 程序员提升自己,靠的是长时间的坚持,业余时间的坚持。 8个月前 回复
qwzh110同问 8个月前 回复

@疯狂软件李刚 老师您好,现在java版本更新速度加快(或许表明java的繁荣),新版本带来新特性,让功能完成更方便简洁,但是新特性不一定会在项目中使用到,尤其对于比较老的项目,java10都要出了项目中还用java7,再加上新技术只对于高版本支持(比如新出springboot要求最低版本是java8),如何做版本选择呢?或者有没有必要使用最新版本?还有之后java版本更新会不会越来越向 框架化 靠拢,比如springboot/cloud,比如java9新特性模块化,那未来java会不会像框架一样类似微服务化使得编程更加方便简单呢?

--- 共有 2 条评论 ---
暗中观察 回复 @疯狂软件李刚 : 我工作的那家还在用jdk1.6 7个月前 回复
疯狂软件李刚1. 升级Java 8是最基本的要求了,还用Java 7的项目,难道准备做化石呀。 2. 语言升级的趋势,必然是功能更强大,编程更简洁(注意我说的是简洁,不是简单) 8个月前 回复

@疯狂软件李刚Java 9之前,Java本身是没有符合以上要求的模块系统的,当时主要使用package作为封装方式,使用Jar 作为模块,具有很多缺陷。Java 9通过Jigsaw项目引入了新的模块系统 Java Platform Module System,为开发者提供一个官方的有标准的模块系统,使用上诉模块系统将Java标准库本身进行模块化,JPMS 仍然缺乏对模块的版本的支持,虽然可以对模块添加版本元数据,但是对模块依赖声明中缺无法指定具体版本的信息。为什么要是用JPMS,JPMS有哪些优点,给我们开发过程带来哪些便利。

--- 共有 1 条评论 ---
惜抱轩同问 8个月前 回复
请老师讲下Java开发者可选的职业发展方向,谢谢
--- 共有 1 条评论 ---
疯狂软件李刚非常多啊, 传统银行、通讯、航空、电力、交通、公共安全等领域各种后端开发,基本都是Java的。 移动端Android开发。可以用Java啊,现在当然也可以用Kotlin。 还有大数据,VR等前沿就业方向。 8个月前 回复

@疯狂软件李刚 Kotlin是否会对java造成冲击?

--- 共有 2 条评论 ---
疯狂软件李刚就像C/C++,一直都不是最优秀的,历史也足够古老了。各种语言来了又去了,最后依然坚挺的要死。 Java也一样,我可以明确地告诉你,Java不是最优秀的,Java有不少问题,但要取代Java可能性不大 8个月前 回复
疯狂软件李刚Java几乎涉及到生活的各方面:世界上所有的银行、通讯、航空、电力、交通、公共安全等领域的核心系统,也都是基于Java的,如果完全放弃Java,等同于把世界上所有的这些应用系统全部要替换掉。 ——虽然每隔1~2年,就有各种语言出来说要代替Java,跟着起哄的基本都是SB。如果在软件行业呆的时间够久就知道:语言是否被代替,和它的生态圈有很大的关系。 8个月前 回复

@疯狂软件李刚 生产环境还是停留在jdk7,不考虑迁移工程的改动成本的话等,有必要升级生产环境的jdk到jdk8甚至9吗?如果有,有最佳实践的案例吗?

--- 共有 3 条评论 ---
Qiurf 回复 @疯狂软件李刚 : 是打算升级来着呢,不过得有任务开发计划时间,还得研究下方案,以及模块是有必要基于jdk8的api重写等,目前的话也是缺少一个最佳实践的案例说服我的上级干这件事了,毕竟老板看重的只有利益关系。 7个月前 回复
疯狂软件李刚当然,如果你只是打算干短时间就跳槽的,可以不用折腾了。但如果你打算在这里还要干2年以上的,建议你还是升级吧,因此Java不会停留在Java 9,Java还会继续升级,你的项目总要升级的——所以只是迟早的问题。 8个月前 回复
疯狂软件李刚建议还是升级吧,因为你最终还是要升级的。 8个月前 回复

@疯狂软件李刚  靠Java入行,现在已经7年,开始用的是jdk6,随着接触的语言越来越多,就越来越觉得java语言冗长,直到jdk8的发布,新特性让我非常兴奋,直接在当时的公司推动jdk8的落地,后来遇见了kotlin,呵呵,瞬间入坑,而jdk9的发布基本上没有什么吸引我的地方,而jdk10,jdk11,我都不敢去想。java生态当然不用说,非常强大,但是这门语言本身的发展,我感觉看不到什么未来,这也是kotlin让我瞬间入坑的原因,您认为呢

--- 共有 3 条评论 ---
愚_者 回复 @疯狂软件李刚 : 那是否可以这么理解,java之所以不会被替代,是因为其生态,以及各种公司系统的历史原因,而不是因为java本身有多好。比如说,现在要启动一个新项目,没有历史包袱,开发语言比如可以选用kotlin(当然也可以用其他JVM语言),这样,java生态圈的东西基本都可以用,那么,这种情况下,是不是java就不再是最佳选择了? 8个月前 回复
疯狂软件李刚另外一点就是:我看好Java,与我个人利益无关。像我们这种程度的程序员,切换任何编程语言,基本就是1~2天的事情。我看好Java,完全是客观评价。就像C/C++,一直都有很多问题,一直都在传说被淘汰,但永远不可能。 8个月前 回复
疯狂软件李刚客观地说,我依然非常看好Java的未来。 可能会有SB说,因为我是搞Java的,所以我才看好Java的未来。其实这些SB不知道,我用得熟的编程语言有十几种,光写书介绍过的编程语言也有快10种了,就像你说的Kotlin,我同样非常熟悉。但我还是想说,Kotlin想取代Java,几乎没可能。 8个月前 回复

@疯狂软件李刚 Java语言本身还会有大的跨越么?是否会更重分融合更多的思想?

感觉Java本身已经快成为地基了,反而基于地基的整个生态发展起来了,生态发展起来后又制约了Java语言本身的发展。有一些有趣的东西加进来又违反了Java的思想。

新的Java版本试图拥抱这些思想但感觉实际应用又缺乏效果,这些情况在Java8-Java10都出现了。函数式编程:lambda,应用面广度不够;推广力度也不够。模块化:新的模块化无版本处理,感觉对目前maven-jar的冲击太小。

--- 共有 1 条评论 ---
疯狂软件李刚Java本身是纯面向对象的,所以Lambda表达式可能不如那些本身支持函数式编程的语言便捷。不过Java的Lambada表达式应用面其实很广。 8个月前 回复
顶部