geekdoc-python-zh/docs/realpython/interview-michael-kennedy.md

14 KiB
Raw Permalink Blame History

Python 社区采访迈克尔·肯尼迪

原文:https://realpython.com/interview-michael-kennedy/

本周,我们的 Python 社区采访对象不是别人,正是因《向我讲述 Python》而出名的Michael Kennedy

你可能知道他权威的声音,但你知道他的 Python 故事吗?请继续阅读,了解他的 Python 之旅,他在堵车时的想法,以及他对两个轮子的热爱。

瑞奇: 欢迎来到真正的 Python如果我没记错的话您最初是一名. NET 开发人员,甚至是微软认证的培训师。所以我很好奇你是怎么来到 Python 的,是什么让你留了下来?

Michael Kennedy

迈克尔:谢谢你邀请我。哦这勾起了我的回忆。是的我是全职的。NET 用 C#开发了大概 10 年。这是一种我至今仍尊重的语言。

在想要扩展到微软空间之外的领域之后,我找到了使用 Python 的方法。我猜这可能是 2012 年左右。在那之前的一段时间里,除了 JavaScript我没有在 C++和 C#之外做过什么。(谁都逃不过 JavaScript)我查看了流行的语言,这正是 Python 变得流行并且越来越流行的时候。

我花了几周时间学习 Python并且非常着迷但并不知道它。

我研究了语言和生态系统,发现它真的很好——比我想象的好得多。但是我遇到了一个问题,每个精通某种语言的人在尝试不同的语言时都会遇到这个问题。我熟记于心的一切又是一次挑战。如何创建 web 应用程序?我如何主持它?如何查询数据库?等等等等。

我愿意学习,也做到了。但这只是任何人都会有的不安,放弃熟悉的道路。然而,当我回去写一些 C#代码,发现它比我几周前写的更没品味时,我知道我会被迷住。

这并不是要抨击这种语言。但是像所有基于 C 的语言一样,它有很多符号噪声。为什么我们又需要分号了?为什么人们如此热爱括号和花括号,即使(现在)很明显它们是不需要的,等等。这里有一个例子:

class  Thing  { public  int  TotalSales  { get  
  { int  total  =  0; foreach  (var  b  in  items)  
  { total  +=  b.value; } return  total; } } }
class Thing:

    @property
    def total_sales(self):
        total = 0
        for b in items:
            total += b.value
        return total

让人不禁想知道为什么这么多年来你一直在输入那些符号。

从那时起,随着我学习越来越多的流行包和标准库模块,我每天都在享受它。现在,我在 Python 堆栈上运行我的整个业务,它还没有让我失望。

你当然是最受欢迎的 Python 播客——跟我说说 Python——的主持人该播客现已超过 180 集。你也是布莱恩·奥肯主持的 Python Bytes 播客的主持人。内容真多啊!你是如何继续保持每周如此一致,并保持节目的相关性和新闻价值的?那一定是很大的工作量?

迈克尔:那绝对是很多内容。但这是一个非常值得的项目,因为 【跟我说 Python】已经进入第四年,而 Python Bytes 也进入了第三年。

我怎么还始终如一?这个问题问得好。我开始播客是因为其他人不一致。在我之前已经有了基于 Python 的播客。但他们都在我入行前很久就停止制作剧集了。事实上,这就是为什么我觉得我可以开始,因为内容太缺乏了。

我始终如一有几个原因。首先,当我开始播客时,我向自己承诺在六个月内每周都这样做,然后决定社区和我是否喜欢它。在做了这么多一致的内容创作之后,你已经习惯这么做了。

第二,那时我已经有几家公司赞助播客了。我想也许,只是也许,我可以找到一种方法来使用播客,以独立于我的日常工作。我并不讨厌我的日常工作,但它比不上做你认为对社区和世界真正有价值的事情。一旦你接受金钱来长时间生产一个东西,一致性只是协议的一部分。

最后,听众非常支持我的工作。为每个人制作内容的感觉真的很棒。我期待着我创作的每一集。毕竟,我从每一个人身上学到了很多,并且一直到今天还在继续。

至于保持节目的相关性和新闻价值,这很容易。对于 Python Bytes ,这就是字面意义上的主题(每周新闻项目),我们从听众那里得到了大量的帮助,他们每周都在推荐很棒的新项目。

