当前位置: 首页 > 编程日记 > 正文

再见 Python,Hello Julia!

作者 | Rhea Moutafis

译者 | 苏本如,责编 | 夕颜

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

随着Python的停滞不前,一个新的热门竞争对手崛起了。

如果Julia对你来说仍是个谜,别担心。

不要误会我的意思。Python的流行仍然受到计算机科学家、数据科学家、人工智能专家,以及他们组成的稳固社区的坚定支持。

但是,如果你曾经和这些人一起共进过晚餐,那么你就应该知道他们对于Python的弱点有多少抱怨。从速度缓慢到需要过多的测试,再到尽管进行了先前的测试仍然会产生很多运行时错误 - 这些已经足够让人恼火了。

这就是为什么越来越多的程序员开始采用其他语言的原因,这些语言中最受欢迎的是Julia、Go和Rust。Julia非常适合数学和技术任务,Go非常适合模块化程序,而Rust是系统编程的首选。

由于数据科学家和人工智能专家需要处理许多数学问题,因此Julia成为他们的赢家。即使经过严格的审视,Julia仍然具有Python无法战胜的优势。

Python的禅与Julia的贪婪

当人们创建一种新的编程语言时,他们这样做的目的是希望保留旧语言中的好特性,并修复其坏特性。

从这个意义上讲,Guido van Rossum在20世纪80年代后期创建Python的目的是为了改进ABC(Abstract Base Class - 抽象基类)。后者对于编程语言来说简直太完美了 - 尽管其刚性使其易于学习,但在现实生活中却很难使用。

而Python则相反,它非常实用。你可以在下列Python的禅中看到这一点,它反映了创造者的意图:

  1. 优美胜于丑陋(Python 以编写优美的代码为目标)。

  2. 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)。

  3. 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)。

  4. 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)。

  5. 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)。

  6. 间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)。

  7. 可读性很重要(优美的代码是可读的)。

  8. 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)

[...]

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

ABC为Python铺平了道路,而Python也为Julia铺平了道路。

从同样的意义上说,Julia的创造者们希望保留其他语言的优点,而摒弃其缺点。但是Julia的野心要大得多:它不是想取代一种语言,而是想打败所有语言。

Julia的创造者是这样说的:

我们很贪婪:我们想要更多。我们想要一种拥有自由许可的开源语言。我们想要C的速度和Ruby的活力。我们想要的语言是同调的(homoiconic),具有像Lisp这样的真实宏,但又具有类似Matlab这样的显而易见的熟悉的数学符号。我们想要的语言像Python一样适用于通用编程,像R一样适用于统计,像Perl一样自然地处理字符串,像Matlab一样具有强大的线性代数处理能力,像Shell一样易于将程序粘合在一起。我们想要一些简单易学的,但却能让最严肃的黑客开心的东西。我们希望它是交互式的,我们希望它也是可编译的。

Julia希望融合目前存在的语言的所有优势,而不是用其他语言的劣势来平衡。尽管Julia是一门年轻的语言,但它已经实现了它的创造者设定的许多目标。

Julia拥有哪些开发人员喜欢的特性?

多功能性

Julia可以用于从简单的机器学习应用程序到巨大的超级计算机模拟的所有方面。在某种程度上,Python也可以做到这一点,但是Python不知何故发展成了这样。

相比之下,Julia正是为这个目的而生的。自下而上。

速度

Julia的创造者希望创造一种和C语言一样快速的语言 - 但是他们创造出来的语言速度更快。尽管近年来Python变得更容易加速,但是它的性能和Julia相比仍然相去甚远。

2017年,Julia甚至加入了Petaflop俱乐部,这是一个小型的编程语言俱乐部,Julia的峰值性能可以超过每秒1 petaflop的速度。除了Julia,目前只有C,C ++和Fortran进入了这个俱乐部。

社区

凭借其 30 多年的历史,Python 拥有一个非常庞大的支持社区。几乎任何与 Python 相关的问题在一次谷歌搜索中都能得到答案。

相比之下,Julia 社区非常小。虽然这意味着你可能需要进一步挖掘才能找到答案,但你可能会一次又一次地和同样的人联系在一起。这可能会变成超越价值的程序员关系。

代码转换

你甚至无需知道一条Julia命令,就可以在Julia中进行编码。你不仅可以在Julia中使用Python和C代码。甚至可以在Python中使用Julia!

不用说,这使得修补Python代码的弱点变得非常容易。或者在你还在学习Julia的时候保持高效。


拥有数量庞大且维护良好的库,仍然是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成为你的优势

