专栏首页日常学pythonPython:忽如一夜春风来,千树万树梨花开

Python:忽如一夜春风来,千树万树梨花开

作者:刘欣 公众号:码农翻身

我的主人是荷兰人,叫做Guido Van Rossum, 这是个不大容易念的名字,估计很多人现在也不知道怎么去发音。 球迷老刘看到Van ,总是想起范·巴斯滕。

上个世纪80年代,我的主人在CWI公司,经常“折腾”一个叫做Amoeba的分布式操作系统, 在这个OS上他想用脚本语言写点儿程序,做点儿系统管理的工作。主人首先想到了Shell,简单易用,可惜的是它难以调用Amoeba独有的系统API。

有人建议他用C语言来做,说是贴近硬件,性能高, 但主人认为这只是一点系统管理,“微不足道”的编程,用C是典型的杀鸡用牛刀!

之前主人曾经帮助开发过ABC语言, 能不能把它改造一下,拿过来使用呢? 也不行,这个语言太难于扩展了!

左冲右突之后,只剩下一条路了: 自己创造一个编程语言!

Python创世纪

1989年的圣诞假期,主人有大把的休闲时间,决定尝试一下。

既然想要实现的是一个容易使用的脚本语言,那肯定得有一个解释器,这难不住他,人家可是做过ABC这个语言开发的,实现一门语言的经验极为丰富。

当然,主人的野心绝不仅仅是Amoeba平台,一定得让他可以运行在各个OS上面,一定得跨平台。

class, 继承,核心数据结构(string ,dict,list),异常处理......相继被引入,主人还从Modula-3那里借鉴了module的概念。

这期间主人做了一个艰难的决定: 用缩进对齐来代替大括号!代码语句不对齐,就给你报错!

我不知道主人的脑子里是怎么想的, 对于这个决定,你到底是喜欢呢?还是喜欢呢?还是喜欢呢!

到了命名的时候, 主人是英国著名剧团Monty Python的忠实粉丝,所以他就把我正式命名为Python!

奥,差点忘了,我的主人还做了一个非常富有远见的决定:可以用C/C++写模块来扩展Python,你可以把那些性能要求高的模块,按照Python扩展的要求用C/C++写好,编译成.dll或者.so,就可以在Python中调用了。

这个决定引领着Python到处攻城拔地,20多年后在一个特别热门的领域获得了爆炸性的发展,此处先按下不表。

发展

1991年2月, Python 0.9.0 正式发布。

我首先受到了主人同事们的欢迎,他们使用我编写各种各样的程序,不断地提建议,改进。

我想我是遇到了好时候,90年代个人电脑开始进入家庭,性能越来越强劲,程序员们再也不需要榨干每一个字节的内存,每一毫秒的CPU了。 由于我简单易用,很自然,很多人开始使用我来进行编程。

主人建立了maillist, 使用我来编程的用户都可以通过邮件交流。 主人心胸开阔,接受来自不同领域的用户对Python的改进,如果你提交的代码进入了标准库,那可是极大的荣耀。

由于主人有至高无上的裁决权,从这个时候开始,他被称为“终身的仁慈的独裁者”。

这个称号将一直保留到2018年。

Java

1994年,我升级到了1.0 版本。 这个版本里包括了函数式编程的特性,例如lambda, map,filter,reduce等。

想想Java 一直等到第8个版本才引入函数式编程,都20年以后了,实在是太落伍啊,哈哈。

提到Java,我就来气,这小子1996年才发布第一个正式版本,凭什么混得比我好?!

他是“Write once ,run anywhere ”, 难道我不是吗?

他有虚拟机,我也有虚拟机啊!

我的语法比他简洁得多,一行抵他10行!

后来我也想通了,可能最大的区别就是他有个好爸爸 (Sun 公司)吧。

这小子确实是运气好, 当时的桌面开发几乎被微软所统治, 他确另辟蹊径(被逼无奈?),成功地开辟了新的领地: 服务器端开发。 他们几个大公司,Sun , IBM, Oracle 等还搞了一个什么J2EE的标准,要规范企业应用开发市场,忽悠,就忽悠去吧。

(参见:《Java : 一个帝国的诞生》)

