Categories
程式開發

再见Python,你好Julia!


本文最初发布于towards data science博客,经原作者授权由InfoQ中文站翻译并分享。

看到这个标题请不要误会我的意思。Python依旧大受欢迎,其热度是由计算机科学家、数据科学家和AI专家组成的坚如磐石的社区撑起来的。

但如果你曾与这些人坐下来聊过天,你也会知道他们对Python的缺陷有多大怨言。速度缓慢,需要过多的测试,就算做过了测试也会冒出来运行时错误……让人头疼的事情实在太多了。

这就是为什么越来越多的程序员开始采用其他语言的原因所在——其中最优秀的替代品包括Julia、Go和Rust。Julia非常适合数学和技术任务,而Go很擅长模块化程序,Rust则是系统编程的首选。

由于数据科学家和AI专家需要处理许多数学问题,因此在他们眼中Julia是赢家。就算是在最苛刻的对比条件下,Julia也具有很多Python无法比拟的优势。

Python的禅意与Julia的贪婪

人们之所以要创建一种新的编程语言,是因为他们既想保留旧语言的长处,又要修复其中的缺陷。

正是基于这种理念,Guido van Rossum在1980年代后期创建了Python,作为ABC的改进和替代。后者作为编程语言而言过于追求完美了——它如此死板,教学起来很容易,但在现实生活中却很难使用。