四十年前,人工智能不过是一种小众技术。业界和投资者对其并不信任,许多技术既笨拙又难以使用。但是那些当时学会它的人都已成为当今的巨人 – 市场需求如此之高,以至于他们的薪水与一个职业橄榄球大联盟球员的薪水相当。

同样,Julia现在也很小众。但是,随着它的发展,最大的赢家将是那些早期采用它的人。

我并不是说,如果你现在选择Julia,你一定可以在十年内赚到很多钱。但是,你正在增加你赚钱的机会。

想想看:大多数程序员的简历上都有Python。在接下来的几年中,我们会在就业市场上看到更多的Python程序员。但是,如果企业对Python的需求放缓,那么Python程序员的前景观点就会暗淡。这个过程开始缓慢,但不可避免。

另一方面,如果你能够将Julia纳入自己的简历,你将拥有真正的优势。坦白讲,是什么让你有别于其他Python程序员呢?没有什么东西。但是,即使三年后,也不会有那么多的Julia程序员。

有了Julia的技能,你不仅证明了你自己对工作要求以外的兴趣。你也证明了你渴望学习,并且对成为一名程序员的含义有更广泛的了解。换句话说,你很适合这份工作。

你,和其他Julia程序员将是未来的摇滚明星,你知道的。或者,正如Julia的创造者在2012年所说的那样:

尽管我们认识到自己的贪婪是不可原谅的,但我们仍然想要拥有一切。大约两年半前,我们开始创造我们贪婪的语言。它还没有完成,但是现在到了发布1.0版本的时候了 - 我们创造的语言叫做Julia。它已经满足了我们90%的苛刻的要求,现在它需要其他人的苛刻的要求来进一步完善它。所以,如果你也是一个贪婪,不讲道理,要求苛刻的程序员,我们希望你能尝试一下。

Python仍然很受欢迎。但是如果你现在开始学习Julia,那么你就可能握有了未来的黄金入场券。从这个意义上你可以说:再见 Python!你好 Julia!

原文链接:

https://towardsdatascience.com/bye-bye-python-hello-julia-9230bff0df62

本文为CSDN翻译文章,转载请注明原文信息及翻译信息。

推荐阅读

  • AI修复100年前晚清影像喜提热搜,这两大算法立功了

  • CycleGan人脸转为漫画脸,牛掰的知识又增加了 | 附代码

  • 一次对语音技术的彻底批判

  • 用大白话彻底搞懂 HBase RowKey 详细设计

  • 为什么黑客无法攻击公开的区块链?

  • 再见 Python,Hello Julia!

  • 百万人学AI 万人在线大会, 15+场直播抢先看!

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

【流媒體】jrtplib—VS2010下RTP开源协议库JRTPLIB3.9.1编译

一、JRTPLIB简介 老外用C编写的开源RTP协议库,用来进行实时数据传输,可以运行在 Windows、Linux、 FreeBSD、Solaris、Unix和VxWorks 等多种操作系统上,主页为:http://research.edm.uhasselt.be/~jori/page/index.php?nMain.Home…

揭露Windows中各种不老实的服务

使用电脑经常会碰到各种各样的问题,比如:网上邻居上看不到一个邻居、无法拨号上网、电脑关机速度变慢等,在你尝试了各种方法还没有解决时,不妨到“控制面板→管理工具→服务”中查一查,没准故障的根源就在这里。 …

文本相似度的计算

文本相似度的计算方法有很多,这里简单记录一下 传统的VSM模型: 计算文本相似度的时候主要是使用tfidf来协助生成文档向量 整个文档集合有多少词,就是多少维度 每个文档中的词用tfidf来生成权重,用权重来表示文档的向量 生成向量后…

vc picture控件载入背景图,随控件大小改变

在mfc里,想要在Picture控件中载入一张图片有两种方法:静态的和动态的。静态的方法就是图片先载入资源(.rc)文件中,拥有一个唯一的ID;动态的方法就是制定图片的路径名即可。 当然这样的方法网上一搜有很多&…

真没想到,Python还能实现5毛特效

来源 | ZackSock(ID:ZackSock)图源 | 视觉中国Python牛已经不是一天两天的事了,但是我开始也没想到,Python能这么牛。前段时间接触了一个批量抠图的模型库,而后在一些视频中找到灵感,觉得应该可以通过抠图的…

第八章 VLSM

VSLM(variable length subnet mask)------------可变长长度子网掩码 对于点对点链路而言,最好的子网掩码是:255.255.255.252对于lan而言,好的子网掩码可能是255.255.255.192。vlsm的两个好处:在大型网络中高效地使用寻址&#xff…

