Java与Python:哪一个最适合您? [信息图]

通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控。 参加AppDynamics APM导览!

在软件开发中,很少有问题比选择编程语言更具分裂性或部落性。 软件开发人员经常以自己选择的工具来强烈地认同自己,将客观事实与主观偏好自由地混合在一起。

但是,在过去的十年中,生产中使用的语言数量以及单个开发人员可能会每天使用的语言数量都出现了爆炸式增长。 这意味着语言联系有时会在不同的代码库,框架和平台之间更加宽松和广泛地分布。 现代项目和现代开发人员越来越多,可以使用比以往更多的语言和库。 明智的选择仍然可以发挥作用。

从繁华的编程语言市场中,让我们将关注范围缩小到1990年代两个起源不同的幸存者:Java和Python。

Python的故事

Python是这两种语言中的较老版本,由其发明者Guido van Rossum于1991年首次发布。 自成立以来一直是开源的。 Python软件基金会负责管理语言及其库的设计和标准化。 Python增强建议 (PEP)流程指导其开发。

在编程语言演进中,通常无限期地保持向后兼容性。 Python并非如此。 Python 2于2000年问世,Python 3于2008年问世。它们在很大程度上兼容,但是在功能和语法破坏方面的差异足以将它们视为不同的语言。 Python 3并不是将更新的趋势和思想改编到Python 2中(使语言复杂化和折衷),而是被认为是一种从Python 2的经验中学到的新语言。 Python 3(在撰写本文时为3.6版)是Python世界中当前发展和强调的地方。 Python 2的开发单独继续进行,但最终版本是2.7版,该版本将在2020年之后不再保留。

Python的语法体现了可读性的哲学,其简单且规则的样式鼓励简洁和一致的代码布局。 它起源于脚本语言,体现了Unix的哲学,即能够从旧开始编写新程序以及直接使用现有代码。 Python的动态类型系统帮助实现了这种简单性和可组合性。 它是许多平台上可用的一种解释语言,使其成为常规开发的可移植选项。

Python的参考实现是用C编写的,称为CPython,可在许多平台上使用,并且是最常用的。 其他小组也创建了自己的实现,例如IronPython ,它是用C#编写的,并且与.NET运行时紧密集成。

Python是围绕可扩展对象模型构建的通用语言。 它的面向对象的核心并不一定意味着面向对象是开发人员在Python编程时使用的最常见的样式。 它支持过程编程,模块化编程以及功能编程的某些方面。

这种语言的名称来自英国超现实主义喜剧组织Monty Python,并且在其文档和库中也发现了不少幽默。

Java的故事

尽管Java直到1995年才发布,但Java的故事始于1991年。Sun Microsystems的James Gosling和其他人构思了一种用于对交互式电视系统进行编程的语言。 它的发布是一种可移植的互联网语言,尤其是在浏览器中。 距起点和原始名称:Oak到现在还有很长的路要走。

就像当时对于原始电视目标市场而言过于沉重一样,它失去了浏览器空间给动态HTML和JavaScript(尽管它的名字与语言无关)。 但是, Java很快在服务器和教室中找到了自己的位置,从而帮助确保了它在千年之交时成为主流语言的地位。

它的吸引力和价值的一部分是它的便携性和相对效率。 尽管不是诸如C和C ++之类的本地语言,但Java是一种编译语言。 与纯解释语言(例如Python和Perl)相比,其执行模型更加以机器为中心。 Java不仅仅是一种语言和库:它还是一个虚拟机,因此也是一个生态系统。 Java虚拟机(JVM)是​​用于运行Java代码的理想且可移植的平台。 Java的承诺是编写一次即可在任何地方运行 (WORA) ,而不必担心硬件的特殊性和必须将代码移植到新平台上。 这样一来,只要存在JVM,编译到其字节码中的任何内容都可以运行,并且可以轻松地与为JVM编写的其他任何内容进行交互。 JVM语言有很多,包括更像脚本的Groovy ,功能Clojure ,对象功能混合Scala ,甚至是Python变体Jython 。

Java是一种面向对象的语言,具有许多程序员都熟悉的类似于C / C ++的语法。 它是动态链接的,允许下载和运行新代码,但不能动态键入。 作为一种语言,Java的发展相对较慢,直到最近才合并了支持功能编程的功能。 另一方面,语言和VM的理念都是将向后兼容性视为主要指令。

在Oracle收购Sun之后,该语言及其编译器最终实现了开源。 该语言的发展受到Java Community Process (JCP)的指导,其中包括Oracle以外的公司和个人。

