写点什么

再见 Python,你好 Julia!

2020 年 6 月 18 日

再见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 更加健壮,并且更适合现实生活。



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 的强项



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


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


动态和静态类型


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


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


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


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


数据:投资潜力股的意义



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


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


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


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


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


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



是时候向 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


2020 年 6 月 18 日 07:003521
用户头像
刘燕 InfoQ记者

发布了 484 篇内容, 共 150.8 次阅读, 收获喜欢 873 次。

关注

评论

发布
暂无评论
发现更多内容

作业一:食堂就餐卡系统设计

seng man

极客大学架构师训练营

徒手撸框架--实现IoC

犀利豆

Java spring

ERC20 Short Address Attack

程序那些事

区块链 以太坊 Token ERC20 代币

Solidity的Bytecode和Opcode简介

程序那些事

区块链 智能合约 以太坊 Ethereum eth

可视化算法网站汇总,从此简单学算法!(附动图)

王磊

Java 算法

【写作群星榜】6.5~6.11写作平台优秀作者&文章排名

InfoQ写作平台官方

写作平台 排行榜

vs code中使用vetur对eslint格式化

玏佾

vscode

读笔 | 既然拖延症难以根治,不妨暂且享受它

张鸱鸺

读书笔记 时间管理 随笔杂谈

从微服务到Service Mesh

博文视点Broadview

架构 微服务 Service Mesh istio 架构师

五分钟学会Elasticsearch查询代理设计

奈学教育

elasticsearch ES

SignalR Core之Hubs基本概念

猫定谔的靴

.net core SignalR realtime Hubs

极客大学架构师训练营 听课总结 - 架构视图,设计文档 -- 第二课

John(易筋)

极客时间 极客大学 架构设计 极客大学架构师训练营 架构文档

2020年6月11日 高性能MySQL

瑞克与莫迪

终于有一个 Java 可以用的微信机器人了

犀利豆

Java

Apache Spark有哪些局限性

奈学教育

Apache Spark

浅谈互联网思维和区块链思维

CECBC区块链专委会

区块链思维

作业 - 1 & 2

Happy-Coming

Homework

回忆杀:我的编程能力是如何突飞猛进起来的

程序员小跃

Java android 编程 面向对象思想

读懂才会用:Redis ZSet 的几种使用场景

小眼睛聊技术

Java redis 学习 架构 后端

编程的未来 Java, C, Go, Swift, Dart? Uncle Bob Martin - The Future of Programming

John(易筋)

Java 敏捷开发 编程的未来 编程简史 Bob大叔

非结构化数据可视化 —— 现在与未来

做技术BP的文案Gou

人工智能 大数据 数据可视化 非结构化数据

架构第一周-学习总结

seng man

架构师训练营第一次课程感想小记1

tuuezzy

软件工程 求职 架构师 UML

五分钟学会Elasticsearch查询代理设计

古月木易

Apache Spark有哪些局限性

古月木易

spark

<<架构师训练营>>第一周作业

0x12FD16B

极客大学架构师训练营

架构师训练营第二周

Melo

数据同步,应该如何设计

迹_Jason

搭建websocket消息推送服务,必须要考虑的几个问题

GoEasy消息推送

websocket 消息推送 即时通讯

面向对象五大基本原则

彭阿三

面向对象设计 面向对象五个基本原则 基本原则

徒手撸框架--实现Aop

犀利豆

Java spring

NLP领域的2020年大事记及2021展望

NLP领域的2020年大事记及2021展望

再见Python,你好Julia!-InfoQ