Python 大咖谈 - Massimo Di Pierro

作者: 呆鸟的简书 | 来源:发表于2019-08-27 15:16 被阅读0次
Python大咖谈_Massimo Di Pierro Massimo Di Pierro

Massimo Di Pierro,意大利网络开发者、数据科学家、演说家。15年来,Massimo 一直在芝加哥 DePaul 大学计算机学院当教授。他是 web2py 项目的发起人与核心开发者,该项目是用 Python 编写的开源网络应用框架。Massimo 还是 Python 的活跃贡献者,出版过《Annotated Algorithm in Python》等三本 Python 图书。因其在 Python 社区的贡献,被选为 Python 软件基金会成员。

Annotated Algorithm in Python

访谈主题:web2py、Python 图书、Python 2.7 与 3.x 对比。


Mike Driscoll:您是怎么当上程序员的?

Massimo Di Pierro:我是学物理的,但上中学时就开始编程了。家里当时有一台 IBM 电脑,我父亲是 COBOL 程序员,主要原因开发财务软件,那台电脑是他用的。

13 岁那年,父亲带我去听他的 COBOL 演说。他觉得我就是跟着去玩儿,但我其实能听懂,还有所触动。父亲知道以后给我买了台 Commodore 64,从此,我开始学 BASIC,后来又学了 Pascal。

Driscoll:那您是怎么开始接触 Python的?

Di Pierro:学编程很久后,我才接触 Python。我那时在英国读博士,用的主要是 Fortran、C、C++,我的工作与晶格量子色动力学有关,用的电脑是 Cray T3E。从那时起,我开始接触 Python,当时,Python 主要用于文件自动处理与脚本维护。2004 年,它变成了我最爱的编程语言。

Driscoll:您是一下子就喜欢上了 Python ,还是因为用的多,慢慢才喜欢上的?

Di Pierro:那时候,Python 没有现在这么多支持库,那时的支持库也远没有现在这么成熟。

喜欢 Python 是因为它的内省机制(introspection):可以查询函数的参数,使用 Python,能更好地理解代码。

Di Pierro:‘使用 Python,能更好地理解代码。’

Driscoll:我记得很多年前 BASIC 可以实现类似功能,但是 C++ 就很难找到类似功能。我真心喜欢程序能不断优化自身的理念。我曾开发过一个叫 OCL 的支持库,它允许 Python 用装饰器修饰一些简单函数,还可以在 runtime 时转换到 C 或 OpenCL,从而获取更高运算速度,这里用的是 PyOpenCL。

Di Pierro:您为什么会开发 web2py?

Driscoll:web2py 是 2007 年开发的,那时最流行的两个 Python 框架是 Django 和 TurboGears。我当时有两个需求:一个是要教学生用 model-view-controller 架构,另一个是自己要开发一些网络应用。

web2py

我曾对比过 Django 与 TurboGears 这两个框架,还用过一段时间 Django,甚至用 Django 为联合国搭建过内容管理系统,这是我们大学的公益项目。所以,我对 Django 比较了解,但 Django 太啰嗦了,不适合教学,对新人来说,有点难。

把 Django 当教学示例,要熟悉 Bash Shell 等系统管理工具。那时候,很多学生都不具备这方面基础知识,想用 Python 教网络开发,要融会贯通所有这些工具,这样的话要学的内容太多。我需要的只是一个下载文件、启动运行、无需配置,即可通过网页界面进行操作的框架。

Di Pierro:‘我只是需要一个下载文件、启动运行,无需配置,即可通过网页界面进行操作的框架。’

我还用过 TurboGears,它在好多方面都比 Django 强。但是 TurboGears 是由很多组件构成的网络框架,有一次升级后,很多常用组件因为没人维护都被替换成别的组件了。

TurboGears 的 API 也不稳定,不适合作为教学工具。我只好自己开发一个容易上手的网络框架,但没想到它会变得这么流行。

Di Pierro:‘我只好自己开发一个容易上手的网络框架。’

Driscoll:您在开发 web2py 过程中有哪些心得体会?

Di Pierro:我对搭建社区的重要性感触颇深。虽然与很多合作者素未谋面,但通过远程协同开发,我认识了很多人。

刚开发 web2py 时,我并不了解 Git 这样的协同开发工具。web2py 第一版用的是 Launchpad。当时大家发邮件提供帮助与建议。那时,我对协同开发一点概念都没有。