Androidstudio下Generate signed apk提示Error: Expected resource of type id [ResourceType]解决办法...

只需要在报错位置所在的类上面添加: SuppressWarnings("ResourceType") 即可实现Generate signed apk。

对话框窗口最大最小化

mfc里,基于对话框的窗口,具有最大最小化的属性设置。在Border属性里选择Resizing,然后在Maximize和Minimize中选择true。在窗体当中随便拖几个控件,然后运行,此时点击最大化会发现,整个窗体的大小是变大了&…

4场直播,哈工大、亚马逊等大咖为你带来机器学习与知识图谱的内容盛宴

机器学习和知识图谱是当今技术领域的热门话题,随着相关技术的不断发展,无论是对两类技术单独的探讨,还是将机器学习和知识图谱相结合的尝试,都在吸引越来越多的关注。5月16日下午,来自亚马逊、墨奇科技、Second State、…

【失败的尝试】C++中使用string进行switch判断

贴出错误代码&#xff1a; #include <iostream>#include <string>using namespace std;void main(){ string str; cin>>str; switch(str) { case "ab": cout<<"one"<<endl; break; case &…

springmvc 拦截器、国际化、验证

2019独角兽企业重金招聘Python工程师标准>>> springmvc 拦截器 继承了HandlerIntercepter的类可以作为拦截器类&#xff1a; package com.yawn.intercepter;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import o…

由MessageBox和AfxMessageBox的使用异同所感

我记得刚开始学图形界面编程的时候&#xff0c;接触的最早的一个函数应该就是MessageBox,之前都一直是控制台程序&#xff0c;突然能运行蹦出一个对话框感觉还是很新鲜的。当时还利用MessageBox写一些恶搞程序&#xff0c;利用上面的yes or no 按钮进行判断等等。但是说实话感觉…

iRobot的30年成长史

作者 | Colin Angle译者 | 苏本如&#xff0c;编辑 | 郭芮题图视觉中国出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;建造一个漫游者&#xff0c;把它送上月球&#xff0c;出售电影版权。这是我们在1990年开始iRobot时的第一个商业模式&#xff0c;我们…

iPhone开发:通过NSURLRequest获得服务器返回的http header和http status

HTTP连接的头信息包括在NSHTPURLResponse类中。如果你拥有一个NSHTTPURLResponse变量&#xff0c;你可以通过发送allHeaderFields信息&#xff0c;轻而易举地获取以NSDictionary形式保存的头信息。对于一个同步请求 – 由于会引发阻塞所以不推荐使用 – 是很容易初始化一个NSHT…

今天开始记录自己苹果开发博客旅程!~

做ios开发也蛮久了&#xff0c;现在才想到要自己开个博客&#xff0c;然后记录点自己平时工作学习中遇到的各种问题以及解决后的心得。现在公司的app第一个版本已经上线了&#xff0c;更加期待以后的发展和更迭。还记得刚进公司接受项目时那种忐忑不安的心理&#xff0c;现在想…

一步一步实现扫雷游戏(C语言实现)(三)

使用WIN32API连接窗口 此项目相关博文链接 一步一步实现扫雷游戏&#xff08;C语言实现&#xff09;(一&#xff09; 一步一步实现扫雷游戏&#xff08;C语言实现&#xff09;(二) 一步一步实现扫雷游戏&#xff08;C语言实现&#xff09;(三) 一步一步实现扫雷游戏&#xff08…

关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值

当然网上关于这方面的技术博文非常多&#xff0c;此处我只是进行一下小记&#xff0c;再加一点自己的体会&#xff0c;方便以后查询。 一、模态对话框 1.创建及显示 模态对话框是一种阻塞式的对话框&#xff0c;即没有处理完该对话框&#xff0c;不能对其他地方进行操作。比…

《评人工智能如何走向新阶段》后记(再续25)

415&#xff0c;开发近红外光激发的纳米探针&#xff0c;监测大脑深层活动&#xff0c;理解神经系统功能机制。 开发、设计电压敏感纳米探针一直是个技术难关。 群体神经元活动的在体监测是揭示神经系统功能机制的关键。 近日《美国化学会志》期刊报导一项新的研究成果&…

sftp 限制用户登陆指定目录(家目录)

sftp 限制用户登陆指定目录(家目录)本文源地址http://blog.chinaunix.net/uid-42741-id-3069880.html即限制 sftp 用户登陆后&#xff0c;只能在家目录下活动&#xff0c;不能到其他或上级目录该功能需要4.8以上版本[rootbackup ~]# ssh -VOpenSSH_5.3p1, OpenSSL 1.0.1e-fips …

