5 月 13 日,由 ThoughtWorks 主办的 2017 技术雷法峰会在北京召开。
正如官方宣传提到的:“ThoughtWorks 技术雷达” 并非一个客观的行业分析或者报告,也无意成为一份权威的官方文档。由各行各业诸多顶尖技术专家组成的 ThoughtWorks 全球技术委员会(TAB)每年定期讨论全球热门技术的发展现状,并以雷达形式对各类技术的成熟度进行评估并给出建议,为从程序员到 CIO/CTO 的利益相关者提供参考。而这也是大会名称之所以叫 “雷达” 的意义所在。
13 日上午,ThoughtWorks 高级咨询师,中国区数据团队资深技术专家佟达,在大会上发表了题为《无处不在的Python》的主题演讲。
Python 已经有将近 30 年的历史,在过去 30 年中,Python 在运维工程师和数据科学家群体中受到广泛欢迎,然而却极少有企业将 Python 作为生产环境的首选语言。在最近几年,这一情况有所改变。随着云计算、大数据以及人工智能技术的快速发展,Python 及其开发生态环境正在受到越来越多的关注,技术雷达上和 Python 相关的技术也越来越多。为什么 Python 成为了 “被选中的语言”?这一趋势将给企业 IT 带来怎样的变化?
以下为演讲全文(雷锋网(公众号:雷锋网)做了不改变原意的修改):
刚才我们的几位同事已经给大家介绍了我们在过去一段时间看到的一些技术趋势,这些趋势怎么样落地到实际呢?今天我们给大家看一看用什么样的语言比较合适。所以我的主题是无所不在的 Python。
我今天不会讲怎么样用 Python 编程序,我今天主要给大家讲的是 Python 的无所不在。在我们最新的一期技术雷达上面关于无所不在的 Python 是这么说的:Python,这门语言总是不断的出现在有趣的地方。这句话让我想起来我上学的时候,我的注意力不是很集中,好奇心特别强,到处什么事情都想参与一下。老师经常夸我,怎么哪儿都有你?天天不务正业!今天我发现不务正业的说法可以有这样一个说法,就是总是出现在有趣的地方。
我们看一下 Python 这门语言到底是怎么不务正业的?说起不务正业让我想起来这么一个大人物,他十几岁的时候先进入了一个印刷厂工作作为印刷工,后来成立了自己的印刷公司,再后来发行了报纸,他在上面开始发表文章。当所有人都以为这个人要他要投身在,把自己的余生都投身在印刷行业的时候,他去干嘛了呢?他去成立了北美第一个志愿者组成的消防队。后来他又成立了北美的第一家医院。这个时候他不务正业停不下来了,有一天他到雷雨天放风筝,然后发明了避雷针,对我们的气象事业做出了贡献。后来他成为美国驻欧洲的代表,作为一个非常出色的外交官,在北美独立的过程中又起到了非常大的作用。后来他起草了《独立宣言》,现在他的头像印在美钞上。这个人一生都在不务正业中,这个人在美国最伟大人物排名第五,他就是富兰克林。在他墓碑上刻的是,他说自己是一个印刷工。然后他在印刷工外做了很多不务正业的事情。
Python 在各大排行榜也能排在前五位,Python 之前是作为系统管理工具的开发语言出现的。在上世纪八十年代末,九十年代初的时候 Python 刚刚发明的那个年代,实际上是处在什么时候呢?各种科学家,工程师都在尝试着不同的操作系统,Python 认为要给程序员们提供一个更好的管理系统的工具,所以为了这样一个目标而发明了 Python。过了二十多年我们发现,可能当年有几百个操作系统在同步开发,到现在是什么情况?可能只剩下了几十个操作系统还活着,而 Python 内置在大部分这些主流的操作系统之内的。为什么 Python 对系统管理工具是非常合适的语言呢?因为它的执行效率远高于 shell,而且开发效率远高于 C。现在我们听到比较著名的操作系统上面都是基于 Python 开发的。当我们发现我们管理任务越来越复杂的时候,我们系统的配置越来越复杂的时候,我们又有了配置管理的概念。而在配置管理领域 Python 也占据了非常多的份额,比如说曾经在技术雷达上也出现过一些系统管理工具里非常著名的技术。当把这些基础设施变成代码管理的时候,我们发现我们其实还希望对这些代码,像我们写业务代码一样做单元测试,做自动化测试。在最新的一期技术雷达里,我们持续关注着这样的趋势,基于前面我们说的系统管理工具技术,像一些专门对基础设施即代码的测试工具,比如 molecule、testinfra 也越来越流行。
除了在系统管理工具领域, Python 很自然的就平滑地过渡到了软件开发工具领域。从系统管理工具到软件开发领域 Python 一直都在帮助着程序员,帮助着工程师提高效率。在软件开发工具无论是版本控制还是版本评审,Python 进入的都是比较早的,应该说是比较先驱的一波。Python 不仅在早期进入了软件开发工具领域,在新一期技术雷达里也出现了,一种老树开新花的感觉,即使在持续交付领域也是一枝新秀,Netflix 开源的 spinnaker。它主要利用了云技术对一些应用更适合的搭建,它利用了很多云平台以及容器技术,可以和我们现有的架构非常好的融合在一起。
实际上,在软件开发工具领域里的后来者们可能看起来都比先驱们——比如 Python ——更出色一些,或者接受度更广泛一些。这种情况也给了 Python 去做其他事情的理由,Python 至此就走上了跨界这条路,而且越走越远。
Python 首先尝试的领域是WEB开发。我们说 Python 做WEB开发,大家也都听说过,但是WEB开发并不是 Python 的主要标签。比如曾经在我们技术雷达上出现的一门技术,它可以基于 Python 开发一些WEB的网站,还有不少更小巧的、基于Python 的网站,比如 Youtube 等等网站。但是 Python 语言本身和其他语言相比,尤其就是和互联网泡沫同一年出生的语言,Python 在外部开发上的专注度看起来总是心不在焉。
在这个时候 Python 社区把注意力都放在哪儿了呢?都放到了科学计算领域。那个时候科学计算领域已经有了几个比较著名的软件,那么 Python 凭什么在这个领域里占有一席之地呢?实际上在 1995 年,也就是大家都开始研究互联网的时候,Python 的作者就参加了一个由一些科学家组成的小组,唯一目标就是使 Python 在科学计算领域广泛使用起来。为了使 Python 符合科学家的直觉并让他们使用,Python 的作者甚至改了一些Python 本身的语法去讨好科学家,让科学家能更平滑使用 Python 做一些科学计算。所以到了今天我们发现 Python 在科学计算领域已经是一个非常重要的分支。就在Python 科学计算小组成立的同一年有一个软件库发布出来,就是 Maple。
在 2007、 2008 年这个时期,我们进入了云计算时代,基于过去一段时间 Python 在系统管理工具的积累,以及其本身具备了非常好的系统集成能力,Python 在云计算领域可以说大放异彩。最著名的就是大家都应该都听说过的 Openstack,它里面最著名的开发语言就是 Python。不仅在私有云领域,在公有云领域,包括 AWS,包括 Google 云,当这些公有云提供出 SDK 的时候,它们首选的技术路线依然是 Python。现在在阿帕奇基金会下面有一个项目,它是用来评各个不同云之间异构性的,也是基于 Python 做的。在云计算后期兴起的容器技术也是基于 Python 做的。
当云计算技术发展起来后,发现还需要大数据技术。其实Python 并不是一门开发语言,但是因为 Python 很早就在科学计算领域占据了一席之地,所以当我们希望能够让数据分析师使用大数据工具的时候,Python 变成了一个不可忽视的因素。所以很多开源工具或者是大数据主要使用的工具都会提供一个 Python 的接口给数据分析师使用。在 Spark 刚刚发布的时候,它也带了一个 Python 接口,这都是曾经在技术雷达出现的技术。虽然底层实现不以 Python 为主,但是上层的接口一定会有 Python 存在。除了本身主要的数据分析工具以外,我们还有什么呢?比如 Data Pipeline,最新一期雷达里介绍的 Airflow可以让工程师将 Data Pipeline 更好的可视化出来,可以知道数据怎么样一步一步处理的。这个工具相比于之前的 Hadoop 的生态环境它的可视化效果更酷炫一些,可用性更高。
最近这两年最火的词就是人工智能。Python 过去多年积累在人工智能到来的时候出现了大爆发。在传统概念中,我们认为人工智能主要谈到的是感知层的技术,比如图像处理、自然语言识别等等这些技术。尽管像 OpenCV 等工具,底层工具不一定以 Python 实现的,但是它真正用到最广泛的地方却是以 Python 接口提供出来的这部分内容。在做图像识别的时候,尽管用的是 OpenCV,但是用的都是 Python OpenCV库。最近两年人工智能火起来,非常重要的一个原因是深度学习火了,深度学习被证明非常有效,尤其在数据量特别大的情况下去洞见一些特征的时候,比人工寻找更有效一些。在深度学习领域几乎没有任何其他语言可以跟 Python 相提并论的,比如 Caffe,Theano,TesnorFlow,Keras 这些非常流行的深度学习框架,都是以 Python 为主要开发语言。还有一个有趣的现象,就是 FB 深度学习的工具 Torch,最早它的前端工具是 Lua,在2017 年发布了一个新的版本叫做 PyTorch,它发现如果不提供 Python 接口的话,它好像没有办法流行起来。这再次证明了在深度学习领域目前 Python 是处于非常主导的地位。
你以为就是这些了?并不是。
在影视制作里大家知道哪一门语言是最流行的吗?其实也是 Python。这方面的工具也许大家不一定熟悉,但这些工具都是在做电影行业里能够经常用到的。这里的每一个工具里都提供了 Python 作为嵌入式脚本的接口。实际上,在好莱坞做很多大型的特效电影的时候,里面很重要的就是用 Python 编写特效脚本,然后再用它的渲染引擎去渲染。除此之外,还有算法交易和量化投资领域,Python都是最流行的语言,桌面开发 Python 也能做。嵌入式编程也有选择 Python 作为编程接口,比如树莓派。在 IoT 领域,以前大家不会想到 Python 在 IoT 作为主要语言出现的,但技术雷达上出现的 PlatformIO 和 masquitto,都是基于 Python 的。借用现在互联网流行流行的一句话,Python 你这么厉害,你咋不上天呢?事实上 NASA 确实是在用Python,做地面的数据仿真和数据处理等等工具。用 Python 确实能让你上天!
这里我们再回顾一下前面提到的各个领域,Python 在早期是以系统管理工具作为目标来出现的。后来到了开发工具,以及 Web 开发等等,Python 都起到了至关重要的作用。还有什么呢?还有云计算,大数据,科学计算,人工智能,这些技术的发展让 Python 更加广泛的被认识,被使用。还有一些我们可能都不是那么了解的领域,以及今天可能还没有谈到的领域,等等,Python 都会有一定的作用在里面。
为什么选择 Python?这要从现在行业的变化说起,前两年当我们谈到O2O 的时候我们也许还觉得是一个新潮的词,而今年谈 O2O 的时候发现,现在的业务已经没有线上线下之分,只有已经数字化和即将数字化的业务。这带来的是什么变化呢?是我们业务上的界限,行业的界限越来越模糊。比如说有的视频网站,开始去做汽车了;有的做手机的公司也开始做空气净化器了;自行车现在都能连互联网。我们发现曾经难以想象去数字化的这些东西都开始跟软件、 IT、互联网结合。
在座的各位可能都是公司的决策层,各位领导在拍脑袋想要做一些创新业务的时候,它对开发团队有什么要求呢?我们会需要更快的交付速度。因为我们的业务有更快的变化,所以我要有更快的交付速度去尝试,去验证我们的想法是否正确。所以有了 DevOps 的兴起,可以让开发、测试、运维紧密合作。还有平台的兴起让工程师可以专注在业务上。还有新一轮人工智能浪潮让软件有可能自我学习,自我进化。当大家在给开发团队提这些需求的时候,我们有更多的业务并且需要更快的交付速度。当把这些诉求提给自己的交付团队的时候,我们会发现交付团队非常头疼。现在的技术已经细分到每一个技术可能都会非常大且非常深入,我们需要了解 DevOps,需要知道云计算等等,可能一个业务会把所有的技术全都利用起来,全都串起来,全都使用。对于工程师来说,每一项学习的时候,这个成本是非常高的。而对于决策层来说,也没有办法接受开发团队的所有东西都是从零开始。但是幸好有了 Python,我们发现 Python 在各个领域都可以做一点事情。这就是 Python 现在变得如此流行的一个很重要的原因。
对于在座的企业家来说该怎么做呢,对开发团队应该有什么样的改变呢?在这里我把下一代的企业分成两个主要的方向:一类是以企业和其他开发者为用户,深入做垂直领域,将细分领域的方向作为主营业务的公司。这类公司可能是做云平台的公司,做 PaaS 的公司,做运维的公司,做监控的公司,还有我给保险行业提供报价算法的公司。这些都是我们所谓的去专注在一些细分领域的公司。对于这样的公司,它们面临的挑战就是如何让用户更愿意使用自己的产品。还有一类是直接面向最终消费者,我们希望能够让消费者有更统一的体验。现在任何一家互联网公司都希望能够把对于消费者的各个点上的服务穿成线,贯穿消费者所有的体验以至于所有生活中的方方面面。
还有一些巨无霸公司,比如 Google 和微软,可能两方面都提供,但是对于规模不那么大的中小型公司,这两个可能是二选一的一个选择。而对于这两个企业 Python 带来的是什么呢?对于面向企业和开发者的来说,我建议大家给自己的产品加上 Python 的接口,因为 Python 本身能跟其他行业的东西很容易集成在一起,也是为我们很多的用户所喜欢的。从用户体验角度,从开发者角度来讲,Python 是更好的语言,也是更好的接口语言,值得我们以 Python 作为接口提供出去。另一类,对于消费者提供跨界服务的公司来说,可以考虑用 Python 集成各种各样的服务,这样能够降低成本,同时也能够减轻自己开发团队的压力,让开发团队能够减少一些学习成本。
最后要提一件事,当我们考虑给自己产品加上 Python 接口或者考虑用 Python 集成各种各样服务的时候,我要提醒一句话:Python3 现在已经成熟了,希望大家还是使用 Python3,Python3 是 Python 的未来。如果在座有 CTO,请回去跟自己的开发团队说,新开发的应用,请使用 Python3。
====================================分割线================================ 本文作者:AI研习社 本文转自雷锋网禁止二次转载, 原文链接 相关资源:新年快乐! python实现绚烂的烟花绽放效果