本周,我们的 Python 社区采访对象正是迈克尔·肯尼迪 的跟我聊Python 名声。
你可能听过他权威的声音,但你知道他的Python故事吗?请继续阅读,了解他使用 Python 的旅程、他遇到交通堵塞时的想法以及他对两个轮子的热爱。
瑞奇: 欢迎来到真正的Python!如果我没记错的话,您最初是一名 .NET 开发人员,甚至是一名 Microsoft 认证培训师。所以我很好奇你是如何接触到 Python 的以及是什么让你坚持下来的?
迈克尔: 感谢您的款待。哦,这勾起了我的回忆。是的,我用 C# 进行全职 .NET 开发大概有 10 年了。这是我今天仍然尊重的语言。
在想要扩展到 Microsoft 领域之外的领域后,我找到了使用 Python 的方法。我猜这可能是 2012 年或大约那时。在那之前有一段时间,我除了 JavaScript 之外,并没有在 C++ 和 C# 之外做太多事情。 (没有人能逃脱 JavaScript!)我研究了流行的语言,而这正是 Python 变得越来越流行的时期。
我花了几周时间学习 Python,并且非常着迷,但我并不知道。
我研究了该语言和生态系统,发现它非常好——比我预期的要好得多。但我遇到了每个真正精通某种语言的人在尝试不同的东西时都会遇到的问题。我记住的一切又是一个挑战。如何创建网络应用程序?我该如何托管它?如何查询数据库?不断地。
我愿意学习并且做到了。但这就是任何人都会有的不安,放弃了熟悉的道路。然而,当我回去编写一些 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 播客 — Talk Python to Me — 的主持人,该播客现已超过 180 集。您也是该节目的联合主持人 Python 字节布莱恩·奥肯的播客。内容很多!您如何继续保持每周的一致性,并保持节目的相关性和新闻价值?工作量一定很大吧?
迈克尔: 这绝对是很多内容。但这是一个非常有价值的项目,已经进入第四个年头了和我谈谈Python ,第三年为Python 字节 .
我如何仍然保持一致?这是个好问题。我开始播客是因为其他人不一致。在我之前已经有基于 Python 的播客了。但早在我加入游戏之前他们就已经停止制作剧集了。事实上,这就是为什么我觉得我可以开始,因为内容非常缺乏。
我之所以保持一致,有几个原因。首先,当我开始播客时,我向自己保证,我会在六个月内每周都播客,然后决定社区和我是否喜欢它。在进行了如此一致的内容创建之后,您已经深深地养成了这样做的习惯。
其次,那时我已经有几家公司赞助了这个播客。我想也许,只是也许,我可以找到一种方法,利用播客来摆脱我的日常工作。我并不讨厌我的日常工作,但它无法与做你认为对社区和世界真正有价值的事情相比。一旦你接受金钱来长期生产一件东西,一致性就只是协议的一部分。
最后,听众对我的工作非常支持。为每个人制作内容真的感觉很棒。我期待着我创作的每一集。毕竟,我从每个人身上都学到了很多东西,并且一直持续到今天。
至于保持节目的相关性和新闻价值,这很容易。为了Python 字节 ,这就是字面上的主题(每周新闻),我们从听众那里得到了大量的帮助,他们每周都会推荐很棒的新项目。
为了和我谈谈Python ,这个比较难。每一集都深入探讨一个主题。对于前 20 集左右,这对我来说已经很容易了。例如,我使用过 SQLAlchemy,所以向 Mike Bayer 询问它只是回顾我的经历。但它很快就发展成为我几乎没有经验的领域。我现在每周都会花大量时间研究要涵盖的主题。任何特定剧集在我们录制之前都会经过 4 至 8 小时的研究。
这就引出了你问题的最后一部分:是的,这是很多工作。有人问我每周花多少时间在节目上。他们甚至说:“你们的交易真是太好了。您每集在播客上的花费是多少?几个小时?”嗯,那会是一些事情!每集我可能会花大约 2 天的时间进行研究、与嘉宾接触、电子邮件通信、网站开发、赞助关系等等。
这是很多时间,但它实际上也是我生意的基础。播客和课程只有知名度高且质量高才能发挥作用。非常幸运的是,我能够将兼职播客转变为全职工作(播客和课程)。它让我真正保持专注并保持一致。
瑞奇: 如果我们的读者不通过播客认识您,他们肯定会通过您关于 Talk Python Training 的精彩课程认识您。当我开始学习 Python 时,我学习的第一门课程是您的《Python Jumpstart by Building 10 Apps》课程,顺便说一句,这门课程非常棒。您刚刚发布了一门名为“异步技术和示例”的新课程。您能否告诉我们更多相关信息以及为什么您决定专注于异步?
迈克尔: 谢谢!这些课程对我来说是一个真正充满激情的项目。很长一段时间以来,我一直想为 Python 课程创建最好的在线图书馆。
当我第一次开始播客时,我也想开始课程。我看到他们齐头并进,互相支持。然而,当时我在一家为开发人员提供面对面和在线培训课程的公司工作。
他们给了我很大的自由和灵活性。但我在业余时间有效地创建一家竞争公司是行不通的。所以我从播客开始,然后一旦我可以独立全职工作,我的第一个行动就是创办培训公司并通过构建 10 个应用程序快速启动 Python 在众筹 。那是一次非常有趣的经历,也是一次巨大的成功。
这新的异步课程 非常有趣,我觉得社区确实需要它的存在。它需要存在有几个原因。对于很多人来说,Python 异步/并发编程故事有点难以理解和理解。我们有 GIL,实际上它在真正的Python 。这意味着普通线程仅对 IO 密集型工作有效。 CPU 密集型工作需要另一个 API,即具有其独特特性和技术的多处理。
现在,从 Python 3.5 开始,我们有了令人惊奇的功能async
和await
关键词。它们强大而干净,但给情况带来了更多的选择和更多的迷雾。这没有考虑 Cython 及其的异步功能nogil
关键词。
第一个原因是异步和 Python 存在很多混淆。你听说有人因为 Go 的“更好”并发性而明确放弃 Python 而转向 Go。通常,人们寻求的并发类型是 IO 绑定,无论如何,这在 Python 中运行得非常好。
下一个原因是异步和并发编程的教学顺序奇怪地错误。我的意思是,通常会预先呈现大量令人困惑的低级细节。最后将其组合成有用且引人注目的示例。但学习者必须做到这一点才能得到回报。这通常还伴随着线程安全和竞争条件有多困难的可怕警告。所有这些都是真实准确的。但为什么要从这里开始呢?
我想要一门课程来展示异步在许多情况下是多么高效、有趣且实际上简单。一旦学生看到了价值,那么您就可以深入研究线程安全等内容。
最后,Python 的异步课程确实不多。我只知道另外一个,它在订阅墙后面。
瑞奇: 众所周知,您是 MongoDB 的忠实粉丝。您觉得它最吸引人的是什么?如果有人以前从未使用过它,为什么他们会考虑在下一个 Python 项目中使用它?
迈克尔: 我是 MongoDB 的忠实粉丝。很久以前,我向一位朋友抱怨部署关系数据库应用程序是多么痛苦。关于在不停机的情况下应用迁移脚本是多么痛苦以及类似的事情。他说:“好吧,为什么不直接使用 MongoDB,这样就不会出现这个问题了?”。
我接受了他的建议,他是对的!从那时起,我在 MongoDB 上启动了 4 到 5 个主要项目。我的两个播客网站(谈话Python.fm 和pythonbytes.fm )并且课程网站在 MongoDB 上运行。
我知道有些人在使用 MongoDB 时有过不好的经历。早期有一些“最佳实践”并不是 MongoDB 的默认设置,并且有很多关于这些的故事。其中大部分已得到修复,如果您知道避免它们,那么您就处于良好状态。这仍然存在一个主要问题 MongoDB 的运行无需身份验证,除非您显式创建帐户。
也就是说,MongoDB 对于我和我的项目来说是完全无懈可击的。多年来,它一直为上述网站提供支持,没有出现任何停机情况。我实际上从未运行迁移或升级脚本来部署新的架构或数据模型。
Mongo 灵活的模式模型和 MongoEngine 基于类的 ODM(想想 MongoDB 的 ORM)非常适合我的项目。网站以超低延迟运行。对于重要页面(从请求到服务器响应),获得 10-20 毫秒的响应时间是很常见的。
我个人完全可以为您的项目推荐 MongoDB。如果人们有兴趣,我还创建了一个免费课程freemongodbcourse.com .
瑞奇: 现在 Python 已经不再碍事了,是时候谈谈有趣的事情了……数学!您拥有数学硕士学位,并且确实开始了您的博士学位。未来有计划完成吗?或者那艘船已经启航了吗?我想你仍然对此充满热情。你每天都能挠痒痒吗?
迈克尔: 它已经航行,越过地平线,到达南极洲的一半!我确实学过数学,但仍然非常欣赏数学的一切之美。上周堵车时,我只是在 [0, 1] 之间的简单数轴上思考不同类型的无穷大、不同大小的无穷大。
但这在日常数学中是行不通的。我相信软件开发是我真正的使命。我喜欢每天都这样做。我在数学中学到的东西为发展做好了很好的准备。数学规则和软件“规则”(语言、API、算法、大 O 等)惊人地相似。思维方式和解决问题的类型也相当相似。
软件和创业与数学的职业机会没有可比性。最好是构建人们可以使用的东西(软件),而不是世界上只有 5-20 个人会理解和关心的理论(现在的数学)。
所以我仍然喜欢它阅读有关它的书籍 ,但这些天我没有做任何实际的数学工作。
瑞奇: 除了Python之外,您还有其他爱好或兴趣吗?
迈克尔: 多年来我有很多有趣的爱好。我确实认为在计算机时间和生活中的其他事情之间取得平衡很重要。
我很幸运,因为我的工作基本上有 3 个真正吸引人的方面,我几乎会考虑将它们视为爱好。我经营播客,并且非常致力于改进播客技巧并与听众建立联系。我几乎每天都在进行软件开发。经营我的生意和整个创业方面是令人惊奇和有趣的。
就实际爱好而言,我喜欢赛车和任何有两轮的东西!我在 1 至 5 年级时参加 BMX 自行车比赛,然后在初中和高中参加越野摩托车比赛,最后在大学参加山地自行车比赛。我和我的兄弟在我们的后院建了一条摩托车越野赛赛道,放学回家,放下背包,花一两个小时互相挑战以完成这一系列的跳跃或只是享受乐趣是很常见的。
这些天,我只看越野摩托车,也是印地赛车的忠实粉丝。我仍然骑车,但和我的妻子一起骑着我们的街头摩托车在俄勒冈州波特兰的山区周围进行柔和的冒险。很高兴能够与她和我的女儿们分享骑行的经历,她们跳上我们一辆自行车的后座。
瑞奇: Talk Python 的未来有什么值得我们期待的?您想告诉我们任何秘密项目或者您想分享和/或插入的任何内容?
迈克尔: 我有一些涉及令人兴奋的课程的项目即将推出。我实际上希望更坦诚地介绍我在那里所做的工作,但是可以说,“抄袭”我的热门课程的数量令人惊讶。
我们目前至少有 4 门课程正在积极开发中,还有大量我们想要构建的东西。因此,就课程而言,希望我们能够继续开发我们认为社区需要的新课程。您还可以期待更多世界级的作者在那里创作内容。我真的很荣幸能够为每个人提供课程,并使我对这个资源和业务的梦想成为现实。
就播客而言,没有放缓。我们有谈论Python 和Python 字节 ,而且两者都在强劲发展。我只是希望给社区带来更好、更有深度的故事谈论Python 每周更新,掌握最令人兴奋的编程语言Python 字节 和我的搭档主持人布莱恩·奥肯 (Brian Okken) 一起。
谢谢大家邀请我来到这里真正的Python 。我是你们创建的资源的忠实粉丝。如果读者对我的项目感兴趣,请订阅播客:谈话Python.fm 和pythonbytes.fm 。如果他们想个人或为团队学习 Python 的某些方面,请查看我们 100 多个小时的课程:训练.talkpython.fm .
谢谢你,迈克尔 ,加入我本周的采访。很高兴您能坐在采访麦克风的另一边。
一如既往,如果您希望我将来采访某人,请在下面的评论中与我联系,或者在 Twitter 上给我发消息 .