阅读更多

1顶
3踩

行业应用

原创新闻 Python 为何能坐稳 AI 时代头牌语言

2017-07-11 10:48 by 副主编 jihong10102006 评论(1) 有9755人浏览
引用
文章来自:AI100

谁会成为AI 和大数据时代的第一开发语言?这本已是一个不需要争论的问题。如果说三年前,Matlab、Scala、R、Java 和 Python还各有机会,局面尚且不清楚,那么三年之后,趋势已经非常明确了,特别是前两天 Facebook 开源了 PyTorch 之后,Python 作为 AI 时代头牌语言的位置基本确立,未来的悬念仅仅是谁能坐稳第二把交椅。

不过声音市场上还有一些杂音。最近一个有意学习数据科学的姑娘跟我说,她的一个朋友建议她从 Java 入手,因为 Hadoop 等大数据基础设施是用 Java 写的。无独有偶,上个月 IBM developerWorks 发表的一篇个人博客,用职位招聘网站indeed 上的数据做了一个统计。这篇文章本身算得上是客观公正,实事求是,但传到国内来,就被一些评论者曲解了本意,说 Python 的优势地位尚未确立,鹿死谁手尚未可知,各位学习者不可盲目跟风啊,千万要多方押宝,继续撒胡椒面不要停。

在这里我要明确表个态,对于希望加入到 AI 和大数据行业的开发人员来说,把鸡蛋放在 Python 这个篮子里不但是安全的,而且是必须的。或者换个方式说,如果你将来想在这个行业混,什么都不用想,先闭着眼睛把 Python 学会了。当然,Python不是没有它的问题和短处,你可以也应该有另外一种甚至几种语言与 Python 形成搭配,但是Python 将坐稳数据分析和 AI 第一语言的位置,这一点毫无疑问。我甚至认为,由于 Python 坐稳了这个位置,由于这个行业未来需要大批的从业者,更由于Python正在迅速成为全球大中小学编程入门课程的首选教学语言,这种开源动态脚本语言非常有机会在不久的将来成为第一种真正意义上的编程世界语。

讨论编程语言的优劣兴衰一直被认为是一个口水战话题,被资深人士所不屑。但是我认为这次 Python 的上位是一件大事。请设想一下,如果十五年之后,所有40岁以下的知识工作者,无分中外,从医生到建筑工程师,从办公室秘书到电影导演,从作曲家到销售,都能使用同一种编程语言进行基本的数据处理,调用云上的人工智能 API,操纵智能机器人,进而相互沟通想法,那么这一普遍编程的协作网络,其意义将远远超越任何编程语言之争。目前看来,Python 最有希望担任这个角色。

Python 的胜出令人意外,因为它缺点很明显。它语法上自成一派,让很多老手感到不习惯;“裸” Python 的速度很慢,在不同的任务上比C 语言大约慢数十倍到数千倍不等;由于全局解释器锁(GIL)的限制,单个Python 程序无法在多核上并发执行;Python 2 和 Python 3 两个版本长期并行,很多模块需要同时维护两个不同的版本,给开发者选择带来了很多不必要的混乱和麻烦;由于不受任何一家公司的控制,一直以来也没有一个技术巨头肯死挺 Python ,所以相对于 Python 的应用之广泛,其核心基础设施所得到的投入和支持其实是非常薄弱的。直到今天,26岁的Python 都还没有一个官方标配的 JIT 编译器,相比之下, Java 语言在其发布之后头三年内就获得了标配 JIT 。

另一个事情更能够说明问题。Python 的 GIL 核心代码 1992 年由该语言创造者 Guido van Rossum 编写,此后十八年时间没有一个人对这段至关重要的代码改动过一个字节。十八年!直到2010年,Antoine Pitrou才对 GIL 进行了近二十年来的第一次改进,而且还仅在 Python 3.x 版本中使用。这也就是说,今天使用 Python 2.7 的大多数开发者,他们所写的每一段程序仍然被26年前的一段代码牢牢制约着。