相反,Python非常实用。你可以在”Python的禅意”这篇文章(https://www.python.org/dev/peps/pep-0020/)中看到这一点,这篇文章反映了创建者的意图:

美丽胜于丑陋。
显式胜于隐式。
简单胜于复杂。
复杂胜于繁复。
扁平胜于嵌套。
稀疏胜于密集。
可读性很重要。
特殊情况还不足以打破规则。
而实用性胜于纯度。
[……]

Python仍然保留了ABC的那些良好特性:例如可读性、简单性和对初学者友好的优点。但是Python比ABC更加健壮,并且更适合现实生活。

再见Python,你好Julia! 1

ABC为Python铺平了道路,后者又为Julia指明了方向

从同样的角度来看,Julia的创造者们也希望保留其他语言的优点,而摒弃它们的缺点。但是Julia的志向更为远大:与其只取代一种语言,不如让所有语言都成为手下败将。

Julia的创造者是这样说的:

我们很贪心:我们想要更多。
我们需要一种具有自由许可的开源语言。我们希望有C的性能和Ruby的动态性。我们需要一种同调的语言,具有像Lisp这样的真实宏命令,但又有类似Matlab这样熟悉又明显的数学符号。我们想要的语言应该像Python一样适合常规编程,又像R一样适合统计用途,像Perl一样能自然地处理字符串处理,也能像Matlab一样成为线性代数的强大工具,还能像Shell一样擅长将程序粘合起来。这种语言要非常简单易学,却又能打动最专业的程序员。我们希望它是交互式的,希望它是编译的。

Julia希望将当下存在的所有优势都融合在一起,同时还不能为了这些优势做出牺牲,引入其他语言中的那些缺陷。尽管Julia是一门年轻的语言,但它已经实现了创造者设定的许多目标。

让Julia的开发人员着迷的优势

多用途

从简单的机器学习应用程序到规模庞大的超级计算机仿真应用,Julia无所不能。在某种程度上来说,Python也可以做到这一点——但Python是逐渐走进各个领域的。

相比之下,Julia的多用途能力是天生的,从零开始打造而成。

速度

Julia的创造者希望创建一种与C一样快的语言——但他们的成品速度甚至比C更快。尽管近年来Python加速起来变得容易许多,但是它的性能依旧与Julia相去甚远。

2017年,Julia甚至加入了Petaflop俱乐部——这是一个小型编程语言俱乐部,其中的成员都能实现超过千万亿次每秒的峰值计算性能。除了Julia,目前只有C、C++和Fortran是这个俱乐部的成员。

社区

历经30多年的发展,Python已经建立起了一个庞大的支持社区。随便哪个与Python相关的问题,你都只需要谷歌一下就能得到答案。

相比之下,Julia的社区非常小巧。虽然这意味着你可能需要深入挖掘才能找到答案,但你可能会一次又一次遇到同样的伙伴。这样一来,程序员之间甚至可能发展出超越纯粹利益关系的友谊。

代码转换

你甚至不需要了解任何Julia命令也能使用Julia编程。你不仅可以在Julia中使用Python和C代码,甚至可以在Python中使用Julia。不用说,这样一来,开发人员就能轻松修补自己Python代码的缺陷。或者在学习Julia的过程中依旧保持生产力水平。

再见Python,你好Julia! 2

库仍然是Python的强项

这是Python的强项之一——它的库数量庞大且维护良好。Julia没有那么多库可用,用户还抱怨说现有的那点库维护得也不够好。

但是,当你考虑到Julia是一门非常年轻的语言,并且资源相当有限,你就会意识到它现有的库数量已经相当惊人了。Julia库的数量还在增长,此外它还可以与C和Fortran中的库交互,以处理图表之类的任务。

动态和静态类型

Python是100%动态类型的。这意味着程序将在运行时确定变量是浮点数还是整数。

尽管这对初学者来说非常友好,但它也引入了许多潜在的错误。这意味着你需要在所有可能的场景中测试Python代码——这个过程相当笨拙,需要花费大量时间。

由于Julia创作者也希望它易于学习,因此Julia完全支持动态类型。但与Python不同的是,你可以根据需要引入静态类型——比如C或Fortran中的那些形式。

这可以为你节省大量时间:你可以在需要的任何地方指定类型,用不着再绞尽脑汁逃避测试了。

数据:投资潜力股的意义

再见Python,你好Julia! 3

在StackOverflow上标记为Julia(左)和Python(右)的问题数量。

尽管所有这些优点听起来都很不错,但请务必注意,与Python相比Julia依然是个新生儿。

一个相当不错的度量标准是StackOverflow上的问题数量:目前,Python被标记的问题数量比Julia多二十倍!

这并不意味着Julia不受欢迎——自然,它需要一些时间才能被程序员广泛采用。

考虑一下——你是否真的想用另一种语言编写所有代码?不,你宁愿在将来的项目中尝试一种新语言。正因如此,每种编程语言在发布和广泛采用之间都会存在很长的时滞。

但是,如果你现在就采用它(这很容易,因为Julia允许大量的语言转换),那么你就是在投资未来。当越来越多的人开始采用Julia时,你已经获得了丰富的经验,足以成为指导他们的老手。另外,随着越来越多的Python代码被Julia取代,你的代码也会更加持久。

再见Python,你好Julia! 4

是时候向Julia表达一些爱意了

底线:试一试Julia,让它成为你的优势

四十年前,人工智能不过是一种小众玩物。那时的业界和投资者并不信任它,与它相关的许多技术都笨拙且难以使用。但当时就了解它的那些人成为了今天的大牛——市场对大牛的需求如此火热,以至于他们的薪水足以匹敌NFL球员

同样,Julia现在也还是很小众。但随着它的发展,那些早日采用它的人们会成为最大的赢家。

我并不是说,如果你现在就选择Julia,就一定可以在十年内赚到很多钱。但这样做的话,你是在为自己创造机遇。

想想看,市场上的大多数程序员的简历上都带有Python的字样。在接下来的几年中,我们将在就业市场上看到数量更多的Python程序员。但是,如果企业对Python的需求衰退,Python程序员的比例也会下降。起初这种趋势是很缓慢的,但也是不可逆转的。

另一方面,如果你可以把Julia纳入自己的简历,就会取得真正的优势。因为不客气地说,你与其他Python程序员又有何不同呢?区别是很小的。但即使在三年之后,市场上也不会有那么多的Julia程序员。

有了Julia的技能,你不仅可以证明自己对编程的兴趣超出了职位需求,还能让人知道你渴望学习,并且对程序员这项事业有着更深刻的理解。换句话说,你很适合这份工作。

你和其他Julia程序员一样,可能是未来的编程明星,并且你们很清楚这一点。或者,正如Julia的创造者在2012年所说的那样:

即使我们意识到我们的贪婪实在无可救药,我们仍然希望拥有所有这一切。大约两年半之前,我们开始着手创建我们的贪婪语言。它还不完整,但是时候发布1.0版本了——我们创建的语言称为Julia。它已经满足了我们90%的苛刻要求,现在它需要其他人的苛刻要求来进一步塑造和完善。因此,如果你也是一位贪婪、疯狂、要求苛刻的程序员,我们希望你尝试一下。

Python仍然非常流行。但是,如果你现在开始学习Julia,它将来可能就是你的头等舱船票。从这个层面来说:再见Python,你好Julia!

作者介绍

Rhea Moutafis,正在攻读“暗物质物理学”博士学位,他热爱艺术、音乐和美好的事物。

原文链接:https://towardsdatascience.com/bye-bye-python-hello-julia-9230bff0df62