对于跟我说 Python,这个比较难。每集深入挖掘一个话题。对于前 20 集左右,这对我来说很容易。例如,我使用过 SQLAlchemy所以向 Mike Bayer 询问它只是回想我的经历。但是它很快就变成了我没有经验的空间。我现在每周都要花相当多的时间研究课题。在我们按下录制键之前,任何一集都有 4-8 小时的研究。

这就引出了你问题的最后一部分:是的,这是一项很大的工作。有人问我每周在节目上花多少时间。他们甚至说,“你做了一笔好交易。你每集花多少钱在播客上?几个小时?”那就太好了。我可能每集要花大约 2 天的时间来做研究、联系客人、收发电子邮件、开发网站、建立赞助关系等等。

这是一段很长的时间,但也是我事业的基础。只有当播客和课程都是众所周知的高质量的时候,它们才会起作用。非常幸运的是,我已经能够将我的兼职播客转变为全职工作(播客和课程)。这让我真正保持专注,保持一致。

Ricky: 如果我们的读者不知道你的播客,他们一定会知道你在 Talk Python 培训上的精彩课程。当我开始学习 Python 时,我参加的第一个课程是你的 Python Jumpstart by Building 10 Apps 课程——顺便说一句,它非常棒。你们刚刚发布了一门名为异步技术和实例的新课程。你能告诉我们更多的信息吗?为什么你决定特别关注异步?

迈克尔:谢谢!这些课程对我来说是真正充满激情的项目。很久以来,我就想为 Python 课程创建一个最好的在线图书馆。

当我第一次开始播客时,我也想开始课程。我看到它们携手并进,互相支持。然而,当时我在一家为开发人员提供面对面和在线培训课程的公司工作。

他们给了我很多自由和灵活性。但行不通的是,我在业余时间有效地创建了一家竞争性公司。所以我从播客开始,然后一旦我可以独立全职工作,我的第一个行动就是通过在 Kickstarter 上构建 10 个应用来启动培训公司和 Python Jumpstart。那真是一次有趣的经历也是一次巨大的成功。

新的异步课程非常有趣我觉得它对于社区来说是非常必要的。它需要存在有几个原因。对于许多人来说Python 异步/并发编程的故事有点难以理解。我们有 GIL它实际上被很好地覆盖在真正的 Python 上。这意味着普通线程只对 IO 绑定的工作有效。CPU 绑定的工作需要另一个 API用它自己的古怪和技术进行多重处理。

现在,从 Python 3.5 开始,我们有了惊人的asyncawait关键字。它们强大而干净,但给形势增加了更多的选择和更多的迷雾。这还没有考虑 Cython 的异步特性和它的nogil关键字。

第一个原因是围绕异步和 Python 有很多混淆。你听说过有人因为 Go“更好”的并发性而放弃 Python 转而使用 Go。通常人们寻找的并发类型是 IO 绑定的,这在 Python 中工作得非常好。

下一个原因是异步和并发编程被奇怪地以错误的顺序教授。我这么说的意思是,通常很多令人困惑的低级细节会出现在前面。最后,它被放在一起成为有用的和令人信服的例子。但是学习者必须走那么远才能有回报。这也经常伴随着线程安全的可怕警告,以及竞争条件有多艰难。所有这些都是真实准确的。但是为什么要从那里开始呢?

我想要一门课程来展示异步在很多情况下是多么的高效、有趣和简单。一旦学生看到了它的价值,你就可以深入到线程安全等方面。

最后,真的没有多少 Python 的异步课程。我只知道另外一家,在订阅墙后面。

瑞奇: 众所周知,你是 MongoDB 的忠实粉丝。你觉得它最吸引你的是什么?如果有人以前从未使用过它,为什么他们会考虑在下一个 Python 项目中使用它呢?

迈克尔:我是 MongoDB 的忠实粉丝。很久以前,我向一个朋友抱怨部署关系数据库应用程序是多么痛苦。关于在不停机的情况下应用迁移脚本是一件多么痛苦的事情。他说:“那你为什么不用 MongoDB就不会有那个问题了”。

我接受了他的建议,他是对的!从那以后,我已经在 MongoDB 上启动了 4 或 5 个主要项目。我的两个播客网站( talkpython.fmpythonbytes.fm )和课程网站都在 MongoDB 上运行。

我知道有些人对 MongoDB 有不好的体验。早期在 MongoDB 中有一些“最佳实践”不是默认的,并且有很多关于这些的故事。其中大部分已经被修复,如果你知道要避免它们,你的情况就很好。还有一个主要问题就是 MongoDB 运行时不需要认证,除非你明确创建一个帐户。

