geekdoc-python-zh/docs/realpython/interview-david-amos.md

142 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Python 社区采访 David Amos
> 原文:<https://realpython.com/interview-david-amos/>
本周, *Real Python* 的内容技术主管[大卫·阿莫斯](https://realpython.com/team/damos/)加入了我的讨论。
在这次采访中,我们谈论大卫对乐高和数学的热爱。我们还谈到了 [*Python 基础知识*的书](https://realpython.com/products/python-basics-book/),这本书很快就要退出早期访问,以及他与 [*PyCoder 的周刊*](https://pycoders.com/) 的关系。所以,事不宜迟,我们开始吧。
瑞奇: *大卫,谢谢你加入我的节目。我们的许多读者和成员可能已经知道了你的背景,但对于那些不知道的人,让我们问一些不可避免的问题:你是如何进入编程的,你是什么时候开始使用 Python 的?*
![David Amos](img/d01fc4d9f5996d0a0f736f754caf170a.png)
**大卫:**当我在父母的 [IBM 386 PS/2 电脑](https://en.wikipedia.org/wiki/IBM_Personal_System/2)上偶然发现[大猩猩游戏](https://archive.org/details/GorillasQbasic)的源代码时,我偶然发现了编程。我想我大概七八岁的时候。我发现了一个叫做`.BAS`的文件,它打开了一个叫做 [QBasic](https://en.wikipedia.org/wiki/QBasic) 的程序,里面有各种奇怪的文本。我立刻被吸引住了!
文件的顶部有一个说明,解释了如何调整游戏速度。我更改了值并运行了游戏。效果立刻就明显了。这是一次激动人心的经历。
我痴迷于学习用 QBasic 编程。我自己做的文字冒险游戏。我甚至用简单的几何图形制作了一些动画。太有趣了!
对于一个八岁的孩子来说QBasic 是一门很棒的语言。这很有挑战性,足以让我保持兴趣,但也很容易得到快速的结果,这对一个孩子来说真的很重要。
当我十岁左右的时候,我试图自学 C++。想法太复杂,结果来得太慢。挣扎了几个月后,我停了下来。但是给计算机编程的想法仍然吸引着我——以至于我在高中选修了一门网络技术课,学习了 HTML、CSS 和 JavaScript 的基础知识。
在大学里,我决定主修数学,但我需要辅修。我选择了计算机科学,因为我认为有一些编程经验会更容易达到学位要求。
我用 C++学习了数据结构。我上过 Java 的面向对象编程课。我用 c 语言学习了操作系统和并行计算。我的编程视野大大扩展了,我发现整个主题在实践和智力上都令人愉快。
当时我把编程看作是帮助我进行数学研究的工具。在研究生院,我编写程序为我的研究项目生成例子和测试想法。
大约在 2013 年读研期间,我发现了 Python并很快爱上了它。我一直使用 C++、MATLAB 和 Mathematica 作为我的主要研究工具,但是 Python 让我可以专注于研究问题,而不会陷入代码中。
有了 Python 令人敬畏的科学计算工具生态系统,如 [NumPy](https://realpython.com/numpy-array-programming/) 、 [SciPy](https://realpython.com/python-scipy-cluster-optimize/) 、 [PuLP](https://realpython.com/linear-programming-python/) 和 [NetworkX](https://networkx.github.io/) ,我拥有了解决问题[所需的一切,就像我用 MATLAB](https://realpython.com/matlab-vs-python/) 一样,但表达方式更丰富!
**瑞奇:** *你经常会听到这样一个神话:强大的数学背景是成为程序员的先决条件。虽然我想你会同意程序员并不总是需要知道高等数学,但我很想知道你的数学和数据科学背景在编写代码时对你有什么帮助。*
如果你想成为一名计算机科学家,那么你需要很强的数学背景。然而,并不是所有的程序员都是计算机科学家,也不是所有的计算机科学家都是程序员。
程序员的工作是写代码,但我从来没有做过这样的程序员工作:有人递给你一个用简单英语写的程序,让你把它翻译成 Python。所以程序员的工作不是把人类语言翻译成计算机语言。
数学、计算机科学和编程的交集就是**问题解决**。也就是说,数学家、计算机科学家和程序员解决的问题不同。
数学家解决关于数学结构的问题。我认为计算机科学家是应用数学家,他们解决计算研究中出现的有关结构的数学问题。
另一方面,程序员更像是建设者和工程师。程序员通常被给予一个设计,并被赋予尽可能高效和有效地实现该设计的任务。
尽管有这些差异,还是有一个通用的框架来解决问题,不管是什么学科。我认为这个框架在 George Pólya 的经典论文 [*如何解决它:数学方法的一个新方面*](https://realpython.com/asins/B0073X0IOA/) 中得到了最优雅的阐述。
该框架有四个阶段,并附有您在每个阶段应该问自己的问题:
1. **理解问题:**未知是什么?条件是什么?
2. 设计一个计划:你有什么工具可以使用?你已经解决了一个类似的问题吗,那个问题的解决方案能帮到你吗?
3. **执行计划:**你能检查计划的每一部分都是正确的吗?
4. **回头看:**你能证明你的解决方案有效吗?你能想出另一种方法来解决这个问题吗?你能用这个方法解决另一个问题吗?
Pólya 解决问题的方法令人难以置信地强大,尽管这本书是为学数学的学生写的,但每个人都可以从阅读它中学到很多东西。这本书的所有例子都依赖于在美国典型的初中或高中课程中会遇到的数学。
作为一名数学家,我学到的最强有力的观点——同样适用于编程,实际上也适用于日常生活——是很少有问题是无法解决的。通常解决问题的关键是问正确的问题。(实际上,有*许多*问题[无法解决](https://www.youtube.com/watch?v=O4ndIDcDSGc&vl=en),但是作为一名程序员你不太可能遇到这些问题!)
如果你第一眼不能解决一个问题,那就想出一个你*能*解决的相关问题。事实上,这是在*如何解决*中反复重复的咒语:
> 你不轻视小的成功,相反,你寻求它们:*如果你不能解决提出的问题,试着解决一些相关的问题*。
>
> -*乔治·波兰文*
**里基:** *你在重写和更新最初的* [真正的 Python 课程](https://realpython.com/products/real-python-course/) *并把它变成现在的* Python 基础知识*这本书方面发挥了重要作用。你能谈谈这本新书吗?谁会从阅读中受益,当他们完成这本书时,读者能期望学到什么?*
与[丹·巴德](https://realpython.com/team/dbader/)、[乔安娜·贾布隆斯基](https://realpython.com/team/jjablonski/)和[雅各布·施密特](https://realpython.com/team/jschmitt/)就 [*Python 基础知识:Python 3*](https://realpython.com/products/python-basics-book/) 实用入门一起工作既有挑战性又有回报。
感谢 Fletcher Heisler第一个真正的 Python 课程的作者,我有了一个坚实的基础。我确实重写了这本书的大部分内容,并牢记两个主要目标:
1. 更新 Python 最新版本的内容。
2. 确保编写内容达到或超过与其他*真实 Python* 编写内容相同的标准。
弗莱彻的书很棒,但风格与典型的真正的 Python 文章大相径庭。我希望这本书尽可能地受到新读者的欢迎,同时也让现有的*真正的 Python* 读者感到熟悉。
*Python 基础知识*的目标受众是对学习 Python 感兴趣的初级程序员。你不需要任何编程经验来充分利用 *Python 基础*
这本书带你了解在 Windows、macOS 或 Ubuntu Linux 上安装 Python 的过程。但是你可以在任何你喜欢的系统上使用 Python 3.6 或更高版本。
你甚至不需要知道如何使用代码编辑器Python 附带了一个名为 [IDLE](https://realpython.com/python-idle/) 的轻量级编辑器,非常适合初学者。如果你有一个你喜欢使用的编辑器,那么你也可以把它用在书上。书中只有一章需要 IDLE而且是关于使用 IDLE 的调试窗口。
*Python 基础知识*涵盖了 Python 入门所需了解的一切,包括:
* 创建变量
* 与数字打交道,进行基本的数学运算
* 使用数据结构,如字符串、列表、元组和字典
* 编写条件语句、函数和循环
* 创建类和用户定义的对象
但这真的只是开始。在你学会了这门语言的基础知识之后,有些章节会教你如何:
* 使用文件
* 安装和使用第三方库
* 创建和修改 PDF 文件
* 从互联网上搜集数据
* 根据数据制作图表和图形
* 构建图形用户界面
几乎每一章都有带答案的练习,挑战性的问题来鼓励你把你的技能提升到一个新的水平,以及互动的测验来帮助验证你所学的一切。
**瑞奇:** *你是如何找到写这样一本综合性书籍的过程的?它改变了你写技术教程和文章的方式吗?你学到了什么让你感到惊讶或者你现在一直在使用的东西?*
大卫:写这本书是一堂关于耐力和毅力的课。花了两年多一点的时间才完全组合起来。
那段时间,我换了工作,开始全职为*真正的 Python* 工作。我也经历过几次个人试炼。我的房子*被淹了两次*,我的家人在 2019 年流离失所了 7 个多月。这是一个真正的挑战。
写这本书迫使我花了很多心思在章节的组织上。这无疑是技术文章中的一部分。我一直是大纲的粉丝,但现在我无法想象不先设计一个大纲就写任何东西。
我也成为了垂直列表的大力支持者,这是你在真正的 Python 中随处可见的东西。我必须感谢*真正的 Python* 、[的执行编辑乔安娜·雅布隆斯基](https://realpython.com/team/jjablonski/),是他们鼓励我更多地使用它们,并帮助我看到它们的价值。
起初,我有点反对他们。也就是说,我觉得乔安娜想让我过度使用它们。回想起来,垂直列表较少的早期草稿现在在我看来很难看,似乎很难阅读。
在你做的所有其他事情中你还是《PyCoder 周刊》的主编。*你每周都要阅读和解析数百篇 Python 相关的文章,所以很难想象这对你自己的学习没有好处。有没有这样的时刻,或者你读过对你自己的编程有重大影响的教程?*
大卫: *PyCoder 的*绝对让我这个程序员和作家受益匪浅。
或许从 PyCoder 周刊的策展文章中最大的收获是 Python 编程的主题有多广泛。我最喜欢的一些文章是关于奇异的事情,比如[创建完全用 Rust](https://blog.yossarian.net/2020/08/02/Writing-and-publishing-a-python-module-in-rust) 编写的 Python 包,或者我从未听说过的设计模式,比如 [sans I/O](https://fractalideas.com/blog/sans-io-when-rubber-meets-road/) 。
我也越来越喜欢几个作者,以至于当我看到他们发表的新文章时,我会很兴奋。我真的很喜欢杰克·艾治在 LWN 写的新闻报道。我也期待由[布雷特·卡农](https://snarky.ca/)撰写的文章。
有时候你重新发现的或者一起错过的简单的事情会产生最大的影响。Brett 最近的一篇文章让我想起了使用 [`-c`标志](https://docs.python.org/3/using/cmdline.html#cmdoption-c)从终端运行 Python 命令,我已经完全忘记了这一点,现在已经开始更经常地使用它来检查微小的代码示例。
我喜欢关注 Python 生态系统中所有精彩的包。我发现了各种各样令人惊叹的东西,包括用于处理 [NASA 太空数据](https://github.com/AndrewAnnex/SpiceyPy)的库、自主[机器人模拟器](https://github.com/nmccrea/sobot-rimulator),以及用乐高搭建的 [Python 驱动的显微镜](https://github.com/IBM/MicroscoPy)。
Pythonistas 是一群有创造力的人!
**里基:** *现在我的最后几个问题。你在业余时间还做些什么?除了 Python 和编程,你还有什么其他的爱好和兴趣?*
大卫:我有两个孩子,其中一个四岁。你所说的“业余时间”是什么?
如果我不工作,也不忙着成人,那么我真的很喜欢建造乐高,尤其是太空主题的玩具。我的大女儿和我喜欢一起观星,观看美国国家航空航天局和 SpaceX 公司的火箭发射。
我也是《星际迷航》的超级粉丝,我看了很多《星际迷航》的内容。斯波克一直是我最喜欢的角色之一。我很佩服他平衡情感和逻辑的能力。
虽然我不想像典型的瓦肯人那样没有感情,但根据理性和现有的最佳数据做出决定而不让感情影响你的判断的能力是一种很有价值的技能。不过,我希望这是一件容易开发的事情!
谢谢你,大卫。和你谈话总是很愉快。
* * *
如果你想和大卫取得联系,那么你可以在推特上找到他,或者你可以访问他的个人网站。如果你是 Python 的新手,想在学习中增加一些结构,那么 [*Python 基础:Python 实用入门 3*](https://realpython.com/products/python-basics-book/) 可以帮助你提高 Python 水平。
如果你想让我采访 Python 社区中的某个人,请在下面留下评论或通过 [Twitter](https://twitter.com/endlesstrax) 联系我。编码快乐!