-
本帖最后由 Jay 于 2017-10-13 10:48 编辑Java 是这个星球上最为流行的编程语言之一,但这方面的竞争正愈演愈烈。下面我们将讲述 Java 可能遭遇滑铁卢的地方,以及可以做些什么来预防它的衰退。2017 年 9 月的 TIOBE 指数将 Java 列为当月较为流行的语言。其实,它已经名列前三甲很多年了。Stack Overflow Developer Survey 2017将 Java 列为继 Javascript 和 SQL 之后第三常用的编程语言(实际上,过去四年它都保持着这名次)。不说这些结果是如何产生的,亦或者这结果是否反映了现实世界中的情况,我们不能否认的是,Java 在多个环境中仍然是一种流行语言。但是,Java 总有一天会死。世无定事,没有什么可以天长地久。编程语言死亡的真正定义是没有人再使用它——但这样的情况很难发生。即使是老朽且不被广泛使用的语言(例如,你是否听说过 Modula-3?),仍然在被使用、维护,或者至少会演变成其他的东西。当然,这是一个渐变的过程,怎么发生的方法不定。从实际出发,假设编程语言在它不再被用于新项目时,就意味着它的死亡,但是它可能依然存活在许多遗留项目上(COBOL 就是一个完美的例子)。最终这结局也将降临到 Java 头上,那么谁会杀死它?让我们来分析选项。在以《What Killed Smalltalk Could Kill Ruby Too》为主题的演讲中,Robert “Uncle Bob” Martin 说,Smalltalk 被杀的原因是,它太容易造成混乱,并且它的傲慢自大会导致不专业的实践方法,如缺乏测试驱动开发(TDD)。在任何语言中你都可以搞得一团乱。当然,在某些语言中,比其他语言更容易导致混乱——例如,在动态类型语言中,我们可以随时更改变量的类型——但是我们在 Java 中没有这个问题。此外,在 Java 社区中很多人采用的良好实践,比如设计模式和 TDD,有助于我们制作更好的软件。所以让我们来探讨另一个选项。Java 是面向对象的语言。如果其他(新的)范式接管了怎么办?如果面向对象的编程变得过时了怎么办?好吧,这可能性并不大——基本原理已经有很长一段时间没有真正改变过了。诸如结构化,功能性和面向对象编程的重大创新发生在 20 世纪 50 年代,60 年代以及甚至 70 年代,但从那以后,没有什么举足轻重的事发生。但是,在过去十年中,却有很多新的语言问世,这些语言有着现代的语法以及新功能的框架。那么,没有现代语法和新的功能是否会导致 Java 的死亡呢?不,我不这么认为。你还记得(或听说过)EJB 2.0 及其 Entity Beans 吗?它们很可怕,但是像 Rod Johnson 和 Gavin King 这些 Java 社区的成员却以 Spring 和 Hibernate 等框架回应。以类似的方式,虽然 Java 不是一个功能齐全的语言,但是由于有 Vavr 这样的库,我们可以使 Java 更加功能化。我的意思是,Java 缺少的某些东西,有人会通过创建(框架,工具,规范,无论什么)来填补这个空白。那么 Java 会不会因为另一种编程语言而死亡呢?我们以 JavaScript 为例。毕竟 JavaScript 正在占领这个世界,对吧?我们可以在后台使用 Node.js,类似于移动设备上的 React Native 或 Ionic,我们甚至不必提及在前端的所有竞争选项。但是,至少在企业软件中,我没有看到 JavaScript 将要替代 Java 的趋势。JavaScript 在企业领域中没有取得成功的框架或工具。它也没有与 Java 虚拟机(JVM)相当的东西,Java 虚拟机(JVM)依然是大型和关键任务软件的首选平台。那么 Kotlin 呢?Kotlin 语言首次出现在 2011 年,并且最近 Google 宣布在 Android 上对 Kotlin 提供一流的支持。Kotlin 正在逐渐被知名公司采用,并且不局限于在这些公司的 Android app 上(例子)。除了现代化的功能,Kotlin 也是一种开放源代码的语言,它由一家生产最佳 java ide 的公司提供支持。所以,如果你问我的话,我的回答是,是的,Kotlin 看起来像是(在遥远的未来)替代 Java 的一个很好的候选者。当然,Java 也可能被一种或多种语言所替代。哪些呢?我不确定,而且我敢说现在也没有人知道这个问题的答案。我所能确定的是,没有任何语言能够自主地杀死 Java。不借助任何外力,就此而言。能够杀死 Java 的刀子在于它无法满足市场的需求。编程语言是构建解决计算机问题的应用程序的工具。如果某编程语言提供抽象、模型、工具和框架,使你可以更有效率或创建比 Java 更高效的代码,你会选择哪种语言呢?即使是在 Java 版本之间,如果让你在 Java 1.4 和 Java 9 之间进行选择,那么你会选择 Java 1.4 吗?你会放弃用 lambdas 或泛型工作的机会吗?我不这么认为。你会需要较新版本的功能。在这些年来,由于已检查异常、内部类、getter 和 setter 等等方面,Java 被认为是一种冗长又笨拙的语言。直到 Java 7(有些人认为是 Java 8)才开始好转。然而,Java 7 于 2011 年发布,比 Java 1.4(2002 年发布)晚了九年。在这个时代,这是不能接受的,并且可能会导致恶性循环。仔细查看 TIOBE 页面上的 Java 图表。尽管 Java 大多数时候位居前三,但有明显的下降趋势,表明它正在失去市场份额。这种趋势在所有语言中都很普遍。最可能的原因是编程语言的数量在不断增加,应用程序越来越多地被以多种语言编写。因此,竞争比以往任何时候都要激烈。如果我们认为其他语言比这种语言更好,那么它就不再受欢迎,我们也不会将这种语言教给新一代的开发人员。新的教程、课程和书籍将不会再被创造。社区中的宝贵成员将被其他技术吸引走。该语言将不会用于新的环境。将导致减少语言的流行度。Mark Reinhold,Oracle Java 平台组首席架构师,提出的新的六个月发布计划,是向前推进 Java 并迈向未来的重大一步。用他的话说(就特征驱动的版本):[indent]这种方法可以在早期采用者进行彻底的检查和测试后,以高水平的质量提供大的新功能。然而,不足之处在于,较小的 API、语言和 JVM 功能只有在大功能准备就绪时才能实现。这是在本世纪之交前后几十年时间里达成的一个可接受的折中方案,当时 Java 仅与几个以类似的步伐演进的平台竞争。然而,如今,Java 在与许多以更快速度发展的平台一起竞争。[/indent]最后一段话很多都是事实。但是,这不仅仅是 Oracle 的工作。社区也必须保护 Java。怎么做?我的一些想法:[*]不要傲慢(不要认为 Java 太大而不会失败) [*]促进良好的开发实践方法 [*]继续发布超棒的框架、工具等 [*]支持 JSR [*]帮助教学和推广 Java 语言 [*]在新环境中尝试 Java否则,Java 如果无法跟上时代的步伐,那么最终将会被后浪拍死在沙滩上。-译文链接:http://www.codeceo.com/article/what-will-kill-java.html翻译作者:码农网 – 小峰
-
本帖最后由 Jay 于 2017-10-11 15:48 编辑几年前做前后端分离项目的原因,是node刚刚横空出世,业界开始考虑如何真正的用js去写后端服务,于是就借鉴阿里中途岛项目去尝试,主要还是用到了node的密集io场景下的转发。 2694我们的新项目是采用前后端分离的方式进行开发,这一点主要是基于产品特点考虑而来,产品本身会有很强的富客户端的特点。我们后端服务面向的客户端包含:iOS,Android,iPad,H5,还有一些游戏场景。所以最好的方式就是后端提供通用的restapi进行数据传输,而前端展示逻辑则交由不同客户端自己实现。前后端分离项目主要基于微服务架构开发,既然是微服务,所以分布式系统所应该面对的问题一个也漏不掉。JAVA微服务开发场景下,SpringBoot可谓神器,我们基于SpringBoot开发了一个可以快速开发的脚手架,脚手架本身包含了常用及通用的基本功能,如auth验证,功能鉴权,Mysql,Mq,Redis及通用配置的依赖,这样开发工程师在需要开发新功能时,直接从对应的代码库拉下来,编译之后便可跑起来一个hello world的restapi项目。剩下的工作就是围绕业务逻辑去写repository,service,controller代码了。通信服务之间的通信主要可以通过HTTP,RPC方式,众所周知RPC调用的效率要高HTTP好几个等级,所以推荐使用RPC,但是综合考虑系统性能及可用性,快速开发等因素,我们也大量使用HTTP进行服务调用,同时我们也通过Golang对一些核心api,比如支付,交易类接口进行了重写,所以需要在系统效率及开发效率之间做好平衡。接口规范虽然是前后端分离项目,大部分是通过restapi方式给客户端暴露数据,但是也不可避免在系统中会存在自己的view页面,所以在api及controller命名上会建立:AuthApi,AuthController,约定大于配置,可以帮助我们后端对不同的请求做隔离和控制。任务类系统项目中不可避免存在大量的任务程序,主要需要做好数据备份,考虑分布式场景下的任务调度,资源分配问题,主要根据场景不同进行开发。我们采用Zk+定时任务自研的调度系统,也可以采用开源的Elastic-Job方案。依赖梳理这个是一个项目开发过程中最重要的一点,梳理好系统上下游所依赖的服务,同时梳理好服务之间的等级关系。依赖关系主要分为两部分:依赖别人,被别人依赖;依赖别人的服务,包含其他系统API及底层的数据库,Redis,MQ等服务,需要做好对方服务不可用的准备,随时做好降级,限流及开关功能,最好做成可配置,自动化。被别人依赖的服务做成高可用,幂等性,响应数据的可读性好等特点。同时对服务依赖性梳理,哪些系统属于强依赖,哪些属于若依赖。不同依赖的标准做好开关,降级,重试等功能,强依赖比如DB挂了,可以写日志,写到MQ。弱依赖可以做成柔性降级,比如写日志到ES中,ES不可用,可以直接降级即可。对于黄金等级服务,则一定保证服务高可用,可以做灾备,比如依赖集群,多个机房,也就是这个服务是不可降级的,必须准备多套方案保证服务可用。关于依赖降级可以使用Hystrix做。用户友好性做好最坏的打算,如果后端服务全部不可用,前端转发问题等,一定不要给用户一个错误页面,一定建立多级缓存,有数据托底,无论如何保证页面上有内容的。总结综上所述,做好工具,梳理好服务依赖,对服务做等级划分,弱依赖可以通过降级,限流方式处理。强依赖则必须通过多种灾备手段保证高可用,不要给用户感到恐慌的页面,要有数据托底。来源:博客园
-
本帖最后由 DevCloud 于 2018-1-31 16:03 编辑往期直播回顾: 华为云DevCloud目前已经开展了多期直播,吸引了上万人报名参加,包含了敏捷开发、git操作,最新产品功能解读等方面,直播课程不断丰富扩展中,想学什么课,想听华为哪位大咖讲,你说了算!跟帖回复说说吧~ 【第七期:华为云专家分享架构师的基本功之管理篇[color=rgb(0,32,0)]】转眼2017即将落幕,过去的一年,你成长了吗? 从程序员到CTO,你的进击之路一帆风顺吗? 5年程序员3年架构师,你的成长之路,我们助力! 华为云软件开发云年终特别策划——【华为云大咖说】邀请到开源社知名理事,华为云软件开发云高级产品经理——庄表伟,与你共话架构师的基本功之管理篇! 作为一个架构师,技术能力当然是基本功。 但是,仅仅技术精通,是做不好架构师的。管什么:架构、质量、进度;怎么管:分析、决策、推进;管哪些人:向上管理;同僚管理;向下管理…… 12月27日(周三)庄表伟做客华为云DevCloud直播间,与你共话架构师成长之路!7155 [color=rgb(0,32,0)]-------------------------我是分割线------------------------------【第六期:@改变世界的你:1024直播颁奖盛典 用代码给自己打call![color=rgb(0,32,0)]】5366华为DevCloud classroom公测发布,人脸识别,物联网轻松学“众筹1024个不加班理由”颁奖大典 华为P10花落谁家美丽程序媛点评 创意代码赢芳心直播再抽机械键盘直播回顾: http://pan.baidu.com/s/1o8qovKA 提取密码:tuek [color=rgb(0,32,0)]-------------------------我是分割线------------------------------【第五期重磅!华为专家与你面对面交流华为Git解决方案![color=rgb(0,32,0)]】2450 大咖来了!华为专家、《Git权威指南》作者蒋鑫亲自授课, 9月28日与你相约华为云DevCloud直播间,畅聊Git秘术, 揭秘华为Git解决方案! 报名听课入口:https://m.qlchat.com/topic/840000204169950.htm?pro_cl=1直播音频+PPT下载:[hide]链接: https://pan.baidu.com/s/1skKrmED 密码: v6iz[/hide] [color=rgb(0,32,0)]-------------------------我是分割线------------------------------【第四期:让协作走出办公室 美nv程序媛带你体验DevCloud App】1344 华为云DevCloud App重磅升级 让协作走出你的办公室,你下载了吗? 9月13日(周三)萌妹子程序媛带你体验DevCLoud App 机械键盘任性送 预约关注直播间:https://www.douyu.com/3155123 或 扫描图中二维码 下载华为DevCloud App:http://developer.hwclouds.com/tools/devcloud.html-------------------------我是分割线------------------------------[color=rgb(0,32,0)]【第三期:玩转云端开发神器 如何利用CloudIDE高效开发】240直播简介IDE的前世今生——三大主流IDE对比初识云端开发神器——CloudIDE的热点功能新手篇:华为云DevCloud下CloudIDE的基本操作进阶篇:玩转CloudIDE高效开发内容回顾:面向云端和未来的软件开发新姿势资料下载视频地址:http://forum.hwclouds.com/forum.php?mod=viewthread&tid=759&extra=page%3D1PPT下载: http://pan.baidu.com/s/1o8HnIp8密码: 9xeh------------------------我是分割线------------------------------【第二期:版本管理之Git崛起——如何从SVN迁移到Git】[color=rgb(0,32,0)]239直播简介git崛起:为什么git越来越流行?SVN PK Git,开发者如何选择?以DevCloud为例,如何从SVN向Git迁移怎样提交才算是好提交?内容回顾:再不用Git你就真out了[color=rgb(0,32,0)]资料下载[color=rgb(0,32,0)]视频地址:http://forum.hwclouds.com/forum.php?mod=viewthread&tid=760&extra=page%3D1PPT下载: http://pan.baidu.com/s/1o8n13XC 密码: h7ex-------------------------我是分割线------------------------------【第一期:敏捷开发:从宣言到实践——如何用DevCloud实践Scrum】 238直播简介敏捷开发,你刚听说还是已经实践?从理念到落地,你真的掌握了吗?本次讲座为你带来:为什么要敏捷开发?敏捷开发的原则与方法Scrum精讲(3-4-3)如何用DevCloud实践Scrum内容回顾:1600人参与的敏捷开发scrum公开课,你还没get吗?资料下载视频地址:http://forum.hwclouds.com/forum.php?mod=viewthread&tid=758&extra=page%3D1PPT下载: http://pan.baidu.com/s/1skH7pSh 密码: vu1f-------------------------我是分割线------------------------------更多直播课程正在路上,跟帖回复说出你最想听的课程,最想了解华为软件开发云的内容,我们为你奉上最贴心实用的干货哦!
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签