Di Pierro:‘我依然觉得与团队远程协同开发是一项核心技能,即便与他们仅在网上沟通,在现实中从未见过面。’

有好几年,我都不知道到底该怎么协同开发。现在,我依然觉得与团队远程协同开发是一项核心技能,即便与他们仅在网上沟通,在现实中从未见过面。随着时间推移,我会逐渐了解他们,彼此之间相互信任。可以说,绝大多数我最信任的人都是通过 web2py 认识的。

Driscoll:您觉得 Faas 或 Django 里有哪些功能很好,应该加入到 web2py 里?

Di Pierro:web2py 借鉴了很多 Django 与其它框架的思路。不过我们也为 web2py 添加了很多 Django 没有的功能。比如说更强的默认安全设置,web2py 里默认强制使用转义字符。

不同框架有不同的理念。比如,Django 的周边项目很多,每个项目都有自己的名字和运维人员。这些项目水平很高,维护也很上心。 web2py 则不同,我们希望把所有功能放在一个包里,在框架自身之外,不需要庞大的生态圈支持。

Di Pierro:‘web2py 借鉴了很多 Django 与其它框架的思路。’

web2py 的很多思路都来自于其它框架,但是我们对这些思路进行了改良。比如,表单生成与处理机制并非 web2py 独有,但我们开发的功能比其它竞品都好。

model-view-controller 设计架构主要借鉴 Django,URL 映射的默认路由规则与 Ruby on Rails 类似。对于模板语言,我们决定不采用专用域语言(domain-specific language),而是采用纯 Python 作为模板,这与 Ruby on Rails 里的 ERB 模板语言类似,只不过用的是 Python。

model-view-controller

web2py 后来还添加过一些从其它框架借鉴的功能。比如,从 Flask 借鉴的线程局部变量概念。线程局部变量允许任意模块访问当前请求对象、当前响应对象、当前会话,即便代码是从其它文件里导入的模块也可以访问。我举双手赞同 Flask 处理这种情况的方式。

web2py 从很多框架中借鉴了诸多思想,不同框架之间其实都会互相借鉴,只不过有些人不愿意承认,但我不介意承认这点。

Di Pierro:‘不同框架之间其实都会互相借鉴,只不过有些人不愿意承认,但我不介意承认这点。’

Driscoll:我了解到您独立出版了一些图书,您为什么会选择这种方式?

Di Pierro:我的本职工作就是学术研究,对我来说,写论文、编图书是很自然的事情,我还要为软件写文档,快速更新书籍内容非常重要,独立出版适合我的这一需求。

我是开源思想的拥趸,不止代码,教育也可以开源。我独立出版的图书都以成本价销售,甚至可以免费下载。对我来说,及时更新与快速成书是首要目标。

我写书的目的是希望更多人阅读,不是为了挣钱。最终,校验图书的人是读者,而不是出版商。所以独立出版非常适合我。图书定稿后,我不想再去改来改去,只想尽快开始写下一本书。

Driscoll:您在写书的过程中有没有遇到需要攻克的难关?

Di Pierro:首先,英语不是我的母语。我的写作能力还成,但避免不了犯错,审校文稿耗费了很多精力。

另一个困难是,虽然我自认已经是专家了,但这并不意味对某个主题了解的非常透彻。我写作的流程是先写好代码,再把代码变为论文或图书。这样一来,我必须确保文章的内容与代码实例一致。写完文章,再调整代码,就会导致文章与代码不同步,所以事先尽量要把实例代码写好,写完整。

写 web2py 的书的困难是,很多人在 GitHub 上对该书提交了 pull 请求。最开始只是些小小不言的修正,但随着时间推移,他们做出了很多实质性的贡献。

跟踪这些贡献者很难,只有他们的 GitHub 账号,无法以合适的方式向他们表示感谢。大家通常只是单纯地发送代码,从不会在鸣谢功能里提交 pull 请求。但只有在鸣谢功能里提交 pull 请求,我才知道应该感谢谁。

Driscoll:您既是科学家,也是教师,您认为 Python 对科学社区有什么帮助?

Di Pierro:Python 在科学计算方面发展迅速,尤其是在机器学习领域,很多支持库脱颖而出,比如 sklearn、TensorFlow、Keras。

15 年前,我刚开始当老师,大家都不知道 Python 是什么。一些同事甚至反对用 Python 替代 Java 作为主要教学语言。Python 当时仅仅被当作一种“脚本语言”,只适合特定领域。

