Python与JavaScript做比较公平吗?
作者 | STX Next
译者 | 弯月
在讨论应该使用 Python 还是 JavaScript 构建项目时,一般我们都不会说只使用一种编程语言来构建所有的组件。
在现代软件开发中,如果想构建符合标准的软件,确保在截止日期前完成,或者构建一款可以处理数百万用户的应用程序,那么通常都会使用多种语言、框架、工具和 API。
因此,如果我们想比较 Python 和 JavaScript,那么就应该讨论使用这两种语言来构建软件的核心组件。
除了这个核心主题之外,我们还将在本文中讨论:
Instagram 成为世界上最大的 Python 应用程序的背后故事;
最适合 Python 和 JavaScript 的应用程序;
这两种语言可互补。
Python和JavaScript 的快速介绍
在深入探讨细节之前,首先我们来简单地回顾一下 Python 和 JavaScript 的发展经历,以及它们当前在编程世界中的独特地位。
Python发展成为最大的编程语言之一的经过
Python 问世于 1991 年,这是一种通用编程语言,因此可用于解决任何可以用代码量化和描述的问题。
近年来,Python 在科技市场的受欢迎程度大幅上升。在Django 等 Web 开发框架的推波助澜下,Python 声名大噪,此外Python在学术圈也非常流行。之后,Python 又成为了机器学习和数据处理的首选语言,这进一步增加了 Python 的人气。
CSDN付费下载自视觉中国
Python 借助 Django 等 Web 开发框架在网络开发中人气大增,虽然还比不上 JavaScript。在 2020 年的 StackOverflow 开发者调查中,JavaScript 以 67.7% 的使用率位居榜首,而 Python 的使用率为 44.1%。在框架方面,JavaScript 的库和框架 jQuery、React 和 Angular 占据前三位。Django 排在第 10 位。
如今,许多科学家和研究人员都在使用 Python,这些人精通复杂的科学知识,但技术力不是特别强,对他们来说,Python 是一种简单易学的语言。科学家们可以利用 Python 快速制作原型,因此这种语言更具吸引力。
这一切都是因为 Python 是最简单的语言之一,但这种语言入门容易,想要精通却很难。即使你不是程序员,也可以利用 Python 实现简单的自动化,比如抓取网站的数据,或者将数据从一个程序迁移到另一个程序。
此外,如果花费一番心思真正掌握 Python,就可以利用它来构建各种各样的软件。
JavaScript 成为通用编程语言的漫漫长路
JavaScript 于 1995 年首次问世。当时还没有 Web 应用,JavaScript 的目标是让 Web 成为一个真正的应用程序平台。
JavaScript 的发展并非一帆风顺。由于一些设计选择,以及糟糕的营销,JavaScript 被许多开发人员厌弃,而且由于低网速和低带宽的限制,JavaScript的能力也非常有限。另外,很长一段时间以来,跨浏览器的兼容性一直存在问题,这使得开发人员很难构建可以在所有浏览器上运行的网站。
CSDN付费下载自东方IC
多年来,JavaScript 的受欢迎程度一直在稳定增长。于 2006 年发布的 jQuery 是第一个消除跨浏览器兼容性问题的库。在 jQuery 的支持下,网站交互性的实现变得更加容易。后来又出现了一个主流框架 AngularJS,但它后来被 Angular 2+ 取代,如今该框架在企业级解决方案中仍然非常流行。
2011 年~2012 年左右,JavaScript 首次获得了所有主流浏览器的支持,包括Firefox、Chrome、Opera 和 Safari。但即使到现在,JavaScript 仍然未能获得 100% 的支持。这是因为 JavaScript 会定期添加新功能,因此浏览器开发人员必须不断努力改进对 JS 的支持。
2013 年,Facebook 工程团队发布了 React,该框架迅速流行起来,并为巩固 JavaScript 作为最受欢迎的网络技术贡献了重要力量。
当然,上述只是 JavaScript 发展历史的概要,实际上整个发展过程更加漫长,更加复杂。总的来说,JavaScript 经历了重重磨难,才有了如今的地位。
目前,新版 JavaScript 的设计正在朝着成熟通用编程语言的方向迈进。
何时使用 Python 和 JavaScript 来构建核心组件
如果核心组件或系统发生故障的时间过长,整个项目就会面临崩溃。因此,我们需要慎重地选择这部分的构建技术。
对于优先级较低的系统,你可以尝试不同的方法,找到最节省成本的方法。然而,在为构建核心组件选择编程语言时,也采用这种态度就会导致项目走向失败。
假设有一款主要用于共享照片和视频应用程序,在全球拥有超过 10 亿用户,那么处理海量内容的服务器就是该应用程序的核心组件。对于这类应用,我第一个想到的就是Instagram,这款应用号称“世界上最大的 Python 网站”。
Instagram 的一位工程师曾表示,“Instagram 的服务器完全由 Python 驱动。”Instagram 服务器的应用程序就是“一个庞大的、包含数百万行代码以及数千个 Django 端点的大型代码库”。Instagram 的每张照片、每个视频都是通过最流行的 Python Web 框架 Django 编写的。
为什么 Instagram 会选用 Python 来编写核心服务器?
Instagram 使用了大量 Facebook 数据中心的服务器。工程师不仅需要管理应用程序的外观、消息流、内容推荐算法,还需要确保服务器的 CPU 不会过热。
这是一项极其艰巨的任务。他们为什么会选择 Python 作为主要语言?
Instagram 的开发者博客公布了答案:“我们最初选择使用 Python,是因为该语言简单且实用,这与我们的理念非常吻合,即从简单的事情入手’。但简单也有一个缺点:效率低。”
简单且实用。Martin Fowler 是一位软件开发大师,拥有数十年的从业经历,还出版了多本书籍,他曾经写道:“任何傻瓜都可以编写计算机可以理解的代码。但只有优秀的程序员可以编写人类可以理解的代码。”
这意味着,虽然你的目标是确保机器不会因每天为数十亿用户提供服务而过热,但实现这一点的方式并不是学习怎样更好地编写机器代码。你必须编写方便其他开发人员理解的代码,这样他们就可以在必要时快速调试代码,或在现有代码之上构建新功能,同时还不会担心破坏现有系统。
Python 非常适合这类应用,因为该语言方便阅读、简洁且易于理解。
Instagram 使用 JavaScript 吗?
虽然 Instagram 的服务器选用了 Python,但界面部分却并非由 Python 负责。Python 负责存储和管理所有数据,但智能手机上的界面是使用原生编程语言构建的,而且还有很大一部分来自 JavaScript。
Instagram 的移动界面是使用 Swift(iOS)和 Java(Android)构建的,但流行的移动前端 JavaScript 框架 React Native 也发挥了重要作用。Instagram 工程师之所以选择该框架,是因为他们希望提高开发速度,这样就能够尽快为应用程序的 iOS 和 Android 版本添加新功能。
React Native 是不二之选,因为工程师只需编写一套代码就可以在不同的系统上发布新功能。他们可以使用 JavaScript 代码在两个系统上创建原生界面。
本来他们可以使用另一种方法,例如利用 Swift 和 Java 构建单独的界面,但他们选择了 React Native。在 React Native 的支持下,维护界面的工作不仅可以节省成本和开发时间,而且也可以减轻开发人员的负担。
Python 与 JavaScript:哪种语言的使用更多?
Instagram 代表了当前网络和移动行业的基准。许多流行的应用都采用了与之类似的结构:后端采用 Python,前端采用 JavaScript。
即使是与 Instagram 完全不同的 PayPal,也有类似的技术栈。他们曾在一个非常简单的声明中称使用了 Python 来管理数据,而且还使用 JavaScript 来创建用户界面。
这份声明被极度简单化了,因为了解一下他们所使用编程语言和工具的细节,就会被复杂性所淹没。另外,他们不像 Instagram 那样热衷于与全世界分享技术栈的细节。
还有一篇博文解释说,PayPal 的中间层基础设施(Web服务器和前端)采用了Node.js,因此这样他们就可以只使用 JavaScript 来构建网站了。
但这也不是核心组件。PayPal 的的核心组件隐藏在所有这些界面之下,其中很多是采用 Python(很可能还有其他几种语言)编写的,而且安全性、稳定性和数据管理也是由 Python 负责的。
JavaScript 不适合核心系统的构建。最初,这门语言的设计目标是为网站添加交互性,虽然如今已经发展成为一个强大的工具,但依然受到设计的限制。
另一方面,Python 的设计目标是通用编程语言,因此它的用途远远超出了 Web 开发。如今,Python 还植根于学术界。我们不仅可以利用 Python 构建网站,而且还可以利用这门编程语言来构建人工智能的神经网络。
因此,总的来说,Python 的使用比 JavaScript 更广泛。但是,在几个领域内JavaScript 是不二之选,选择 Python 就不太明智了。
JavaScript 相较于 Python 的优势
JavaScript 是移动开发领域的赢家。虽然有一些移动开发的小众框架(比如 Kivy 和 PyQT)是使用Python开发的,但几乎没有人使用。
对于 Python 开发人员来说,学习 JavaScript 并使用其最流行的移动开发框架 React Native 来构建应用程序是合理的选择。
还有一个领域 JavaScript 略胜一筹,那就是前端开发。在构建现代界面方面,JavaScript拥有一流的框架(React、Angular、Vue)。开发人员还可以借助 Node.js,构建应用程序的服务器端。此外,开发人员还可以通过 JAM 技术栈(即JavaScript + APIs + HTML),在短期内快速构建漂亮的 Web 应用。
对于预算有限,时间紧迫的中小型 Web 和移动开发团队来说,JavaScript 绝对是最佳选择。
Instagram 和 PayPal 的例子表明,Python 与 JavaScript 结合使用,可以构建出主导市场并彻底改变数十亿人生活的应用程序。
JavaScript 在性能上是否超越了 Python?
使用 JavaScript 构建的应用程序可以在 Web 上快速运行。与 Python 应用程序相比,无疑使用 Node.js 构建的 Web 应用程序的运行速度会更快。
正如 Towards Data Science 所说,“Python 的性能相对较慢,因为它只能单线处理请求,而 Node.js 可以使用多线程。”
有一些方法可以优化 Python 的性能,因为其底层使用的是 C 语言。例如,NumPy 利用经过优化的 C 代码提升了 Python 的速度。Cython 是一个编译器,是 Python 语言的超集,使用该编译器的开发人员可以构建速度更快的C模块,从而加快 Python 代码的执行。
一般来说,对于 I/O 压力较大的应用程序(比如 Facebook)来说,JavaScript 的运行速度更快,这类应用程序需要处理大量的实时数据,避免用户等待至关重要。
如果是CPU需求较大的应用程序,例如需要处理大量数据来解决特定问题的机器学习模型,则Python的速度更快。另外,需要GPU进行大量计算的应用程序,也应该选用Python。
Instagram属于I/O 密集型应用,但它的服务器使用了Python,这表明,经过合理的优化后,Python的执行速度也可以很快。
关于性能,我们还需要考虑到另一个层面:走向市场的时间。只要代码编写合理,这两种语言都可用来快速构建最小化可行产品。对于复杂的程序,使用Python可以缩短开发时间,因为该语言易于阅读和调试。此外,Python还可以促进团队协作。
而使用JavaScript构建产品则会比较复杂,虽然速度很快,但开发时间会更长。出于这个原因,如今很多公司选择了TypeScript,因为一些开发人员认为TypeScript比Python更容易阅读和维护。
机器学习领域内Python与JavaScript的使用
Python 是机器学习开发人员的首选语言。机器学习很复杂,涉及大量数据,因此选择Python合情合理。Python 是一种简单易读的语言,可以减轻开发人员的负担,而且它一直是数据科学的标准。
如今流行的机器学习框架(如TensorFlow、scikit-learn、PyTorc)大多是使用Python编写的,而且它们还提供了专用的 Python API。TensorFlow 曾在2018 年发布了该框架的 JS 版本,支持开发人员构建可在浏览器或 Node.js 服务器中运行的机器学习模型。
但这还不足以赢得整个机器学习的世界。Python非常适合机器学习,而且在短期内它不太可能被另一种语言取代。
Python 和 JavaScript 的未来
很多人认为 Python 与 JavaScript 做比较并不公平。毕竟这两种语言的设计初衷不同,因此二者在软件开发中的应用也存在差异。
正是这些差异使得这两种技术能够在现代编程世界中完美地互补。
将来这种情况会发生变化吗?就目前来看,JavaScript 作为最强大的 Web 与移动应用开发工具的地位似乎非常牢固。同时,JavaScript 也在朝着通用编程语言的方向发展,但未来它能否取代 Python 之类的语言,目前尚无定论。
至于 Python,由于可读性、易用性以及处理数据的能力,该语言可能会继续主导机器学习领域和学术界。
说到底,技术栈的选择始终取决于项目的性质、程序员掌握的技术以及其他多种因素。
*本文由CSDN翻译,未经授权,禁止转载。
原文链接:https://medium.com/@STXNext/python-vs-javascript-is-it-a-fair-comparison-a3d90288a204
— 推荐阅读 —
《新程序员001-004》已全面上市
欢迎扫描下方二维码或点击进入立即订阅
即可畅享电子书及精美纸质书。
☞Linux 超 macOS、最讨厌 Angular.js 框架,调查了 7 万名开发者的最新发现! ☞ “一次编写,运行各端”,高通重磅发布 AI 软件栈! ☞把腾讯搬到云上,治愈了他们的技术焦虑
一键三连 「分享」「点赞」「在看」
成就一亿技术人
[广告]赞助链接:
关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