一位Javascript程序员认为Java被严重低估 - jackson

21-04-27 banq

Java仍然主导着企业,并运行着一些世界上最大的关键任务应用程序,我花了很多时间在于没有经验的程序员接触上。没有经验的程序员喜欢做什么?他们对诸如编程语言这样的工具感到兴奋和固执。我遇到的CS本科生都无知得没有谈论Java,我认为不应如此。

年轻/天真的开发人员(包括我本人)经常陷入迷恋新语言和新工具的陷阱,以牺牲生产力和理智为代价。

我对JS生态系统有着非理性的亲和力,因为这是新事物。它有炒作。现实没有达到我的期望。今天,随着我在Java方面的经验,我现在正在享受JavaScript带来的美好希望。Java有趣,编写高效,但是在新开发人员中却以恐龙的印象获得了不公平的声誉。

 

人机工程学是使Java出色的原因

这一点不可低估:Java编写起来感觉很好。这很大程度上归功于JetBrains在IntelliJ IDEA中的精湛工艺。一切都是自动完成的,跳转到定义的速度很快,查找使用效果很好,并且重构很容易。但是,Java真正出类拔萃的是第三方库的开发人员经验。

 

依赖繁重的工作和行业趋势

我的经验是有限的,但是我觉得风向倾向于自由使用外部依赖项。我认为当前JS中对第三方依赖关系的亲和力并不是特别有害的事情,但是上游API的更改可能会对未类型化的JS / Python代码库造成严重破坏。

使用Java使用第三方库时,您始终确切知道需要将哪些类型传递给方法。最重要的是,错误使用函数会导致编辑器中出现红色弯曲。考虑到大量的库使用情况,我认为更多的人应该对Java感到兴奋。

 

节省打字时间

动态/duck/weak/无论什么类型的输入都有许多缺点,您的应用程序将在运行时失败,注意不是在构建时失败,这将成为问题。当开发人员必须参考方法的实现来确定要传递哪种类型的方法时,这是在浪费时间。TypeScript和Python类型提示可以解决此问题,但是它们缺乏在运行时验证传递的类型而没有额外代码的能力。

类型防护是我最不喜欢的TypeScript功能。从本质上讲,它们是duck的,您必须自己实施,并相信它们已正确实施。我认为这是两全其美。考虑以下:

interface Dog {
    bark: () => void;
}

/* The developer has to manually implement
a heuristic check for interface adherence!
When they update the interface, they have
to update the type guards too! */
function isDog(pet: object): pet is Dog {
  return (pet as Dog).bark !== undefined;
}
const dog: any = {bark: () => console.log('woof')};

if (isDog(dog)) {
    // TS now knows that objects within this if statement are always type Dog
    // This is because the type guard isDog narrowed down the type to Dog
    dog.bark();
}

关于声明一个类型并且必须为该类型编写验证逻辑的事情确实使我误入歧途。上面的代码闻起来好像有人在使用错误的工具。

与TypeScript定义不同,Java的标称类型系统通过使类型定义明确化并在默认情况下保证类型保护,从而减轻了程序员的负担。

 

去除优化的责任

Java开发人员可以放心地相信JVM可以做到最好。无论是实现多线程应用程序还是将大量数据存储在堆上,他们都可以确信自己不会因内存管理或数据争用而步履维艰。与步枪时代的C ++相比,此优势主要体现出来。

这是Java人体工程学经验的一部分。当开发人员不必担心技术方面的问题时,他们可以将精力更多地放在手头的问题上。

 

生产力圣杯

您认为符合以下条件的语言有几种?

  1. 质量包管理器和构建系统
  2. 标称类型
  3. 大型社区
  4. 动手优化

我认为唯一合格的工具是Java,但请告诉我是否还有其他工具!

更正:正如Jwosty指出的那样, Microsoft的Java竞争对手C#具有所有这些特征以及更多/更新的语言功能。我从未在Unity游戏引擎之外使用过C#,但我将对其进行研究。

 

令人惊讶的是大学课程没有其课程