说到 Python 的不足,我就想起发生在自己身上的一段小小的轶事。我多年前曾经在一篇文章里声明自己看好 Python,而不看好 Ruby。大概两年多以前,有一个网友在微博里找到我,对我大加责备,说因为当年读了我这篇文章,误听谗言,鬼迷心窍,一直专攻 Python,而始终对 Ruby 敬而远之。结果他Python 固然精通,但最近一学 Ruby,如此美好,如此甜蜜,喜不自胜,反过来愤然意识到,当年完全被我误导了,在最美的年华错过了最美的编程语言。我当时没有更多的与他争辩,也不知道他今天是否已经从Python后端、大数据分析、机器学习和 AI 工程师成功转型为Rails快速开发高手。我只是觉得,想要真正认识一件事物的价值,确实也不是一件容易的事情。

Python 就是这样一个带着各种毛病冲到第一方阵的赛车手,但即便到了几年前,也没有多少人相信它有机会摘取桂冠,很多人认为 Java 的位置不可动摇,还有人说一切程序都将用 JavaScript重写。但今天我们再看,Python 已经是数据分析和 AI的第一语言,网络攻防的第一黑客语言,正在成为编程入门教学的第一语言,云计算系统管理第一语言。Python 也早就成为Web 开发、游戏脚本、计算机视觉、物联网管理和机器人开发的主流语言之一,随着 Python 用户可以预期的增长,它还有机会在多个领域里登顶。

而且不要忘了,未来绝大多数的 Python 用户并不是专业的程序员,而是今天还在使用 Excel、PowePoint、SAS、Matlab和视频编辑器的那些人。就拿 AI 来说,我们首先要问一下,AI 的主力人群在哪里?如果我们今天静态的来谈这个话题,你可能会认为 AI 的主力是研究机构里的 AI 科学家、拥有博士学位的机器学习专家和算法专家。但上次我提到李开复的“AI红利三段论”明确告诉我们,只要稍微把眼光放长远一点,往后看三至五年,你会看到整个 AI 产业的从业人口将逐渐形成一个巨大的金字塔结构,上述的 AI 科学家仅仅是顶端的那么一点点,95% 甚至更多的 AI 技术人员,都将是AI 工程师、应用工程师和AI 工具用户。我相信这些人几乎都将被Python 一网打尽,成为 Python 阵营的庞大后备军。这些潜在的 Python 用户至今仍然在技术圈子之外,但随着 AI 应用的发展,数百万之众的教师、公司职员、工程师、翻译、编辑、医生、销售、管理者和公务员将裹挟着各自领域中的行业知识和数据资源,涌入 Python 和 AI 大潮之中,深刻的改变整个 IT,或者说 DT (数据科技)产业的整体格局和面貌。

为什么 Python 能够后来居上呢?

如果泛泛而论,我很可以列举 Python 的一些优点,比如语言设计简洁优雅,对程序员友好,开发效率高。但我认为这不是根本原因,因为其他一些语言在这方面表现得并不差。

还有人认为 Python 的优势在于资源丰富,拥有坚实的数值算法、图标和数据处理基础设施,建立了非常良好的生态环境,吸引了大批科学家以及各领域的专家使用,从而把雪球越滚越大。但我觉得这是倒因为果。为什么偏偏是 Python 能够吸引人们使用,建立起这么好的基础设施呢?为什么世界上最好的语言 PHP 里头就没有 numpy 、NLTK、sk-learn、pandas 和 PyTorch 这样级别的库呢?为什么 JavaScript 极度繁荣之后就搞得各种程序库层次不齐,一地鸡毛,而 Python 的各种程序库既繁荣又有序,能够保持较高水准呢?

我认为最根本的原因只有一点:Python 是众多主流语言中唯一一个战略定位明确,而且始终坚持原有战略定位不动摇的语言。相比之下,太多的语言不断的用战术上无原则的勤奋去侵蚀和模糊自己的战略定位,最终只能等而下之。

Python 的战略定位是什么?其实很简单,就是要做一种简单、易用但专业、严谨的通用组合语言,或者叫胶水语言,让普通人也能够很容易的入门,把各种基本程序元件拼装在一起,协调运作。

