那些被 Java 复杂性吓退的开发者们

那些被 Java 复杂性吓退的开发者们

【CSDN编者按】
理,一起来了解下大家“讨厌”Java的理由吧。
原文地址:
本文由CSDN翻译,转载需注明来源出处。
译者|章雨铭责编|屠敏
出品|CSDN(ID:CSDNnews)
以下为译文:
我担任过架构师、技术负责人以及高级开发工程师,在我的职业生涯中,Java是我主要使用的编程语言。近年来,我也有时会使用Go、Node.js和.Net技术。我发现Java,尤其是SpringBoot,是建立企业级应用最常用的平台。
在一些有关编程语言选择的讨论中,我注意到有些人不喜欢Java。在一些社交媒体上,我看到很多对于Java复杂性的调侃。虽然我很享受其中的幽默感,但是这么多人都认为Java很复杂,我很好奇其中的原因。这也导致一些刚刚开始工作,甚至根本没有接触过Java的人也强烈抵触Java,认为Java很复杂。
如果一些有经验的开发人员认为Java很复杂,那么他们大概率是在2004受到过Java的“伤害”,反而也能够理解他们了。当时很多人在使用JSF1.x(JavaServerFaces)时肯定都发过誓,说有生之年再也不碰JSF项目。即使JSF2已经改进了许多,仍然有一些人不愿意再次尝试JSF。我想Java对于一些人来说也是这样。
所以,不能够排除有的人因为过去糟糕的经历,而认为Java很复杂。也许有的问题,我们并没有重视,因为我们已经习惯了,所以不再把它们看作是问题,但对有些人而言,并非如此。另外,可能有更好的编程语言或者平台,但我们没有意识到,这也导致了每个人对于Java的看法不一。当然,业界不同的意见很重要的,适当地听取一些别人的意见,也便于我们在下一个项目中选择合适的技术栈且做出更好的决定。
基于这一点,我在Twitter上提出了这个问题:
看到这么多人认为Java比其他语言复杂,我感到很惊讶。因为我主要使用Java工作,近年来我也使用过Go和Node.js,我认为Java没那么复杂,而且更具有生产力。
有什么具体的观点可以说明为什么你认为Java很复杂吗?
-Siva(@sivalabs)2022年4月1日
很多人都给予了我回复,包括一些新手、专家和一些行业传奇人物。
有趣的是,在对Java提出批评的同时,也有很多人对Java平台表示赞赏。
我把这些评论归类,并加上了我自己的看法。
Java糟糕的入门体验
作为一个拥有超过15年Java开发经验的开发者,我对Java生态系统了如指掌。所以我知道我可以安装哪种JDK、如何去管理多个JDK版本、有哪些IDE、构建工具、常用库等等。
但是对于刚开始接触Java的新手而言,他们更多的是这样来入门的:
https://www.oracle.com/java/technologies/downloads/
我不确定OracleJDK是免费使用的还是需要付费的商业版本,就自身而言,我想使用免费并且开源的版本。
经过进一步搜索,我了解到OracleJDK有一些免费的替代品,如OpenJDK、AdoptOpenJDK、AmazonCorreto、MicrosoftOpenJDK、Zulu、Temurin。但我不知道它们之间有什么区别,于是我随便选择了一个(OpenJDK)。
安装了OpenJDK,设置了JAVA_HOME,并将JAVA_HOME/bin添加到PATH中,我就可以开始使用了。
打开VS代码,创建了一个.java文件,复制粘贴HelloWorld程序,然后做了javacHelloWorld.javanadjavaHelloWorld
准备写一个测试。谷歌建议我使用JUnit。
如何使用JUnit库?再次在谷歌上搜索,大多数文章都显示将JUnit与Maven或Gradle一起使用。
什么是Maven/Gradle?好吧,它们是构建工具。于是我又安装了Maven/Gradle,搞定…
如何创建一个Maven/Gradle项目?大多数教程都展示了使用Eclipse或IntelliJIDEA创建项目。所以现在我需要安装一个IDE。
从IDE创建Maven/Gradle项目后,我发现为了构建HelloWorld项目,我已经使用了一半的流量……好吧,没关系,我的流量充足。
虽然这个过程看起来没那么容易,但是也没那么可怕。而且,很多任务都是一次性设置的。但是,无形之中也给入门级小白一种印象:Java需要复杂的设置,没有繁琐的IDE设置就无法使用Java。
而JavaScript或者Node.js开发者的”入门经验”是这样的:
根据你的操作系统安装Node.js
进行构建
Node.js有一个内置的默认打包管理器npm,这是一种管理第三方依赖关系的方法。如果对npm不满意,我可以使用yarn或pnpm,但我有工具链来执行开箱即用的普通任务。
与Java相比,这确实很容易上手。
Java专家是怎么做的?
对于Java技术专家而言,他们会采取非常简单的方法,譬如使用SDKMAN。
虽然大多数的Java开发者都使用功能全面且强大的IDE,如IntellijIDEA、Eclipse或NetBeans,但你也可以用VSCode来开发Java程序。
核心标准库不够用
通过调研,我们还发现了以下一些问题:
一个常见的问题是Java的核心标准库不够用,许多任务需要一些外部库,这也是事实。
没有内置的测试库、JSON(取消)编组支持,等等。
虽然JavaNIO是一个很大的进步,但与其他语言相比,Java中的文件I/O仍然是复杂而冗长的。
没有内置的(类似Kotlin)对不可变数据结构的支持。
我的观点
Java有很好的标准库,如Collections、Streams、JavaNIO等。
使用文件I/O、JDBC等仍然感觉非常低级和冗长。
有很好的第三方库,如commons-lang、commons-io、Jackson、Gson、Vavr、EclipseCollections来执行这些任务。
在我看来,添加第三方库并不是一个大问题。
挑战在于,当有太多的选择时,新手们会感到困惑,不知道该选哪一个。
最啰嗦的语言Java
Java是最啰嗦的语言,这是对Java最常见的评论。
(这只是表明你还没有使用过Go语言)
我的观点
人们讨厌setters、getters等,但我不认为这有什么不好。因为可以用Lombok和Records来避免编写模板。通过使用正确的库,可以编写出不那么冗长的Java代码。
事实上,我认为Java在冗长和简洁之间取得了适当的平衡。通常,基于Java的企业应用程序会被维护很多年,而被认为冗长的东西实际上会帮助人们理解它。
其中一个回答说明了一切。
任何时候,我都会选择传统的Java而不是传统的Node.js。
复杂的”企业级”产品
另一个常见的话题是关于复杂的企业级产品,如ClassLoaders、JNDI、OSGI、JMX、Reflection、AOP、ByteWeaving、DynamicProxies、应用服务器等。
我的观点
十年前,我在EJB2中使用EAR打包,我知道处理ClassLoader的问题是多么令人沮丧。另外,
我在JBoss/WildFly等应用服务器中部署Spring应用时,也有处理类加载器问题的经验。
幸运的是,在过去的7、8年里,我没有再使用EJB、OSGI、JMX、应用服务器。在现代的Java世界中,应用程序被构建成fatjars,而框架则负责做AOP、ByteWeaving、动态代理等。
除非你还在开发传统的应用程序,否则我认为你不会用现代Java技术栈来处理这些问题。
库作者处理的问题越来越复杂
与典型的商业应用开发者相比,高级用户、库作者要处理的复杂性达到了全新的高度。
一些高级用户提到关于Java的挑战是:
类的加载
类型擦除
功能性接口的异常语义
反射
原理
空值
默认可变性
多线程
通用平等
因为我没有建立过任何复杂的库,所以我没有太多的话语权。
除此以外,还有一些问题。
微服务的高内存占用率
Streamingarch分层在一个老化的生态系统上,其后果不甚明了
太多的抽象性
虽然现代框架使专业开发者很容易构建应用程序,但对于新手来说却变得很困难。大多数的框架都是非常抽象的。当他们试图多了解一些东西的时候,就像剥洋葱一样,发现需要了解的东西无穷无尽。
非本地的FP支持
虽然从Java8开始,Java增加了一些函数式编程支持,但Java绝对不是作为函数式编程语言设计的核心。有些人提到他们可以用FP构建软件,比用OOP好用得多。你也可以在Java中应用一些FP的概念,如纯函数、不变性,但不会像Clojure或Haskell等FP语言那样自然。
其他原因
使用旧版应用程序的几率更高
糟糕的面试经历
“x语言很复杂”不可信
我之所以问”为什么你认为Java很复杂?”是为了了解别人的观点。虽然我不同意一些观点,而且有些事情对我来说不是什么大问题,但这有助于我理解其他人的想法。
在我看来,任何语言、框架和库都是为了解决一个主要问题而创建的,在这个过程中,它可能也会有一些非主要的功能。Java被设计成面向对象的语言,如果你想让它成为一种功能编程语言,它就没有Clojure或Haskell那么好。每种编程语言都有它的利基领域,比如Python用于机器学习,Go和Rust用于系统编程,Java和Node.js用于企业应用开发等等。
Java的优势在于建立大型企业应用程序,而不是在控制台中打印”HelloWorld”!!!。Java生态系统的发展是为了满足企业的需求,并提高开发人员的生产力。
在一个典型的企业商业应用中,你需要通过与其他几个外部系统的集成来构建复杂的业务流程,以及与关系型数据库、NoSQL数据库、消息传递系统、缓存提供商、云服务等进行交互。
是的,你需要学习和了解大量的东西,才能有效利用这种快速应用开发平台。这是为了实现这种生产力可能需要付出的代价。
不要因为互联网上有”语言X很复杂”的调侃就简单地抛弃任何编程语言或者平台。不要因为听信别人根据他们2004年的经验说”X语言很复杂”,就一直重复这个说法。自己试试吧,你可能喜欢,也可能不喜欢。值得一看的是,这些旧的东西是否仍然糟糕,又或者经过这些年,它们已经有了很大的改进。
END
《新程序员001-004》全面上市,对话世界级大师,报道中国IT行业创新创造
成就一亿技术人