我目前就读于科罗拉多大学博尔德分校。这是一所很棒的学校,但我们当然不以CS闻名。但是,我们的大部分高级计算机科学课程都是师从CMU或Stanford,包括作业以及所有内容中无耻地从他那里偷来的。在CU期间,我使用以下编程语言:

  1. C ++。在所有必修的核心课程中都选择了该语言:计算机系统,操作系统,数据结构等。该语言是一种合理的选择,因为它可以直接进行内存管理,创建内核模块,并带来许多挑战和学习机会。
  2. Python和Julia。如您所料,这些语言是数值计算和离散数学教授的宠儿。
  3. Scala,该语言在“编程语言原理”教学中使用,主要是因为其功能编程和模式匹配功能。尽管Scala使用JVM并与Java互操作,但它具有与Java不同的开发人员体验。
  4. 网络语言(HTML / CSS / JS)。这些仅在称为“软件开发方法和工具”的一门课程中使用,该课程侧重于行业趋势。

我本学期即将毕业,Java并没有露面; 我认为这很遗憾。

 

结论

没有一种真正的方式来构建应用程序,但是我认为Java没有得到足够的重视,尤其是在初创公司和新手编程社区中。无类型语言是有用的工具,但我认为它们不是构建大型应用程序的默认选择。如果您是一个全栈开发人员并且从未广泛使用过Java,那么我想如果您在下一个项目中尝试使用它,您会感到惊喜。

Java和JVM在90年代和2000年代初被炒得沸沸扬扬,但我不认为它应该消失了!我在IntelliJ和Java中发现的开发人员经验值得兴奋。

 

黑客新闻网友讨论

对于我的用例,Java有所有错误的折衷方案:

  • -不够高,无法与Python / Ruby / JS / PHP等竞争
  • -等级不足以与Rust / D / Nim / Zig竞争
  • -不够专业,无法与Erlang / R / Go / Julia竞争
  • -没有足够的自信心与Lisp / Haskell竞争

那么为什么要使用Java?它很好,速度快,生产率高,经过数十年的开发,并且得到了众多开发人员的良好支持,战斗测试和记录。许多公司已经在使用它,并且工具非常出色。但这还不足以成为我选择它的理由。Python比Java古老,受到了良好的支持,经过了战斗测试,并由大量开发人员记录在案。但是对于高级内容,数据处理,脚本编写,粘合以及大多数Web开发人员而言,它是更好的方法。如果我想要一个分布式系统或具有很多I / O的东西,那么Erlang和Go总是比Java更好。当然,它们不那么普遍,它包含了所有的含义,但是出于如此好的需求,我将付出高昂的代价:我的目标是针对用例进行优化。对于需要快速运行或占用空间少的东西也是如此,如果可以使用Rust,我就不会使用Java。因此,Java并不是一个不错的选择。这是一项出色的技术。我只是没有用例需求。我就是玩儿

 

开始增长的Python项目有一种变得难以管理的趋势,这是我在Java中从未见过的。

 

我被迫在工作中使用Python,因为数据科学家需要它,而且我可以连续至少24小时对您的“数据有益”语言感到满意。Python在任何方面都不是很出色,但是在某些特定的地方却很糟糕。当多进程是并行计算的首选方式时,Python核心库就被IPC淘汰了!

 

Java如此成功地竞争的原因是它是高级的,却提供了性能,可维护性和可观察性(包括始终启用,低开销的深度剖析)几乎无与伦比的组合。您提到的所有替代方案都没有。这就是为什么它仍然是亚马逊,苹果,Netflix,谷歌,阿里巴巴,优步,Soundclous和几乎所有财富500强公司的首选。

 

我同意从经理责任的角度来看Java是低风险的:长期以来没有人因为选择它而被解雇。现在,从项目成功的角度来看,我认为不是。我已经看到很多Java项目都失败了,经过了精心设计,充满了意大利面条式的代码,充满了难以理解的抽象之谜,陷入了设计不良的体系结构的胶水之中,这种体系结构已经被类型系统僵化了。从项目风险的角度来看,这是一种相当普通的语言,它有优点也有缺点,但它们相互平衡。

 

 

2
猜你喜欢