Di Pierro:‘Python 当时仅仅被当作一种“脚本语言”,只适合特定领域。’

现在,我们教授的每一门课,不管是神经网络、机器学习,还是数据分析,几乎所有人用的都是 Python。从这方面看,Python 的处境确实是大有改观。

Di Pierro:‘我觉得纠结 Python 2 还 Python 3 这个问题才是真正的问题。’

我觉得纠结 Python 2 还 Python 3 这个问题才是真正的问题。在 DePaul 大学,我们用的都是 Python 3,但是 Python 2 在业界还是无处不在,让人很头疼。

Python 3 里的异步逻辑用的人很少是另一个问题。Python 中新出现的异步逻辑非常强大,但没有 JavaScript 的异步逻辑那么友好。真正喜欢事件驱动异步编程的人会优先选择 JavaScript (或 Node.js),而不是 Python。

Di Pierro:‘Python 中新出现的异步逻辑非常强大,但没有 JavaScript 的异步逻辑那么友好。’

Driscoll:其实我比较关心那些支持 Python 2 的公司。您觉得如果这些追随 Anaconda 或 Intel 的公司继续支持 Python 2 而不是 Python 3,将来会出现什么样的问题?

Di Pierro:我不想在此讨论 Python 3 是不是比 Python 2 好,不过,从Python 2 迁移至 Python 3 确实比较麻烦。这项大工程不能实现完全自动化,而且需要熟悉代码。如果现有系统还能顺畅运行,大家的态度当然是多一事不如少一事。

Di Pierro:‘我不想在此讨论 Python 3 是不是比 Python 2 好,不过,从Python 2 迁移至 Python 3 确实比较麻烦。’

比如,Python 2 里的 str 函数把字符串转换为字节,但是 Python 3 则转换为 Unicode。不查阅代码,不理解函数要处理输入数据是哪种类型,期望的输出数据是什么,就无法从 Python 2 切换至 Python 3。

如果输入数据不包含怪异的字符,比如无需映射至 Unicode,简易的转换也可以实现不错的效果。只不过,你不知道代码转换的结果是不是与预期相符。以银行为例,很多银行都有庞大的 Python 代码库,这些代码经过多年开发与测试,已经非常完善,并且运行稳定。在这种情况下,切换到 Python 3 不是一件容易的事情,这里面的成本很难评估。想想看,还有少银行仍在用 COBOL。

不少工具可以辅助 Python 2 迁移到 Python 3 的工作,但我不怎么了解这些工具,所以,也可能很多我觉得头疼的问题,其实已经有成熟的解决方案了。但我还是觉得每次转换代码的时候,整个工作流程不是那么清晰明了。

Driscoll:您觉得 Python 在数据科学领域面临哪些挑战?

Di Pierro:我认为数据科学家喜欢 Python。数据科学领域里 Python 的主要竞争对手是 R 语言,但是 R 更受经济学家与统计学家欢迎。不过,R 更流行不是因为它更好,而是因为它进入数据科学领域的时间更长,并且更专注数据科学。

R

数据科学领域已经使用了很长时间 R,大家很清楚 R 能做什么。懂得这门语言的人不觉得有必要学习其它的语言。R 语言本来也是专注数据科学,所以这个社区里的人对这门语言更熟悉。

Di Pierro:‘在我看来,Python 现在已经逐渐被越来越多的人接受,而且在数据科学领域已经比 R 语言更加流行。’

R 语言与 Python 进行整体对比没有什么意义,只适合与 Python 的 Pandas 支持库进行对比。我觉得 Python 与 Pandas 的组合与 R 对比才有意义,我现在教授机器学习课程用的就是 Python 与 Pandas。在我看来,Python 现在已经逐渐被越来越多的人接受,而且在数据科学领域已经比 R 语言更加流行。我深信 Python 终将在数据科学领域独占鳌头。

Driscoll:谢谢您, Massimo Di Pierro。

Python大咖谈 - Kenneth Reitz 与 Mike Driscoll
Python大咖谈 - Brett Cannon
Python大咖谈 - Steve Holden
Python大咖谈 - Carol Willing
Python大咖谈 - Doug Hellmann

相关文章

网友评论

    本文标题:Python 大咖谈 - Massimo Di Pierro

    本文链接:https://www.haomeiwen.com/subject/bmseectx.html