正是因为坚持这个定位,Python 始终把语言本身的优美一致放在奇技妙招前面,始终把开发者效率放在CPU效率前面,始终把横向扩张能力放在纵向深潜能力之前。长期坚持这些战略选择,为 Python 带来了其他语言望尘莫及的丰富生态。

比如说,任何一个人,只要愿意学习,可以在几天的时间里学会Python基础部分,然后干很多很多事情,这种投入产出比可能是其他任何语言都无法相比的。再比如说,正是由于 Python 语言本身慢,所以大家在开发被频繁使用的核心程序库时,大量使用 C 语言跟它配合,结果用 Python 开发的真实程序跑起来非常快,因为很有可能超过 80% 的时间系统执行的代码是 C 写的。相反,如果 Python 不服气,非要在速度上较劲,那么结果很可能是裸速提高个几倍,但这样就没人有动力为它开发 C 模块了,最后的速度远不如混合模式,而且很可能语言因此会变得更复杂,结果是一个又慢又丑陋的语言。

更重要的是,Python 的包装能力、可组合性、可嵌入性都很好,可以把各种复杂性包装在 Python 模块里,暴露出漂亮的接口。很多时候,一个程序库本身是用 C/C++ 写的,但你会发现,直接使用 C 或者 C++ 去调用那个程序库,从环境配置到接口调用,都非常麻烦,反而隔着一层,用其python 包装库更加清爽整洁,又快又漂亮。这些特点到了 AI 领域中,就成了 Python 的强大优势。Python 也借助 AI 和数据科学,攀爬到了编程语言生态链的顶级位置。Python 与 AI绑在一起,对它们来说,无论是电子商务、搜索引擎、社交网络还是智能硬件,未来都只是生态链下游的数据奶牛、电子神经和执行工具,都将听命于自己。

对编程语言发展历史缺乏了解的人可能会觉得,Python 的战略定位是犬儒主义和缺乏进取心的。但事实证明,能同时做到简单而严谨、易用而专业,是很难的,而能够坚守胶水语言的定位,更是难上加难。

有的语言,从一开始就是出于学术而非实用的目的,学习曲线过于陡峭,一般人很难接近。有的语言,过于依赖背后金主的商业支持,好的时候风光无限,一旦被打入冷宫,连生存下去都成问题。有的语言,设计的时候有明确的假想场景,要么是为了解决大规模并发,要么是为了解决矩阵运算,要么是为了做网页渲染模板,一旦离开这个场景,就各种不爽。更多的语言,刚刚取得一点成功,就迫不及待的想成为全能冠军,在各个方向上拼命的伸展触角,特别是在增强表达能力和提升性能方面经常过分积极,不惜将核心语言改得面目全非,最后变成谁都无法掌控的庞然大物。相比之下,Python 是现代编程语言设计和演化当中的一个成功典范。

Python 之所以在战略定位上如此清晰,战略坚持上如此坚定,归根结底是因为其社区构建了一个堪称典范的决策和治理机制。这个机制以 Guido van Rossum (BDFL,Pythoners 都知道这是什么意思), DavidBeazley, Raymond Hettinger 等人为核心,以 PEP 为组织平台,民主而有序,集中而开明。只要这个机制本身得以维系,Python 在可见的未来里仍将一路平稳上行。

最有可能向 Python 发起挑战的,当然是Java。Java 的用户存量大,它本身也是一种战略定位清晰而且非常坚定的语言。但我并不认为 Java 有很大的机会,因为它本质上是为构造大型复杂系统而设计的。什么是大型复杂系统?就是由人清清楚楚描述和构造出来的系统,其规模和复杂性是外生的,或者说外界赋予的。而 AI 的本质是一个自学习、自组织的系统,其规模和复杂性是一个数学模型在数据的喂养下自己长出来的,是内生的。因此,Java大多数的语言结构对于大数据的处理和 AI 系统的开发显得使不上劲,你强的东西这里用不上,这里需要的东西你做起来又别扭。而 Python 在数据处理方面的简洁强悍早就尽人皆知。对比两个功能相同的 Java 和 Python 机器学习程序,正常人只要看两眼就能做出判断,一定是 Python 程序更加清爽痛快。