C#多线程学习

任何程序在执行时&#xff0c;至少有一个主线程。在.net framework class library中&#xff0c;所有与多线程机制应用相关的类都是放在System.Threading命名空间中的。如果你想在你的应用程序中使用多线程&#xff0c;就必须包含这个类。 Thread类有几个至关重要的方法&#x…

开启一个新的终端并执行特定的命令

我的项目中有利用到远程控制&#xff0c;从windows端远程控制linux端&#xff0c;那么也就是接收远程的命令并在本机执行并返回结果。在父进程中用到popen()函数&#xff0c;popen()函数通过创建一个管道&#xff0c;调用fork()产生一个子进程&#xff0c;执行一个shell以运行命…

《评人工智能如何走向新阶段》后记(再续26)

427&#xff0c;SNN机理性测试 SNN利用时空处理&#xff0c;脉冲稀疏性和较高的内部神经元带宽来最大化神经形态计算的能量效率。尽管可以在这种情况下使用常规的基于硅的技术&#xff0c;但最终的神经元突触电路需要多个晶体管和复杂的布局&#xff0c;从而限制了集成密度。论…

Android5.1.1源码 - zygote fork出的子进程如何权限降级

前言 如果不知道zygote是什么&#xff0c;或者好奇zygote如何启动&#xff0c;可以去看老罗的文章&#xff1a; Android系统进程Zygote启动过程的源代码分析所有Android应用进程都是zygote fork出来的&#xff0c;新fork出来的应用进程还保持着root权限&#xff0c;这显然是不被…

system函数

转载自此处 相关函数 fork&#xff0c;execve&#xff0c;waitpid&#xff0c;popen 头文件#includ”stdlib.h” 定义函数 int system(const char * string); 函数说明 system()会调用fork()产生子进程&#xff0c;由子进程来调用/bin/sh-c string来执行参数string字符串…

《评人工智能如何走向新阶段》后记(再续27)

439&#xff0c;彩虹一号无人机实现人类永不落地的追求 日媒&#xff1a;中国亮出杀手锏 世界各国一直在研究提高飞机的续航能力 国内研制的彩虹一号无人机采用人工智能和其他高新技术&#xff0c;飞行高度30000米&#xff0c;并终于研制成功实现人类永不落地的追求。 440&a…

使用unix工具监控cpu、内存等系统资源占用率

1&#xff09;使用 sar -u 命令监控cpu使用$ sar -u 5 512:21:15 %usr %sys %wio %idle12:21:20 54 15 13 1912:21:25 41 18 15 2712:21:30 62 20 10 912:21:35 33 11 20 3612:21:40 38 13 17 31Average 45 15 15 24%usr&#xff0d;&#xff0d;运行在用户模式下cpu的使用百分…

C# 获取图片的EXIF 信息

关于 EXIF 信息的介绍。 1 EXIF&#xff0c;是英文Exchangeable Image File(可交换图像文件)的缩写。EXIF是一种图像文件格式&#xff0c;只是文件的后缀名为jpg。EXIF信息是由数码相机在拍摄过程中采集一系列的信息&#xff0c;然后把信息放置在jpg文件的头部&#xff0c;也就…

ffmpeg录屏/摄像头/指定窗口;别名alias设置

关于ffmpeg的使用方法很多&#xff0c;我简单写一下今天我捣鼓的几个。因为我的项目中要用到录屏和录制摄像头&#xff0c;所以试了下。网上关于录制指定窗口的方法并不多&#xff0c;我也是找了好久&#xff0c;试了好久才试出来的。 好了&#xff0c;废话不多说&#xff0c;…

黄聪:BackGroundWorker解决“线程间操作无效: 从不是创建控件的线程访问它” (C# VS2008)...

在编程中经常会遇到在一个按钮中执行复杂操作&#xff0c;并将复杂操作最后返回的值加入一个ListView或ComboBox中候选。这个时候程序会卡&#xff0c;当程序员将这些卡代码放进线程(Thread)中后发现当对控件操作时出现“线程间操作无效: 从不是创建控件的线程访问它”异常。 …

AWS 中国宁夏和北京区正式上线 Amazon SageMaker,中国用户终于能用到新工具和功能!

2020年 5 月 12 日&#xff0c;亚马逊云服务 Amazon Web Services, Inc. (AWS) 宣布&#xff0c;Amazon SageMaker 在由西云数据运营的 AWS 中国 (宁夏) 区域和光环新网运营的 AWS 中国&#xff08;北京&#xff09;区域正式上线。 Amazon SageMaker 在中国的上线使中国用户获…