不过我也听人说,他的虚拟机确实不错,效率高,性能强悍。 什么hotspot能把字节码编译成本地代码,还是挺厉害的。

不过我的主人也不是吃素的,他发起了一个活动叫做Computer Programming for Everybody(CP4E)的活动,想让每个人都学一点儿编程的知识, 于是我就顺理成章地被作为一门易学易用的语言给推广了。

但是相比于企业界的大忽悠们,CP4E明显地要矮一截。 J2EE忽悠了不少企业和程序员,那些公司也赚得盆满钵满, 等到大家意识到这是一个大坑时, 我觉得Java这小子可能要完蛋了。

可是没想到又出来一个叫Spring的轻量级框架,大家欢天喜地地转移阵地了,真让人无语。

Killer Application

什么是Killer Application? Ruby on Rails就是典型!

Ruby 这小子10多年来一直默默无闻,2004年随着Ruby on Rails的横空出世,突然间红得发紫,无数程序员趋之若鹜。

用现在时髦的话来说,那就是“爆款”!

Java 有Spring,Hibernate, myBatis , JavaScript早些年有jQuery,后来前后端分离后,又出现了Angular, Vue, React争奇斗艳。

我曾经问过主人:“我们有Killer Application吗?”

主人说:“早些年有个叫Zope的框架,还是挺热门的,现在Web开发,不是有Django, Flask吗?”

“可是和Ruby on Rails这样的网红比起来,还是不够吸引眼球啊!”

主人教育我说:“我不喜欢Killer Application,因为那会让多数人或者社区将精力集中于一个地方。Python是一个应用广泛的语言,基于Python已经产生了很多好用的Web框架,比如Django等。但是Python不需要Killer Application,至少目前是这样,而且我相信随着Python社区的发展,会有很多Killer Applications自然出现。我喜欢多样化的应用。”

好吧,也许主人是对的,但是如果有个Killer Application, 肯定能吸引更多的程序员啊。

忽如一夜春风来,千树万树梨花开

老天会偏爱那些坚持的同学, 随着时间的发展, 主人的策略开始奏效,我那简单易学、简洁快速的优势开始发威,在各个领域四处开花。

创业者可以使用我快速地搭建产品原型,让产品迅速上线。

搞研究的科学家们经常用我写点儿小程序,他们为什么不用C, 不用Java, 麻烦啊,那些小程序经常是一次性的,验证结束了,就可以丢弃, 用我可以快速地写出来,代码还少,调试起来也方便。

现在系统越来越庞大,运维越来越重要,很多运维的工具都是使用我来开发的, 不要忘了,这可是Python诞生的初心啊。 Java 那啰嗦的语法肯定是不行了。

还有不知道从哪一年兴起的爬虫程序,疯狂地从网上爬数据做分析,程序员发现,用我来编写爬虫,简直是太合适不过了, 运行速度慢?瓶颈不在我这里,是在网络IO!

......

人生苦短,我用Python,成了一个响亮的口号。

我高兴地Java说:“别看你号称称建立了一个帝国,在你帝国的每个领域,几乎都有我Python的影子。”

Java 就来揭我的伤疤:“你还是使用引用计数做垃圾回收啊!出现循环引用咋办呢?”

到2000年, Python 2.0发布的时候,这个问题终于被解决掉了。 可是这小子又来使坏:“你的那一把大锁GIL什么时候干掉啊?”

唉,这一点我向主人抱怨过多次了,主人也表示为难:“当时为了支持用C语言开发扩展库,我弄了个GILL, 让那些扩展库都不必考虑线程安全问题,很容易被集成进来。现在看来,真是一把双刃剑,改起来很难了!”

(参见: 《Java虚拟机和Python解释器的硬盘夜话》)

爆发

好运来了,挡都挡不住,Google的AlphaGo给全世界做了人工智能的“洗脑”以后,我的好日子就真的到来了。

还记不记得主人做出的那个英明的决定: 可以用C/C++等语言来编写模块扩展Python ?

那些人工智能的开发包为了性能,基本上都是C/C++写的,现在封装一下,让程序员通过简洁的Python来调用,岂不是绝配?

