我的主人是荷兰人,叫做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有着成熟的社区,前途还是无比光明的,这一点,我毫不怀疑!

相关阅读:

Java : 一个帝国的诞生

Java虚拟机和Python解释器的硬盘夜话

在AI看起来已成为大势的情况下,传统Java后台开发,前景如何?

(完)

码农翻身,用故事讲解技术本质, 更多精彩文章,请移步《码农翻身三年文章精华

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

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

      " 忽如一夜春风来,千树万树梨花开 ",多么美好的诗句,迎来的是2019年的第一场雪(其实我也不知道下的到底是啥,可能是雪,也可能是雨,哈哈,我不管既然这么冷的天下了就把他当作 ...

  2. 古代汉语欣赏与历法 ——千树万树梨花开

    梨花写得最富奇趣的当推唐代大诗人岑参的<白雪歌送武判官归京>,开头四句是这样写的:  "北风卷地北草折,胡天八月即飞雪.忽如一夜春风来,千树万树梨花开."  胡天八月, ...

  3. 连载《一个程序猿的生命周期》-《发展篇》- 26.且听风吟,静待花开,慢慢走向人生赢家...

           昨天一早感觉天气很好,完全没有上班的意愿.上午赶到公司处理一些无关紧要的事儿,于是乎下午带着大宝去八大处爬山,在感受自然风光的同时想到一句话:且听风吟,静待花开.在人生过程中所做出的努力 ...

  4. 一年级古诗风语文知识心田花开汇总

    一年级学生会借助拼音识字读文,形成古诗初步的学习方法.心田花开对古诗风知识点进行汇总. 1.熟读古诗风并背诵 fēng 风 táng lǐ qiáo 唐.李峤 jiě luò sān qiū yè 解 ...

  5. [AFCTF2018]花开藏宝地

    [AFCTF2018]花开藏宝地 附件: 前面4个都是加密文件,第5个给了个空文件. 题面.txt 第8080423800797740568864856616050427859314866630262 ...

  6. 忘记,只需一朵花开的时间。

    就当遇见是一场我挥手告别的梦境­, 忘记你只需要我睁开双眼的时间­, 你们都是我青春里匆匆忙忙的过客 ­, 因为短暂的如同一朵花开的时间­. 心还会疼吗?­ 不­... 我说的离开 .  是指永远都不 ...

  7. 心田花开教学让你快速掌握心田上的百合花写法与修辞手法运用

    心田上的百合花中的词语用法.修辞手法.写作手法等知识点都是重点知识,心田花开教学从心田上的百合花文章中提炼出了词语用法.修辞手法.写作手法等知识点,让你快速掌握心田上的百合花的学习重点及知识点. 一. ...

  8. 相逢在栀枝花开的季节

    每逢七月,夏意正浓,正是栀枝花开得最盛的时候. 风轻摇地吹动了树叶,窗外的阳光透过玻璃轻盈地投射到房间的角落上,斑斑驳驳,甚是可爱.品一口茗香,打开51CTO学院官网,忽然发现在消息处有一枚红点,顺手 ...

  9. 开放流程自动化标准测试实验室花开遍地,全球巡礼—上篇

    当你擅长一项技能或手艺时,你会做什么?当然是为亲朋好友表演,然后去各地巡回演出.这正是The Open Group开放流程自动化™论坛多位成员在做的事情:推动开放流程自动化™标准在全球范围的开发.测试 ...

  10. 花开就是禅,多情即佛心

    用一生的时间静待一朵花开,用一生的痴恋唱一首情歌,虽然残酷,但很唯美.放了一生,也无法放下的爱,如古老庭院里石缝间寂寞的花草,羞羞怯怯,却拚了命地顽强生长,夜深人静时,在满月的清辉下,静静绽放.   ...

最新文章

  1. UNIX网络编程——客户/服务器程序设计示范(一)
  2. MYSQL交通系统查询,城市公交查询系统的设计与实现(SSH,MySQL)(含录像)
  3. 马来西亚国立大学的计算机,要拿到马来西亚国立大学的 offer难吗?
  4. 2013-10-10
  5. Linux笔记-bash中执行命令并将执行的命令结果存储为变量
  6. 【Drools三】打工人学习Drools高级语法
  7. python的常用函数模块_(5)Python的常用模块函数
  8. PAT (Basic Level) Practise (中文)- 1002. 写出这个数 (20)
  9. matlab dpabi安装,Android 8 应用安装时 ABI 确认过程
  10. 游戏实时语音解决方案是怎么炼成的
  11. word修改正文样式影响标题样式
  12. 使用广义α方法(the generalized-α method)求解时变动力学问题
  13. 自定义chromium浏览器
  14. 为何vSAN需要至少2n+1台主机,来防止n台主机出现故障(FTT=n)?
  15. 计算机cs怎么使用技巧,CS里的fps设置方法(显卡篇)
  16. Verilog:【7】超详细WaveDrom教程,时序图绘制利器,看这一篇就够了。
  17. 力扣第185场周赛总结——字节跳动专场
  18. RAM生成和调用(ISE)
  19. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-PnP和实践
  20. 上市 阿里上市最新估值1300亿美元

热门文章

  1. CTF-reverse菜鸡想要走出菜狗设计的迷宫
  2. php给发qq消息,PHP 模拟QQ登录及发送消息实现方法
  3. PC微信端浏览器js点击失效
  4. 网关和路由器功能的有哪些不同
  5. 为什么进行商业分析?什么是商业分析?(二)商业分析的角色、怎样进行商业分析与准备、相关方识别
  6. turtlebot运动控制问题(不用键盘控制,自己写控制节点控制地盘)
  7. 【Kubernetes】Pod学习(五)从Pod到容器:Downward API
  8. ffmpeg视频转码压缩
  9. vue3中使用swiper7及autoplay无效问题
  10. JAVA实现经典游戏俄罗斯方块