下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者

第4期 | Python之父和他的编程理念

2019-05-09 池建强

讲述:池建强

时长10:18大小9.45M

你好,这里是卖桃者说,今天我想和你聊的是 Python 之父和他的编程理念。
每个编程语言的作者都是一个技术传奇,回顾他们创造语言的过程,可以从中看到他们的编程思想和设计理念,这对技术人来说是一件非常有价值的事。
从 2017 年开始爆发后,Python 这门语言的热度就一直居高不下,去年开始还撼动了三大巨头之一 C++ 的位置,一度取而代之挤进了 TIOBE 编程语言排行榜的前三名。虽然 C++ 在今年 4 月份又夺回了第三名的宝座,但这不影响 Python 的热度和受欢迎程度,由于 Python 在大数据和 AI 领域的广泛应用,说它是人工智能时代的第一编程语言,应该是众望所归。
今天咱们就来聊聊 Python 之父 Guido van Rossum 的故事,为了方便,下面我会都称呼他为范罗苏姆。跟大部分语言之父一样,范罗苏姆之所以创造 Python 这门语言,也是因为当时的其他语言没法满足他的需求。
我们先把时间线拉回到 1956 年,这一年,范罗苏姆在荷兰出生,一般情况下,如果中间名是“van”,第一反应就可以猜猜他是不是荷兰人。1982 年,范罗苏姆从阿姆斯特丹大学毕业,获得了数学和计算机两个硕士学位,但相比数学,他更喜欢做计算机相关的工作,用他的话来说,就是热衷于干任何和编程相关的活儿。基本上,所有的编程语言之父,或者说所有的知名程序员,都会有这样一种对编程的狂热情节。
大学毕业后,范罗苏姆加入 CWI,这是一所主要做数学与计算机方面学术研究的机构。这段工作经历对他非常重要,他的编程理念,包括对 Python 的设计思想都是在这里初步形成的。
在 Python 之前,CWI 最为人所知的是在这里诞生了 Algol 68 编程语言,Algol 68 也是范罗苏姆最初接触的语言之一,对他也有很大的影响。当然啦,现在 CWI 以 Python 的诞生地而闻名。
刚进 CWI 的时候,范罗苏姆跟着一个团队做 ABC 语言的开发,期望可以取代 Basic,也是在这个团队中,他第一次获得了编程语言设计与实践的实际经验。但这个项目大概持续了有 4、5 年后失败了,范罗苏姆分析失败的主要原因是,过于追求完美和不够开放。他在之后开发 Python 的时候努力避免了这些问题。所以说,失败不重要,能不能从失败中汲取经验和教训才是关键。
ABC 项目停掉后,范罗苏姆就转到了 CWI 的 Amoeba 团队,做基于微内核的分布式系统,正是这个项目让他有了写一个新语言的想法。
那个时代,流行的语言是汇编、C、Fortran 等,这些语言要求编程者对计算机的运行机制有精确的了解,以充分利用硬件资源达成自己的目标,因为硬件资源实在是太匮乏和宝贵了,程序员们需要榨干计算机硬件的每一滴血和汗才能完成任务。
而 Amoeba 的系统管理程序就是用 C 语言写的。这给范罗苏姆带来了很多困惑,用 C 来实现功能,完成度是没有问题,但是需要耗费大量时间。用 Shell 吧,面对复杂问题又束手无策。Shell 是 Unix/Linux 下的脚本语言,也叫胶水语言,它可以把系统的各种功能通过管道的方式连接起来实现系统运维、定时任务、文件处理、程序安装卸载等工作,但是处理复杂的数值运算或系统调用就很麻烦。
自然地,范罗苏姆产生了一个想法,希望能有一门语言既能像 C 语言一样能够全面掌控计算机的资源,也能像 Shell 一样用起来简单,还具备交互性编程能力,轻轻松松编写一些小的工具包。
普通人,比如我,工作中有时也会有这样的想法,但想来想去,最大的可能还是只停留在想法层面。但范罗苏姆就不一样了,他对自己说,放着我来。
1989 年的冬天,范罗苏姆已经 33 岁了,他加入 CWI 也有 7 年了。在这一年的圣诞节,他为了度过一个有意义的圣诞节,或者为了打发一个无聊的假期,开始编写 Python 语言的编译器和解释器。
这期间大概花了 2 年的时间,到 1991 年,第一个 Python 版本诞生了。编译器是用 C 语言实现的,Python 语言可以非常方便的调用 C 语言实现的库,这一点对于 Python 的发展非常重要。
Python 从一问世,就是一个动态语言,同时也是面向对象的编程语言,具备类、函数、异常处理、列表(list)、词典(dict)、元组等数据类型。
范罗苏姆还在 ABC 语言团队的时候,他就对于什么是好的、什么是不好的编程语言设计有了很多成熟想法。因此,他在设计 Python 的时候,尽可能避免掉了那些可能导致失败的设计。
比如过于追求完美,不够开放,拒绝用户参与到语言的设计中等等。由此衍生出的 Python 设计原则就有 3 条:
不必太担心性能——必要时再来优化;
别追求完美,“足够好”就是完美;
有时可以抄近道,尤其在你之后能改正的情况下。
另外,在最开始的时候,Python 只是个人的实验性项目,没有官方背景,范罗苏姆为了尽快取得成功,某种程度上也是为了尽量争取管理层的支持,在设计的时候采取了很多节约时间的原则,比如最经典的“借鉴任何有道理的想法”。
如果你用 Python 写过程序的话,相信你会对这个原则感同身受。Python 的语法同时受到了 C 和 ABC 语言的影响,比如采用 def 来定义函数,比如等号赋值,比如强制缩进等等。如果你是个 C 或 Java 程序员,习惯了用大括号来划分程序域 —— 其实大部分语言都是这么做的 —— 看到 Python 是用缩进来搞定这件事,你马上会觉得“这个太怪异了”,其实这种做法来自 ABC。范罗苏姆的想法是,如果“常识”上确立的东西,没有必要过度纠结。当然,这种常识是他的常识,至于其他人,你们会习惯的。
Python 中的正则表达参考了 Perl,而内置函数 lambda,map,reduce,filter 等参考了 Lisp,无数优秀的程序员为 Python 添砖加瓦,Python 搞不定的,没关系,我们用 C 实现,于是 Python 有了大量的函数库,尤其在数据分析和科学计算领域。另外,函数在 Python 中是一等公民,所以 Python 同时也是一种函数式编程语言。
当然,并不是所有的事情都能节约时间,在开发过程中,哪些地方能省时省力,哪些必须花费大量时间和精力,范罗苏姆分得清清楚楚,比如这 3 个设计原则:
Python 不能被某个平台绑定,有些功能在一些平台上没法用可以接受,但核心功能必须跨平台。
支持并鼓励用户写出跨平台的代码,但也不拒绝某个平台的特有能力或资源,这一点与 Java 形成鲜明对比。
一个大型复杂系统,应该在不同层级都支持扩展,从而不论是老手还是新手,都能尽可能地发挥自主性。
某种意义上说,范罗苏姆在设计 Python 时所采用的设计哲学,或许是其最终取得成功的主要原因之一。它并不在一开始就追求完美,但足以满足大家的需求,同时一直遵循开放开源的原则,吸引了大量优秀的程序员。他们开始协同改进这门语言,很多涉及 Python 核心部分的重大改变或重构都是由他们提出并落实的。
对此,范罗苏姆也曾说过,Python 是在互联网上发展的语言,完全开源,由一群志愿者组成的专业的社区开发。他们充满热情,也拥有绝对的原创权。
就这样,Python 稳步发展,成为了一代老牌编程语言,并且厚积薄发,在人工智能兴起后,后来居上,成为新一代的热门语言。
人生苦短,你用 Python 了吗?
对了,昨天极客时间刚好上线了一个新的 Python 专栏,名字叫《Python 核心技术与实战》,作者是 Facebook 的资深工程师景霄,感兴趣的小伙伴可以去看看。
好,关于 Python 之父范罗苏姆的故事我们就聊到这里,卖桃者说,明天见。
(编辑:成敏) 
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
上一篇
第3期 | 你真的会问问题吗?
下一篇
第5期 | 创业谈钱第一位
 写留言