人工智能越炒越热,我也随着火爆起来,热度嗖嗖蹿升。曾经入侵过后端开发,大数据,手机端开发的Java这一次没有办法,只有看着我一骑绝尘了。

不过我也有点儿小担心,是不是热得过头了? 这人工智能,机器学习到底落地了多少解决方案?现在的很多聊天助手我怎么觉得有点儿弱智呢? 那些号称经过机器学习的,识别率很高的语音输入法怎么难以准确识别老刘那英文专业词汇呢? 真正的强人工智能, 科学家们描绘的美好场景什么能实现呢?

还有,大家要小心,有些无良的培训机构,号称是机器学习的课程,实际上就是学习Python而已,机器学习还是需要很强的数学基础的,各位可要瞪大眼睛啊!

未来

不可否认,有个“好爸爸”是很重要的,微软支持自己的C#, Oracle/IBM 等大企业支持Java,Facebook用PHP, 而我似乎一直在民间像野草一样生长。

后来我也找到了一个大靠山: Google。

我的主人也加入了Google, 据说他去Google面试的时候简历上只写了一句话: 我创造了Python。

在Google 期间, 主人花了一半的时间来开发Python语言,他还是那个仁慈的独裁者。

2012底,他离开了Google, 并于次年1月进入DropBox, 我也不清楚具体原因,好像是他想去一个小一点的公司工作吧。

2018年7月,当了近30年的“独裁者”以后,主人觉得累了,尤其是心累。

一个非常有争议的Python改进提案(即 PEP 572 ) 成了压倒骆驼的最后一根稻草,主人接受提案之后,有些人去了像 Twitter 这样的社交媒体并说出了一些真正伤害主人的话语。

主人决定“退位”, 他没有指定继承人,只是要求核心团队思考后续的管理模式,选举下一任“独裁者”。

震惊之余,我也在思考我的未来, 主人只是“退位”,并没有退出,仍然是一个核心开发人员,再说Python有着成熟的社区,前途还是无比光明的,这一点,我毫不怀疑!

本文分享自微信公众号 - 日常学python(daily_learn)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为什么 Python 这么慢?

    对于一个类似的程序,Python 要比其它语言慢 2 到 10 倍不等,这其中的原因是什么?又有没有改善的方法呢?

    sergiojune
  • Python大牛廖雪峰13个案例带你全面掌握商业爬虫!

    这把火已经烧到了程序员的圈子外,从小学生到职场老司机,都开始学习这一门新的语言,门槛低、零基础、操作骚...再也没有什么能阻挡Python晋升网红。

    sergiojune
  • 写 Python 时的 5 个坏习惯

    很多文章都有介绍怎么写好 Python,我今天呢,相反,说说写代码时的几个坏习惯。有的习惯会让 Bug 变得隐蔽难以追踪,当然,也有的并没有错误,只是个人觉得不...

    sergiojune
  • Python基础(一):Python简单

    Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,可以应用于以下领域:

    py3study
  • 浅酌iOS 11兼容性

    苹果在WWDC2017大会,公布了最新的iOS 11,系统新特性肯定是让不少果粉充满期待。在网上已能看到不少关于iOS 11的体验文章,那么iOS 11的新特性...

    WeTest质量开放平台团队
  • Android自动化测试解决方案

    Android自动化测试解决方案 桌面应用程序与浏览器端的自动化测试都已经历了十年的发展,无论是从工具上还是项目管理方 法论上都已经趋于成熟。而移动设备端应...

    用户1289394
  • Python之父二三事

    我以前提到过Guido van Rossum,Python之父,就是他用一部英国喜剧《蒙提·派森的飞行马戏团》(Monty Python and the Fly...

    Crossin先生
  • Knockout.Js官网学习(options绑定)

    options绑定控制什么样的options在drop-down列表里(例如:<select>)或者 multi-select 列表里 (例如:<select ...

    aehyok
  • 软件测试进阶之1——测试进阶方向

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    MyJie
  • 9.5 sed(下)

    sed工具 sed '1'd test.txt sed '1,3'd test.txt sed '/oot/'d test.txt sed '1,2s/ot/t...

    运维小白

扫码关注云+社区

领取腾讯云代金券