也就是说MongoDB 对我和我的项目来说完全是防弹的。它已经为上面提到的这些站点提供了多年的电力,没有任何停机时间。我从未运行过迁移或升级脚本来部署新的模式或数据模型。

Mongo 灵活的模式模型和 MongoEngine 基于类的 ODM(想想 ORM for MongoDB)正好适合我的项目。网站运行的延迟时间极低。对于不重要的页面10-20 毫秒的响应时间是很常见的(从请求到服务器的响应)。

我个人完全可以为您的项目推荐 MongoDB。我还创建了一个免费课程如果人们对 freemongodbcourse.com 感兴趣的话。

里基: 现在 Python 已经过时了,是时候谈谈有趣的东西了……数学!你有一个数学硕士学位,而且你确实开始了你的博士学位。有计划在将来完成它吗,或者那艘船已经起航了吗?我可以想象你仍然对它充满热情。你每天都有机会挠痒痒吗?

迈克尔:它起航了,在地平线上,在去南极洲的半路上!我确实学过数学,并且仍然非常欣赏它的一切美。上周堵车的时候,我在想不同类型的无穷大,不同大小的无穷大,在[01]之间的简单数轴上。

但这在数学中并不奏效。我相信软件开发是我真正的职业。我喜欢每天都这样做。我在数学上所学到的是为发展做的极好的准备。数学的规则和“规则”(语言、API、算法、big-O 等。)的软件惊人的相似。思维类型和解决问题的方式也是相当有可比性的。

软件和创业相对于数学的职业机会没有可比性。建造人们可以使用的东西(软件)比世界上只有 5-20 个人理解和关心的理论(如今的数学)更好。

所以我喜欢它,并且仍然阅读有关它的书籍,但是这些天我没有做任何实际的数学工作。

除了 Python你还有其他爱好或兴趣吗

迈克尔:这些年来,我有许多有趣的爱好。我确实认为在电脑时间和生活中的其他事情之间保持平衡是很重要的。

我很幸运,因为我的工作基本上有三个真正吸引人的方面,我几乎会把它们视为爱好。我经营播客,并真的致力于提高技巧和与听众沟通。我几乎每天都在做软件开发。经营我的生意和整个创业方面的事情是惊人的和有趣的。

就实际爱好而言,我喜欢赛车和任何有两个轮子的东西!我在 1-5 年级的时候参加了 BMX 自行车比赛,然后在初中和高中参加了摩托车越野赛,最后在大学参加了山地自行车赛。我和我的兄弟们在我们的后院建了一个摩托车越野赛赛道,这是很常见的,从学校回家,放下我们的背包,花一两个小时互相挑战,以清除这一系列的跳跃或只是玩得开心。

这些天,我只看摩托车越野赛,也是印地赛车的超级粉丝。我仍然骑着摩托车,但我和我的妻子在波特兰的山上骑着我们的街道摩托车,进行着成熟的冒险。能够与她和我的女儿们分享骑行的经历真是太棒了,她们跳上了我们的一辆自行车的后座。

瑞奇: 从 Talk Python 我们对未来有什么期待?有什么秘密项目想告诉我们,或者有什么想分享和/或宣传的吗?

迈克尔:我有一些项目,涉及即将推出的激动人心的课程。实际上,我希望能更快地了解我在那里的工作,但是“抄袭”我的热门课程的数量惊人。

我们现在至少有 4 门课程在积极开发中,还有一大堆我们想要建造的东西。因此,就课程而言,只要我们看到社区需要新的课程,就可以期待我们继续努力。你还可以期待更多世界级的作者在那里创作内容。我真的很荣幸能够为每个人的课程工作,并使我对这一资源和业务的梦想成为现实。

就播客而言,不要减速。我们有 Talk PythonPython Bytes ,两者都很强大。我只是希望在 Talk Python 上给社区带来更好更深入的故事,并与我的搭档 Brian Okken 一起每周更新 Python Bytes 上最令人兴奋的编程语言。

感谢大家邀请我参加真实 Python 节目。我是你们创造的资源的忠实粉丝。如果读者对我的项目感兴趣,请在 talkpython.fmpythonbytes.fm 订阅播客。如果他们有 Python 的某些方面想亲自或为他们的团队学习,请访问 training.talkpython.fm 查看我们 100 多个小时的课程。


迈克尔,谢谢你参加我本周的采访。有你在采访麦克风的另一边真是太好了。

一如既往,如果你想让我在未来采访某人,请在下面的评论中联系我,或者在 Twitter 上给我发消息。