大概在 2003 或者 2004 年的时候,我买过一本 Python 的书,作者是一位巴西人。他说自己之所以坚定的选择 Python,是因为他小时候经常梦到未来世界将由一条大蟒蛇(蟒蛇的英文为python)统治。我当时觉得这哥们好可怜,做个梦都能梦到这么恐怖的场景。但今天来看,也许他只是像黑客帝国里的程序员安德森一样,不小心穿越到未来,并且窥探到了世界的真相。
  • 大小: 174 KB
1
3
评论 共 1 条 请登录后发表评论
1 楼 刃之舞 2017-07-11 17:03
独立一个语言毫无意义,做这行久的人,只要在一个语言上达到了一定的层次,换其他的语言并且达到相应水准的速度也是极快的,这应该是做这行人的常识,语言只是形而下的东西,纠结于形而下的东西而不思索形而上这只是初涉这一行的人的现象,因为他们无暇顾忌到这些。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • springcloud中文手册API

    Spring Cloud 目录 特性 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序上下文层次结构 改变引导位置Properties... 加密和解密 端点 Spring Cloud Comm...

  • 使用 Flask 和 AngularJS 构建博客 - 1

    在这个教程中,我们将使用 Flask 和 AngularJS 构建一个博客。 这是这个系列教程的第一部分,在这部分我们将专注于构建 REST API ,该 API 将被 AngularJS 应用使用。 目标 该应用的目标非常

  • Spring Boot入门(3)处理网页表单

      本次分享将介绍如何在Spring Boot中处理网页表单。  网页表单是网页开发中的重要内容,它在HTML中的标签为<form></form>,在网页中主要负责数据采集功能。我们在浏览网站时,常常会碰到注册账号、...

  • 对比多个手机Web应用开发框架搭建和开发流程的优劣

    在这个过程中,我会尽可能地搜集资料和大家一起分享关于这块的技术发展状况,同时也会带着大家找到一个比较适用我们的移动开发平台和实例。 当然,这个过程需要大家一起来关注和提出建议。 对于web App的发展,这...

  • 阿里云OSS、数据校验和表的分析

    品牌表 新增菜单 ...是在 index.js 中定义是否有权限的,注释掉直接返回 true,一直都有权限 /** * 是否有权限 * @param {*} key */ /** * 是否有权限 * @param {*} key */ export function isAut

  • REST 在 Java 中的使用

    REST是一种混合的架构风格,它的由来以及它的架构元素在笔者的前两篇文《REST架构风格的由来》和《REST架构风格的架构元素》中已经描述了。本篇主要描述一下J2EE对REST的支持。 Java是在J2EE6中引入了对REST的支持...

  • php 基础代码大全(不断完善中)

    返回由所有已定义变量所组成的数组(包括环境变量、服务器变量和用户定义的变量) /* unset() */ * unset ()仅删除当前变量名和引用,其值并未被删除 * 引用传递中,删除一个变量及其引用,其他变量及引用均...

  • Android组件化开发

    随着APP版本不断的迭代,新功能的不断增加,业务也会变的越来越复杂,APP业务模块的数量有可能还会继续增加,而且每个模块的代码也变的越来越多,这样发展下去单一工程下的APP架构势必会影响开发效率,增加项目的...

  • Java RESTful Web Service实战(第2版) 1.7 Java领域的其他REST实现

    1.7 Java领域的其他REST实现 Java领域存在很多REST实现,我们以是否遵循JAX-RS标准,将它们分为两组。前者是JAX-RS标准参考实现之外的厂商实现,后者要么是因为出现较JAX-RS标准早,要么干脆跳出了JAX-RS标准的定义...

  • 马丁路德金博士的三段演讲录音

    1.Our God Is Marching On! - 25 March 1965 在线收听 Let us therefore continue our triumphant march (Uh huh) to the realization of the American dream. (Yes, sir) Let us march on segregated housing (Yes, si

  • 马丁路德金博士的演讲录音(二)

    上一次贴了马丁路德金博士的三段演讲, 今天再贴一些,另外大家可以去http://www.stanford.edu/group/King/popular_requests/ 找到更多。 1. Ive Been To The Mountaintop - 3 April 1968 (Kings last speech)Dr. Martin Luther King, Jr. delivered

  • “请帮助另外10个人吧”——一个德国小孩的故事

    刚才被这个故事感动得热泪盈眶: “请帮助另外10个人吧”———一个德国小孩的故事------------------------------------------   这是发生在德国的一个真实感人的故事。2003年母亲节,节日的温馨气氛再次燃起了伊特洛孤儿院孤儿德比对母亲的思念。电视机内一个6岁的小男孩在帮父母修剪草坪,德比对修

  • 如何做一个负责任的博客

    今天看到博客中国有这样一篇文章《老博客现身说法:如何做一个负责任的博客》,其中提到了做一个负责任的博客应该做到下面5点: 1.坚持时时更新2.要尊重版权3.不要散播谣言4.博客要尊重社会公德5.博客要互相尊重保持基本的礼节 对照自己,最大的困难是第一点,写些什么?写不写的出来?这个比较难。 另外,关于版权,也是一个问题。自己不能写的话,就会趋向于转载别人的文章,这里就有个版权的问题。 这篇文章的作

  • 几部想看而还没有看过的电影

    1. 陈果《去年烟花特别多》和《细路祥》2. 《秋天的童话》3. 张国荣《流星语》4.一个字头的诞生5《天浴》 6.三、正午 这是一个告诉男人正义和责任是什么的影片。它是美国六十年代(好象是)拍的一个西部片,是黑白画面的。主人公是一个小镇上的警察,他为了维护小镇居民的安全,将一个坏蛋绳之以法,现在这个坏蛋被释放出狱,在正午十二点前到达小镇来找他复仇。他需要小镇上的人帮助他来制服

  • 真话和假话

    今天在天涯看到押沙龙先生的一篇文章中说:"在一个只有撒谎者才能生存的环境里,生存下来的都是些撒谎者,这是一个很简单的逻辑。"面对这种环境,哈维尔认为“假如社会的支柱是在谎言中生活,那么在真话中生活必然是对它最根本的威胁。正因为如此,这种罪行受到的惩罚比任何其他罪行更严厉。”他说:“说真话,就是按照人的本性或良心说话行事。”精辟呀。

  • 有感于"3000万光棍找不到老婆"

    "3000万光棍找不到老婆" 最近常看到报道讲我国出生性别比偏高的问题,今天又看到一篇《性别失衡,2005年起中国男子娶妻难》 首先这个"3000万光棍找不到老婆",比较有趣,不知道“找到老婆的”还叫不叫光棍? 其次,假如这个说法成立,那绝对是一个big business! 看看水源就知道这是一个怎样巨大的问题啦。 与昨天有关打击网络色情的报道一比较,相映成趣、意味深长。 3000万啊!3000万

  • 向赵老师学习

    赵老师,你是我的偶像! 赵老师,你业务突出,几十年如一日,把《动物世界》演绎得炉火纯青,让小弟我崇拜地五体投地! 从今天起,我要向你学习,做一个“高尚”的人,一个纯粹的“人”,一个有“道德”的人,一个 “脱离”了低级趣味的人,一个“有益”于人民的人! 立此存照!

  • 反乙肝歧视:不仅仅是1.2亿人的胜利

    我有一个习惯,每当我被某个东西感动时,先是我的汗毛会倒竖起来,然后有眼泪涌出。比如那篇Smith, 比如孙志刚,比如电影《因父之名》的最后。对于这种反应,我根本无力控制。上个星期五的中午,吃过饭路过书报亭买了一份《南方周末》,看到下面这篇报道,在阳光下,我再一次热泪盈眶。我的脑子浮现的只有周一超撕掉判决书的那一幕。周一超已经离我们远去,但愿这种悲剧永不再发生。用“肝胆相照”网友纪念周一超的

  • 台风云娜在浙江登陆 已造成63人死亡15人失踪

    当我们因为台风来而倍感凉爽的时候,浙江省已倒房18300余间,造成63人死亡,失踪15人,受伤1800多人,其中重伤185人。在自然面前,人太卑微了。 

Global site tag (gtag.js) - Google Analytics