作者 | STX Next
译者 | 弯月
在讨论应该使用 Python 还是 JavaScript 构建项目时,一般我们都不会说只使用一种编程语言来构建所有的组件。
在现代软件开发中,如果想构建符合标准的软件,确保在截止日期前完成,或者构建一款可以处理数百万用户的应用程序,那么通常都会使用多种语言、框架、工具和 API。
因此,如果我们想比较 Python 和 JavaScript,那么就应该讨论使用这两种语言来构建软件的核心组件。
除了这个核心主题之外,我们还将在本文中讨论:
Instagram 成为世界上最大的 Python 应用程序的背后故事;
最适合 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 于 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 的设计正在朝着成熟通用编程语言的方向迈进。
如果核心组件或系统发生故障的时间过长,整个项目就会面临崩溃。因此,我们需要慎重地选择这部分的构建技术。
对于优先级较低的系统,你可以尝试不同的方法,找到最节省成本的方法。然而,在为构建核心组件选择编程语言时,也采用这种态度就会导致项目走向失败。
假设有一款主要用于共享照片和视频应用程序,在全球拥有超过 10 亿用户,那么处理海量内容的服务器就是该应用程序的核心组件。对于这类应用,我第一个想到的就是Instagram,这款应用号称“世界上最大的 Python 网站”。
Instagram 的一位工程师曾表示,“Instagram 的服务器完全由 Python 驱动。”Instagram 服务器的应用程序就是“一个庞大的、包含数百万行代码以及数千个 Django 端点的大型代码库”。Instagram 的每张照片、每个视频都是通过最流行的 Python Web 框架 Django 编写的。
Instagram 使用了大量 Facebook 数据中心的服务器。工程师不仅需要管理应用程序的外观、消息流、内容推荐算法,还需要确保服务器的 CPU 不会过热。
这是一项极其艰巨的任务。他们为什么会选择 Python 作为主要语言?
Instagram 的开发者博客公布了答案:“我们最初选择使用 Python,是因为该语言简单且实用,这与我们的理念非常吻合,即从简单的事情入手’。但简单也有一个缺点:效率低。”
简单且实用。Martin Fowler 是一位软件开发大师,拥有数十年的从业经历,还出版了多本书籍,他曾经写道:“任何傻瓜都可以编写计算机可以理解的代码。但只有优秀的程序员可以编写人类可以理解的代码。”
这意味着,虽然你的目标是确保机器不会因每天为数十亿用户提供服务而过热,但实现这一点的方式并不是学习怎样更好地编写机器代码。你必须编写方便其他开发人员理解的代码,这样他们就可以在必要时快速调试代码,或在现有代码之上构建新功能,同时还不会担心破坏现有系统。
Python 非常适合这类应用,因为该语言方便阅读、简洁且易于理解。
虽然 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 的支持下,维护界面的工作不仅可以节省成本和开发时间,而且也可以减轻开发人员的负担。
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 是移动开发领域的赢家。虽然有一些移动开发的小众框架(比如 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 构建的应用程序可以在 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 是机器学习开发人员的首选语言。机器学习很复杂,涉及大量数据,因此选择Python合情合理。Python 是一种简单易读的语言,可以减轻开发人员的负担,而且它一直是数据科学的标准。
如今流行的机器学习框架(如TensorFlow、scikit-learn、PyTorc)大多是使用Python编写的,而且它们还提供了专用的 Python API。TensorFlow 曾在2018 年发布了该框架的 JS 版本,支持开发人员构建可在浏览器或 Node.js 服务器中运行的机器学习模型。
但这还不足以赢得整个机器学习的世界。Python非常适合机器学习,而且在短期内它不太可能被另一种语言取代。
很多人认为 Python 与 JavaScript 做比较并不公平。毕竟这两种语言的设计初衷不同,因此二者在软件开发中的应用也存在差异。
正是这些差异使得这两种技术能够在现代编程世界中完美地互补。
将来这种情况会发生变化吗?就目前来看,JavaScript 作为最强大的 Web 与移动应用开发工具的地位似乎非常牢固。同时,JavaScript 也在朝着通用编程语言的方向发展,但未来它能否取代 Python 之类的语言,目前尚无定论。
至于 Python,由于可读性、易用性以及处理数据的能力,该语言可能会继续主导机器学习领域和学术界。
说到底,技术栈的选择始终取决于项目的性质、程序员掌握的技术以及其他多种因素。
*本文由CSDN翻译,未经授权,禁止转载。
原文链接:https://medium.com/@STXNext/python-vs-javascript-is-it-a-fair-comparison-a3d90288a204
成就一亿技术人