那么这两种语言如何叠加? 让我们按类别细分。

速度

尽管在软件中性能并不总是问题,但应始终将其作为考虑因素。 在网络I / O成本或数据库访问占主导地位的情况下,就整体效率而言,语言的特定效率不如技术选择和设计的其他方面重要。

尽管Java和Python都不特别适合于高性能计算,但是当性能很重要时,Java在平台和设计上都有优势。 尽管对某些Python实现(例如PyPy )进行了性能微调,但原始可移植性能并不是Python的亮点。

Java的许多效率都来自优化到虚拟机的执行。 JVM可以在程序执行时将字节码转换为本地机器代码。 这种即时(JIT)编译是Java的性能通常可以与本地语言相媲美的原因。 依赖JIT是一个合理可移植的假设,因为默认的Oracle JVM HotSpot提供了它。

Java从其第一个公共版本开始就对并发提供支持,而Python绝对是一种顺序语言。 这意味着要利用当前的多核处理器趋势,而Java代码更容易做到这一点。 Python的主要实现方式CPython中的全局解释器锁 (GIL)阻碍了这种扩展。 存在不受命中限制的Python实现,但是依赖它们可能会干扰支持Python代码的某些可移植性假设。

遗产

ss

语言选择通常与语言本身的设计和内在品质无关。 存在用于创建代码的语言,并且该代码具有业务,经济学,历史,软件体系结构,技能和开发文化的上下文。

传统系统在其现有技术方面存在惯性。 变更将更容易遵循已经设定的路径,而不是通过重写和革命来逐步地,逐步地转移。 例如,与重写相比,现有的Python 2代码库更有可能在Python 3中找到新的生命周期。 现有Java企业项目的后端可能会通过添加更多Java代码来扩展其功能,可能会迁移到该语言的最新版本,或者通过在其他JVM语言(例如Scala和Groovy)中添加新功能。

Java在企业中的历史及其较为冗长的编码风格意味着Java遗留系统通常比Python遗留系统更大且数量更多。 另一方面,组织可能惊讶地发现将IT基础架构结合在一起的脚本和粘合代码由Python组成。 两种语言都有遗留问题,但通常呈现不同的问题。

实践敏捷

开发文化和趋势已经使Java和Python受益。 通过使用Java作为通用语言的出版物和专注于Java工作的工具,人们经常看到Java与敏捷开发及其社区有着更紧密的联系。 但是没有一个社区是静态的,因此很难定义。 Python一直存在于敏捷领域中,并且由于许多原因(包括DevOps运动的兴起)而变得越来越流行。

Java比Python拥有更一致的重构支持,一方面是由于它的静态类型系统使自动重构更加可预测和可靠,另一方面是因为IDE在Java开发中的普及(例如,IntelliJ,Eclipse和NetBeans)。 Python的更具动态性的类型系统鼓励代码的另一种敏捷性,着重于简洁性,流动性和实验性,而Java可能被视为更严格的选择。 但是,相同类型的系统可能会成为Python自动重构的障碍。 Python的文化偏向于广泛的编辑器,而不是基于IDE,这意味着人们对强大的自动重构支持的期望越来越低。

JUnit的早期流行及其与测试驱动开发(TDD)的联系意味着,在所有语言中,Java可能对任何语言的单元测试都拥有最一致的开发人员热情。 在IDE中自动包含JUnit起到了很大的作用。

也就是说,Python起源于脚本编写并将测试功能包含在其标准库中,这意味着Python对现代开发中对自动测试的强调并不陌生,尽管它更可能是集成而不是单元测试。

人力资源

有时,语言选择更多是关于技能的应用,而不是软件应用程序本身。 人员配备可能比语言设计和工具更重要。 如果该工作的理想语言是没有人具有技能,也没有人想要技能,那么这可能毕竟不是该工作的理想语言。 另一方面,如果开发人员热衷于接受一项新技术,那么在其他所有条件都相同的情况下,这可能是使用该技术的足够充分的理由。 在Java世界中,通常可以通过拥抱另一种JVM语言(例如使用Groovy或Clojure进行自动化测试)或完全走出Java领域(例如使用Python来处理Java的操作方面)来使遗留Java代码库的优点变甜。系统。

人员配备问题的另一方面是技能市场。 Java和Python都是TIOBE Index编程语言受欢迎度排名前10位的清单。 Java一直比Python流行得多,但是Python经历了两种语言的更大发展,在Perl和Ruby下降的地方有所回升。