主题测试文章,只做测试使用。发布者:最新稳定辅助网,转转请注明出处:https://www.744broad.com/13104.html

(0)
上一篇 2023年3月3日 上午11:19
下一篇 2023年3月3日 上午11:31

相关推荐

  • 精品推荐—民国稀有钱币

    精品推荐—民国稀有钱币 孙中山(1866年11月12日-1925年3月12日),名文,字载之,号日新,又号逸仙,又名帝象,化名中山樵,伟大的民族英雄、伟大的爱国主义者、中国民主革命的伟大先驱,中华民国和中国国民党的缔造者,三民主义的倡导者,创立了《五权宪法》。他首举彻底反帝反封建的旗帜,“起共和而终两千年封建帝制”。是伟大的民族英雄、伟大的爱国主义者。民国双…

    RUST资讯 2023年2月28日
    40
  • 常用的八个cmd网络命令,你会熟练应用吗?

    常用的八个cmd网络命令,你会熟练应用吗? ​常用的八个cmd网络命令,你会熟练应用吗?它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数…

    RUST资讯 2023年2月23日
    90
  • 精品推荐—淳祐通宝,民国十五年二百文

    精品推荐—淳祐通宝,民国十五年二百文 淳祐通宝,中国古代钱币之一。南宋理宗皇帝赵昀,淳祐元年(公元1241)铸造。“淳祐通宝”有小平,折二,两种铜钱。背文有“元”至“十二”。“淳祐通宝”有小平,折二,折三,折五,当十铜铁钱。存世极少,价格颇高。另有篆书者大多为伪品。另铸有“淳祐元宝”钱。藏品介绍中文名称:淳祐通宝当百铜币英文名称:ChunyouTongBao…

    RUST资讯 2023年2月28日
    40
  • 疯狂动物城 重点词汇 高频词整理 GRE托福四六级词汇整理

    疯狂动物城 重点词汇 高频词整理 GRE托福四六级词汇整理 《疯狂动物城》系列台词去除2000基础词汇之后,GRE词汇共174个,托福词汇共242个,英语专四词汇共221个,专八词汇共56个,六级词汇共164个,四级词汇共260个。是学习英语背单词不可多得的好材料。predator/’predt/GRETOF,[33次],n.食肉动物,掠夺者.[…

    RUST资讯 2023年2月25日
    40
  • 外媒预测这12部电影可能入围2019奥斯卡|国际

    外媒预测这12部电影可能入围2019奥斯卡|国际 译|如今编辑|万晓茜随着福克斯探照灯公司的《水形物语》获得最佳影片奖,2018年的奥斯卡颁奖典礼不久前落幕。虽然2019年的奥斯卡比赛可能感觉遥不可及,但最近圣丹斯电影节和柏林电影节已经开始对潜在竞争者进行观察,并且已经开始讨论哪些影片的发布可能对明年的奥斯卡颁奖季产生影响。外媒筛选出了12部早期候选影片:《…

  • GTA 6 源代码泄漏;拦截广告被优酷起诉判赔20万;Win 11首个大更新

    GTA 6 源代码泄漏;拦截广告被优酷起诉判赔20万;Win 11首个大更新 近日,优酷起诉星愿浏览器的二审判决已出,星愿浏览器公司需要赔偿优酷20万元(不包括其他费用)。2020年4月13日,优酷因拦截视频广告问题起诉星愿浏览器不正当竞争,并索赔50万元。据星愿浏览器创始人透露,优酷主要起诉了星愿浏览器一个回帖和一个BUG。其中,“一个回帖”是指星愿浏览器…

    RUST资讯 2023年2月18日
    100
  • 马厩改造成剧院,并获设计大奖,这才是最好的扩建

    马厩改造成剧院,并获设计大奖,这才是最好的扩建 本文转自:一起设计微信公众号ID:together-design剧院设计大家想象中的剧院是什么样呢?起码也得拥有气派的大楼梯、巨大的门厅和灯光璀璨的内部装饰吧。比如下面这样▽或是这样▽而今天要为大家介绍的NevillHoltOpera(以下简称NHO)剧院,大概是所见过的最朴实、紧凑的了,内部面积只有816平方…

  • 摇滚乐队的圣诞歌曲-Type O Negative

    摇滚乐队的圣诞歌曲-Type O Negative 本文介绍一些来自摇滚乐队的圣诞歌曲,看一看不同的摇滚乐队对圣诞节是如何进行歌颂的。(歌单来自网络https://www.rollingstone.com/music/music-lists/christmas-songs-heavy-metal-unsilent-unholy-nights-10993/ac…

  • 精品推荐—清代光绪元宝,民国开国币

    精品推荐—清代光绪元宝,民国开国币 光绪元宝是清朝光绪年间流通的货币之一。由湖北两广总督张之洞率先引进英国铸币机器铸造银元和铜元,之后各省纷纷仿效。共有十九个省局铸造,除中央户部,地方省所铸铜元,皆在其正面上缘镌写省名。计有:1户部;2北洋;12湖北;7江南;15河南;11湖南;14江西;9山东;8广东;5清江;6浙江;13四川;10福建;17安徽;3吉林;…

    RUST资讯 2023年2月28日
    30
  • Solana基础设施协议Cardinal完成440万美元种子轮融资

    Solana基础设施协议Cardinal完成440万美元种子轮融资 基于Solana的基础设施协议Cardinal近日宣布完成440万美元种子轮融资,本轮融资由Protagonist和SolanaVentures共同领投,AnimocaBrands、AlamedaResearch、DelphiDigital和CMSHoldings等参投。新资金将用于工程和业…

    RUST资讯 2023年2月21日
    90
关注微信