精选留言(13)

  • 2019-05-09
    秉承开放,跨平台的设计理念,促成了如今人工智能的热门语言,Python充分利用了网络的优势,用开放,灵活,跨平台吸引更多的人来完善他的功能。
              在如今复杂,多变的社会环境里,像Python语言一样,用灵活,开放的态度或许能更好的面对这个社会。
    8
  • 2019-05-10
    能创造一门语言的人都是特别热爱,热爱还不行,必须有天赋,佩服!
    5
  • 2019-05-22
    人生苦短,你用 Python 了吗?
    答:还没~之前安装过,也就随便看了几篇野鸡博客,后来工作忙就一直没有研究,现在也忘得差不多了。等我把 Java 再研究得深入点儿,有带新人的水平,再去研究 Python。以后肯定是要转大数据或人工智能的,不想当一辈子的纯 Java 开发,有空多研究技术,争取少掉头发,哈哈哈。
    1
    3
  • 2019-05-09
    打卡😁每天8~10分钟,长度正合适
    3
  • 2019-05-09
    读过池老师的《人生苦短,我用python》,然后就学了学,第一个感觉就是“还能这么写?!”
    2
  • 没有最好的设计,只有最适合当前应用场景的设计
    1
  • 2019-05-12
    面向扩展的编程思路
    1
  • 2019-05-11
    听了池老师的课,想学pathon 了,大势所趋
    1
  • 2019-05-11
    要好好学学
    1
  • 2019-05-09
    讲得不错
    1
  • 2019-11-25
    1、不必太担心性能——必要时再来优化;
    别追求完美,“足够好”就是完美;
    有时可以抄近道,尤其在你之后能改正的情况下。
    2、Python 不能被某个平台绑定,有些功能在一些平台上没法用可以接受,但核心功能必须跨平台。
    3、支持并鼓励用户写出跨平台的代码,但也不拒绝某个平台的特有能力或资源,这一点与 Java 形成鲜明对比。
    4、一个大型复杂系统,应该在不同层级都支持扩展,从而不论是老手还是新手,都能尽可能地发挥自主性。
    展开
  • 2019-11-17
    Python 确实很火,群里好多人在自学。现在越来越相信了,计算机语言是把握未来的基础思维。
  • 2019-11-13
    人生苦短,你用python了吗?
    用了,但是还是在基础层面