遵循对个人选择和就业兴趣都产生最大影响的想法就是您所知道的,这两种语言在教育中都有很强的立足点,Java通常用于大学课程,而Python通常用于高中。 目前,IT毕业生的简历几乎都默认包含这两种语言中的一种或两种。

建筑

技能和现有软件系统以及选择会告知任何给定软件体系结构中使用的编程语言。 软件体系结构还涉及框架和库,重用和集成。 在许多情况下,人们想要利用这种技术来决定语言的选择,而不是相反。 围绕Python Web框架构想的软件体系结构对仅Java开发团队而言是遥不可及的。

Java和Python都享受着源源不断的开源库,这些源库由已经解决了常见和不常见问题并乐于共享的个人和公司的代码组成,这些人和公司乐于分享,以便其他人可以利用他们的解决方案。 实际上,两种语言都受益于在线论坛和开放源代码开发,并受其影响。

当遗留,重用,性能和开发技能的问题都考虑在内时,某些体系结构决策仍然可以使语言选择保持开放。 例如,微服务架构的兴起(将面向Internet的系统划分为小的协作过程),使得语言的选择更多地取决于局部细节,而不是整个项目的主要考虑因素。

对于现代编程领域及其软件体系结构中存在的所有多样性,一些团队和企业更愿意减少他们的某些技术选择,而不是一堆过去的决定和个人异想天开。 但是合并可以减少选择的余地,因此这并不是一个轻率的决定。 值得留意语言和框架的趋势,以免走错路。

结论

Java和Python都可以长期使用。 自1990年代以来,他们与开发社区一起不断发展和适应,找到了新的利基市场并取代了其他语言,有时甚至在同一领域竞争。 两种语言都与开放性相关联,因此公司,团队和开发人员在做出决策时最好保持开放的态度。

通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控。 参加AppDynamics APM导览!

翻译自: https://www.javacodegeeks.com/2017/06/java-vs-python-one-best-for-you.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么把php查询到的值显示到下拉框中_RazorSQL for Mac(数据库工具查询)8.5.3

razorsql mac版更新日志变化 查询结果:如果有多个查询结果选项卡,则从查询结果选项卡中选择比较查询结果选项将填充比较工具中的两个查询 漏洞修补 不需要重新启动razorsql才能生效的首选项需要重新启动 自动更新程序不适用于Windows计算机 缺少HBase连接…

docker删除es数据_木杉入门Elasticsearch(4):安装ES

木杉入门本系列的目标是在本地搭建一个Elasticsearch的服务集群,通过在阿里云服务器搭建FRP通道对外提供服务,为小规模应用提供一种高性价比的解决思路。系列内容:木杉入门Elasticsearch(1):ESXI虚拟机安装CentOS木杉入门Elastics…

将serversocket 写在按钮事件中连接不上_Java服务器的模型—TCP连接/流量优化

本文很长哦,但请给我一点时间。通常,我们的应用程序不需要并行处理成千上万的用户,也不需要在一秒钟内处理成千上万的消息。我们只需要应付数十或数百个并发连接的用户,就可以在内部应用程序或某些微服务应用程序中承受如此大的负…

ios 开发设置左滑退出_苹果铃声怎么设置自己的歌?教你用手机快速搞定!

苹果手机铃声怎么设置为自己喜欢的歌曲?由于iOS系统的封闭性,想要给苹果手机更换铃声不像在安卓手机一样那么方便,看到网上很多教程也是需要使用电脑才能完成铃声的设置,有没有不复杂的方法来直接帮我们更换手机铃声?别…

基于单片机步进电机ppt答辩_基于MCU和DSP的步进电机控制技术分析

来源 | 控制与传动步进电机已经渗透入我们生活的方方面面,本文介绍了一些重要的步进电机相关技术,为开发人员基本了解步进电机的工作原理提供了足够的信息,同时也介绍了用微控制器或数字信号处理器控制步进电机的方法。步进电机也叫步进器&am…

div获取第一个子节点jquery_【antd】Tree组件子节点不完全勾选获取父节点的值

注意⚠️:这篇文章适用于后台返回的树结构比较多的情况下,如果数据比较少的情况下,可以参考我的上一篇文章,操作起来比较简单我们在实际操作tree组件和后台交互的时候一般都是需要将父节点传过去,如图:点击…

修改value_Python | 快速修改或命名N个文件夹名称,你会吗?

#欢迎交流:shuilinggan163.com#工作中,经常会遇到需要修改或新建很多文件的文件命,是一件重复且头疼的事情,下面一组Python代码,轻松教你快速实现!程序一:根据文件(SSSSSS)新建并命名空文件夹im…

簇的局部变量中布尔类型_java基础2(变量、常量、数据类型)

