案例分享:阿里巴巴全球化电商核心系统架构实战,点击学习>>> 了解详情
写点什么

再见 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:004058
用户头像
刘燕 InfoQ记者

发布了 682 篇内容, 共 217.0 次阅读, 收获喜欢 1307 次。

关注

评论

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

日更总结 6月日更 21天写作

万里无云万里天

6月日更 日更总结

Pandas高级教程之:GroupBy用法

程序那些事

Python 数据分析 pandas

计算机基础知识 -- 位,字节,字符

浅^安

一文看懂filecoin挖矿的成本到底有哪些?

IPFS星盟小熊

IPFS fil成本 fil挖矿

揪出那个无主键的表

Simon

MySQL 主键

数牍科技亮相上海 AI 基金“AI 驱动企业转型” 应用场景战略合作仪式,隐私计算拓展AI应用疆域

Geek_459987

IPFS分布式存储矿机挖矿系统开发

获客I3O6O643Z97

挖矿 ipfs如何挖矿

Takin Talks·上海 |开源后首场主题研讨会来了,一起解密Takin技术吧!

数列科技

云图说|ASM灰度发布,让服务发布变得更敏捷、更安全

华为云开发者社区

灰度发布 application 云图说 应用服务网格服务 Service Mesh (ASM)

我写什么,你们决定

喵叔

NNB牛气冲天系统软件开发搭建

开發I852946OIIO

前端智能化 or 低代码,也许不是个选择题

清秋

前端 低代码 智能化

乐挖矿场软件系统开发案例

开發I852946OIIO

filecoin矿工的收益有哪些?

IPFS星盟小熊

fil fil收益 ipfs挖矿

淘悠优软件系统开发内容

开發I852946OIIO

目前有哪些好用的用例管理工具?

万事ONES

测试用例 ONES 测试管理

细说.NET 缓存

喵叔

7月日更

秒懂!进制和位运算

阿粤Ayue

位运算 二进制

SUN太阳币APP系统开发方案

开發I852946OIIO

由浅入深C A S

程序猿阿星

CAS 自旋锁

全面解读自动驾驶数据存储关键

焱融科技

人工智能 自动驾驶 云计算 高性能 文件存储

从装大象中我们学会了什么设计模式

skow

Java 面试 后端 设计模式

Swarm挖矿APP系统开发

获客I3O6O643Z97

挖矿挖什么币好 ipfs和swarm哪个更有价值

PHA项目挖矿平台系统开发App

获客I3O6O643Z97

挖矿矿池系统开发案例 PHA矿机挖矿 PHA质押挖矿

智能猫量化机器人炒币系统开发【专业定制、现成源码】

获客I3O6O643Z97

DAPP智能合约交易系统开发 量化策略 量化跟单 量化交易源码

互联网产品经理之需求的一生

路边水果摊

产品经理

免费分享Spring与SpringMVC开发的优秀图书

Java入门到架构

Java spring Java书籍推荐

有哪些好用的团队文档和技术资料管理的工具?

万事ONES

在线文档 ONES 协同办公

Go 学习笔记之 函数

架构精进之路

Go 7月日更

DOGT狗狗通证软件系统开发公司

开發I852946OIIO

有哪些适合大型系统的项目开发管理工具?

万事ONES

项目管理 研发管理 ONES

数据库运维技术发展与展望

数据库运维技术发展与展望

再见Python,你好Julia!-InfoQ