geekdoc-python-zh/docs/realpython/interview-al-sweigart.md

97 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.

# 与 Al Sweigart 的 Python 社区访谈
> 原文:<https://realpython.com/interview-al-sweigart/>
本周,我邀请到了 [Al Sweigart](https://twitter.com/AlSweigart) ,这是 Python 社区中一个熟悉的名字。Al 是一名出色的开发人员、会议发言人、教师和折纸艺术家。(是的,你没看错!)但有些人可能最了解他,因为他是许多 Python 编程书籍的作者,包括畅销书 [*用 Python 自动化枯燥的东西*](https://realpython.com/asins/1593275994/) 和我们的顶级精选, [*用 Python 发明你自己的电脑游戏*](https://realpython.com/best-python-books/#invent-your-own-computer-games-with-python-4th-edition) 。所以,事不宜迟,让我们开始吧!
**瑞奇:** *欢迎来到*真正的巨蟒,*艾尔。我们很高兴你能加入我们的采访。让我们像对待所有客人一样开始吧。你是如何开始编程的,你是什么时候开始使用 Python 的?*
![Al Sweigart](img/d712ad6dd224ad7ec71c781224ff8e9b.png)
**艾尔:**谢谢!嘿,我绝对不喜欢告诉别人我是如何进入编程的,因为我是那些大约在三年级左右开始学习基础知识的孩子之一。
我不喜欢告诉人们这一点,因为我觉得这助长了这样一种想法,即为了成为一名程序员,你必须在很小的时候就开始。就像,如果你不是在胎儿时期调试子程序,你就没有机会成为职业。所以我告诉人们我小时候就开始了。
我还告诉他们,几年来,我的大多数项目都相当平庸。我没有维基百科或谷歌或 Stack Overflow所以我一直在做“猜数字”游戏的变体或者开始我没有技术知识来完成的项目。我的领先并不意味着什么。我在童年和青少年时期学习的关于编程和计算机的所有知识今天在几十个周末就能学会。
我认为年轻时开始的主要好处是我不知道编程应该是很难的。今天,每个人都会想到人工智能和机器学习以及具有令人惊叹的 3D 图形的视频游戏。我只是在业余时间以一种完全不专注的方式闲荡,但我对此完全无所谓。
我没有学到太多的知识,但我确实明白了编程只是一件你可以像学习其他事情一样学习的事情。这不需要超级聪明或者奥林匹克级别的训练。
我的第一门编程语言是 BASIC在 Qbasic 之后不久,但我也学了一点点 [C](https://realpython.com/build-python-c-extension-module/) Visual BasicPerl [Java](https://realpython.com/oop-in-python-vs-java/) PHP 和 JavaScript。看起来很多但是我从来没有真正掌握过其中的任何一个。我只是学会了足够完成我当时用这些语言做的任何项目。
我在 2005 年左右开始学习 Python从那以后就不再学习新的语言了。我一直有探索新技术的冲动(Kotlin、Rust 和 Dart 已经进入我的视线有一段时间了),但是 Python 在很多领域都很容易使用,我还没有足够的动力离开它。
**里奇:** *你知道,我的第一本 Python 编程书是你的书* [用 Python 把枯燥的东西自动化](https://realpython.com/asins/1593275994/)。这是我至今仍在引用的一句话。我很想知道是什么激发了你写这本书,它并不一定是针对那些想成为传统意义上的职业程序员的人?
艾尔:哈哈,我总是惊讶于那本书变得如此受欢迎!我自己仍然会参考这本书:当我在做一些事情,不太记得函数名时,我会意识到,“等等,我之前写下来了。”我真的很讨厌工作面试,他们禁止你查阅编码面试的书籍或文档。当我编程的时候,我会参考我写的*的书。*
我在 2008 年或 2009 年左右开始写书。我当时的女朋友是一个 10 岁孩子的保姆,想学编码,但是我在网上找不到我喜欢的给他的教程。所有的东西要么是软件工程师的,要么是老一套的“让我们来计算斐波那契数”的东西。
我回想起我是如何通过那些列出小游戏源代码的杂志和书籍进入编码的。我只理解了一半的说明文字,但是复制源代码并做一些小的修改确实向我展示了如何将程序组合在一起。
所以我写了一个教程,越写越长,最终变成了 [*用 Python*](https://realpython.com/asins/1593277954/) 发明你自己的电脑游戏。我把它放在网上,然后把它作为自己出版的书名出售。我的日常工作仍然是软件开发人员,我从未真正认为写书是一种职业。
我在知识共享版权许可下发布了这本书,人们可以免费下载和分享。这被证明是至关重要的,因为它让人们分享这本书,并产生口碑。如果没有知识共享许可,它将只是亚马逊上的又一个自我出版清单,我也不会有现在的职业生涯。免费提供这本书导致了更多的销售。
所以我写了一本书又一本书,为了我的第四本书(将成为*用 Python* 自动化枯燥的东西),我和没有淀粉出版社签了合同。我真的很喜欢和他们一起工作:他们的编辑很棒,他们的书都是高质量的,他们对我继续在知识共享许可下发行图书也很满意。
大约在 2012 年,“每个人都应该学习编码”再次成为新闻焦点,在过去的几十年里,似乎每隔五年或十年就会出现一次。我想,“当然,但是为什么?”不是每个人都需要成为软件工程师,也没有人需要计算斐波那契数。
我想到了非程序员可以用编码做什么。二十年前,如果你每天都在网上和你的朋友聊天,你可能是一个超级书呆子。但是今天,你只是一个普通的脸书用户。许多人在办公室或家里使用电脑。
他们希望自动化哪些不需要计算机科学学位的事情?事实证明,有很多!我有一个朋友开玩笑说,如果你想成为一个百万富翁创业创始人,只要找到一个仍然使用传真机和 Excel 电子表格的行业,然后编写被整个领域采用的 web 应用程序。
所以我有一个类似“更新电子表格”和“发送通知电子邮件”的东西的列表,所有这些都变成了用 Python 自动处理无聊的东西。我当时的软件开发工作已经有点过时了,所以我想我会花一年时间完成*自动化*,然后再找一份软件开发工作。我已经做了六年的全职作家和在线课程开发者。
运气真好。我很幸运,有数百人对像 Python 这样的免费开源语言做出了贡献,这使得编程变得如此简单。我很幸运,我有存款,所以我可以冒险写书。我很幸运,其他人创造了自由软件文化,导致了像知识共享许可这样的事情。
所以当人们问我写书的建议时,有点像问一个彩票中奖者选什么号码。我仍然认为我们的社会中有许多不必要的障碍需要被拆除,让人们发挥他们的全部潜力,所以这个目标一直是我的指路明灯。
任何在 Twitter 上关注你一段时间的人都会知道你热衷于向学习编程的人教授 Python。你似乎特别喜欢用视频游戏作为切入点。你是否发现更多地关注“有趣”的话题有助于你接触到更多的人并帮助他们进入 Python这是故意的还是你在挠自己的痒
**Al:** 前几天,我发现了一张来自[马哈茂德·哈希米](https://twitter.com/mhashemi) 2019 年 PyBay 演讲的幻灯片,标题是“开始想编码的两个原因”,它有一个维恩图,上面写着“我想制作一个视频游戏”和“我想摆脱 Excel”我从未见过我的整个教学和写作生涯被如此概括。视频游戏是编程的绝佳入口尤其是有了像[麻省理工学院的 Scratch](https://scratch.mit.edu) 这样的工具。但是有时候用电子游戏有点困难。
我会站在一个 9 岁孩子的教室前说,“我们要做一个游戏,”他们会想到*《我的世界》*或*野性的呼吸*或其他一些有一个一亿美元预算的专业开发团队的名字,而我会说,“我们做一个迷宫或西蒙说游戏怎么样?”这都是关于管理期望。创造一些东西,告诉计算机做什么,看着它做,这仍然是最基本的乐趣。
我一直致力于用 Python 创建一系列小的、容易理解的、基于文本的游戏,我已经把这些游戏放到了网上。这个想法是,一旦你知道了像循环和变量这样的编程概念,你就可以在这些游戏的实际程序中看到这些概念。
当人们告诉新程序员通过阅读开源项目的代码变得更好时,我不寒而栗,因为这些项目通常是巨大的,并且没有很好的文档记录。他们中很少有人有入门指南来帮助新志愿者熟悉代码库,所以很难理解这些代码。
新的编码员只是感到害怕。所以我的简单游戏就像自行车上的训练轮,我遵循的强制简化的约束实际上很好地让我想出了有创意但简单的程序。
我绝不是游戏设计师。我制作的所有游戏最多只有几百行代码,而且都是机械性很强的东西,比如俄罗斯方块和 T2 成长蠕虫游戏 T3每个人都可以在他们的诺基亚手机上玩。这些游戏不需要太多的图形和关卡设计。
我对像托比·福克斯和埃里克·巴隆这样的人感到敬畏,他们花了数年时间分别创造了*地下谷*和*明星谷*。但即使是那些游戏也是站在巨人的肩膀上。 *Undertale**Stardew Valley* 受到 *Earthbound**Harvest Moon* 的启发,但受益于现代游戏设计的洞察力(以及 Fox 和 Barone 压倒性的天赋)。
同样我所有的基于文本的游戏都类似于你会在大卫·阿尔的《基础电脑游戏》书或七八十年代的《T2 字节》杂志中找到的那些游戏,但是受益于几十年的游戏设计理论。所有这些对我来说都是有意的(如果不是为了从中获得编程教程,我不会创建这些小游戏),但我不认为我能以任何其他方式做到这一点;没有什么比这些有趣的小视频游戏更能吸引孩子和成年人编程了。
此外,任何在 Twitter 上关注我一段时间的人都会知道,我热衷于政治演说。至少,我试着站在建设性的一方。
你是为数不多的在 [Twitch](https://www.twitch.tv/AlSweigart) 上运行代码的程序员之一(而且绝对是我所知道的为数不多的 Python 程序员之一)。这种体验如何,你从这个过程中学到了什么?我们需要鼓励更多的 Python Twitch 飘带吗?
艾尔:在过去的几年里,我断断续续地在流,有时在流之间有几周或几个月。这是一个不幸的事实,你必须把它作为一份全职工作做大约一年,然后才能把受众扩大到可以维持职业生涯的规模,而我没有那样的时间。但是作为一种爱好还是不错的。
我可以一边玩小游戏,一边录制自己创建的在线课程。它让我在编码和叙述时练习在镜头前,这对我的在线视频课程工作很有用。它让我接触到初学者,所以我可以了解他们有什么问题。
Twitch 在我上传视频一周后删除了我的视频,一些人要求我将它们永久保存,但我真的不认为这比在后台保存更多。我更喜欢制作精美的 10 分钟视频,而不是花四个小时漫无边际地查找文档。
**里基:** *现在我们最后几个问题。你在业余时间还做些什么?除了 Python 和编码,你还有什么其他的爱好和兴趣?*
**Al:** 业余时间,嗯?恐怕我不明白这个问题…
我目前职业的一个好处是,它确实让我很忙。编写编程教程几乎是我的业余爱好,现在我开始全职做这件事,这带来了所有的好处和坏处。我有足够的项目持续到 2021 年,但同时,我希望它们现在就全部完成。
完成我目前的书和视频的最大动力是我将能够开始我的下一本书和视频。我开玩笑地问一个朋友,开始吸食可卡因是否会提高我的工作效率,她说,“当然,首先。”
但是除了写程序和写关于程序的书,我喜欢做折纸。这是我小时候感兴趣的东西,但我总是在书中的折叠图中读到一半,然后到达一个我无法理解的步骤,我不得不放弃它。
这是我童年时代的另一件事,互联网有了巨大的进步:这些天,网上有一百万个折纸视频,所以我能够把模型放在一起,这比我小时候做的任何事情都更令人印象深刻。
另一个朋友指出,写软件,写书,折纸,本质上我所有的爱好都有一个共同点:都很便宜!给我一台旧笔记本电脑和一叠纸,我就相当满足了。
* * *
如果你想知道艾尔在做什么,你可以在推特上和他打招呼。他的博客和他的大量书籍可以在他的网站上找到,[用 Python 发明](https://inventwithpython.com/)。谢谢你,艾尔,和我聊天!
如果你有想让我采访的人,请在下面留言告诉我。