一、注释(1)什么是注释?解释说明的文字(注释的内容不会被编译)(2)注释的作用①对代码的解释说明 ②便于后期维护(3)注释的分类:①单行注释 //单行注释作用域:只在当前行有…

数位进制转换详解

文章目录进制进制转换二进制和十进制互相转换十进制 → 二进制十进制正整数 → 二进制十进制负整数 → 二进制十进制负小数 → 二进制十进制小数 → 二进制二进制 → 十进制二进制负整数 → 十进制二进制的正整数 → 十进制二进制小数 → 十进制二进制的负小数 → 十进制八进制…

旋转散点图_聚类分析的结果如何用散点图展示出来?

SPSS系统聚类输出的树状图广受用户喜爱,二阶聚类也可以输出一系列美观的可视化图形用来观察聚类效果,但我们发现Kmeans均值聚类没有提供可视化程度高的图形,那怎么办,我们自己来制作。数据小兵推荐使用3D散点图全方位观察K均值聚类…

async 打包异常_重新打包流中的异常

async 打包异常Java 8已有两年历史,但是仍然存在社区尚未为其开发好的解决方案库的用例,甚至边缘用例。 如何处理流管道中的检查异常就是这样一个问题。 Stream操作接受的功能接口不允许实现抛出已检查的异常,但是我们可能要调用许多方法。 显…

补码基础

关于补码,有如下比较有趣的演化过程: 假如计算机中使用 4 位的二进制表示数据,如图-2,最多能表示 0 到 15(10 进制),之后有牛人做了 一个细微改动,如图-3,将所有二进制以 1 开头的数(大于 7 的数)放到 0 之…

身份验证错误错误指定的句柄无效_基于 Web 端的人脸识别身份验证「实践」

作者:沫沫 政采云前端团队转发链接:https://mp.weixin.qq.com/s/fRDpXixnLIy9c0Uh2tMezQ前言近些年来,随着生物识别技术的逐渐成熟,基于深度学习的人脸识别技术取得了突破性进展,准确率显著提高。现阶段,人…

打开 谷歌浏览器exe_专治各种网银不服:两步开启微软Edge浏览器IE兼容模式

此前微软已经预告过Microsoft Edge将支持IE模式,即可以在该浏览器下使用IE模式加载某些特定的需要的网站。不过在后续更新中微软又突然改口不再面向普通用户提供此功能,而企业级用户若要使用还需要管理员提前配置。现在这款浏览器的正式版已经发布&#…

aspose word 获取标题_Word干货|多级标题的自动编号怎么添加?

在对Word文档进行排版时,大家普遍认为的一个难点就是对多级标题添加自动编号,本期Word妹与大家分享相关技巧的使用。1、添加样式选中文本,点击开始——样式——选择标题1,相同的样式则可以借用F4来实现。PS:以同样方式…

Java集合类梳理

文章目录集合框架CollectionListList常用方法ArrayListArrayList常用方法LinkedListLinkedList常用方法VectorVector 常用方法StackStack 常用方法SetHashSetHashSet 常用方法LinkedHashSetLinkedHashSet 常用方法TreeSetTreeSet常用方法EnumSetEnumSet 常用方法MapHashMapHash…

增加第三方插件_AE插件排行!!

大家好是万能的懒懒酱After effects为视觉效果艺术家和动画设计师带来了大量的效果。然而,第三方开发人员提供了更多独特插件,供After Effects使用。在这里可以帮助你了解哪些插件是最流行的最受欢迎的。第10名:Looks(多功能调色插…

mysql 连续签到天数_签到功能实现,没有你想的那么复杂(一)

1 签到定义以及作用签到,指在规定的簿册上签名或写一“到”字,表示本人已经到达。在APP中使用此功能,可以增加用户粘性和活跃度.2 技术选型redis为主写入查询,mysql辅助查询. 传统签到多数都是直接采用mysql为存储DB,在大数据的情况下数据库的压力较大.查…

java包装项目_项目包装组织

java包装项目程序包是Java的基本概念,是您开始用该语言编程时偶然发现的第一件事。 作为一个初学者,您可能不太关注软件包的结构,但是随着您成为经验丰富且成熟的软件开发人员,您开始考虑可以采取哪些措施来提高其效率。 有几个主…

如何开发 Servlet 程序

文章目录如何开发 Servlet步骤 1:写一个类步骤 2:编译步骤 3:打包步骤 4:部署步骤 5:启动服务器步骤 6:访问 servletServlet 开发示例不使用 IDE 开发(手动编译和部署)步骤 1&#x…