采访“Talk Python To Me Podcast”创始人 Michael Kennedy

Michael Kennedy:“有了播客,我就可以向全世界的人们免费提供一些东西,并让信息触达尽可能多的地方和人。”

简介

Michael Kennedy 是一名成功的企业家和软件开发专家。 他创办并主持了每周一次的播客 Talk Python To Me, 该节目主要关注 Python 和相关的软件开发话题。 他还创立了在线 Python 培训项目“Talk Python Training”,并担任首席作者。 我们有机会就编程经历采访了 Michael,下面是完整的文字记录。 希望你们喜欢!

采访

Evrone: 我们 Evrone 做定制开发已经有很多年了,我们想在俄罗斯为 Python 开发人员组织专业社区,就像 Ruby 开发人员的社区一样。 你的播客在俄罗斯很有名。 首先,我们代表俄罗斯 Python 社区的朋友们,感谢你的辛勤工作。

我们的第一个问题是:如果不存在 Python 这门语言,你会选择使用哪种语言?

Michael:这个问题提的好。 Python 已经存在很长时间了,有 30 多年了,我认为这本身就很令人惊讶。 我是学 C++ 出身的,那是我的第一个编程语言。 到现在我还是很喜欢那些 C 风格的语言,我也考虑过如果没有 Python 我会选择哪种语言。 我觉得我很可能会选择某种 C 语言。 很可能会是 C#。 实际上,我非常喜欢 C#。 我觉得它是一种非常棒的语言。 我也很喜欢 Swift 这门语言,但我觉得它的生态系统没那么好。 我觉得它对基类库的支持不是很好,而且不够清爽。 我还用过很长一段时间的 JavaScript。 JavaScript 不是一种我想要长期使用的语言。 我并不是彻头彻尾地讨厌 JavaScript,只不过它不是我最喜欢的语言。 所以我会选 C#。 尤其是现在它已经实现了跨平台。 但是如果可以的话,我还是会继续使用 Python。 我不认为它的地位会被动摇。

 

Evrone: 是的,Python 现在正在席卷整个软件界。

Michael: 确实如此。 尤其是在数据科学方面。

 

Evrone: 如果让你畅想一下可能的未来,会不会出现一种编程方法,不需要程序员了解特定语言的语法,就能用这种语法来编写文本? 你对此怎么看?

Michael: 每隔 10 年左右,人们就会说,“哦,我们不再需要程序员了。 我们再也不需要使用文本编辑器来工作了。” 有时,这是由“无代码”、“拖放”工作流之类的解决方案引起的。 有时,是由外包引起的。 有个问题在美国引发了很大的担忧,那就是很多工作岗位会外包到像印度这样的地方。 我认为这根本不是什么问题。 我们在世界各地的编程岗位比以往任何时候都多。 我不认为在这方面会有什么大的变革。 有很多更好的工具可以让你构建低代码/无代码的解决方案。 但是,我认为现在更令人瞩目的是人工智能。

我相信你一定见过 GitHub Copilot,你可以用它来编写一些文档,然后对它说,“变成程序”,并使用 Codex 作为底层的 ML(机器学习)引擎。 它会访问所有 GitHub 源代码,然后编写这些代码。 我不认为这样的方法能够解决当下的问题,但我们已经看到了机器学习的飞速发展。 放眼 10 到 20 年后,你可能会让一个搭载人工智能的编辑器来写一个程序,而且它可能真的可以完成任务。 话虽如此,我认为这并不意味着不再需要程序员。 我认为还是需要有人来核查人工智能完成的工作。 必须有人来维护和发展它。 而且我不知道人工智能是不是能够发展到这种程度,比如你可以说:“我现在想增加这个功能。 请重写我的程序。” 也许吧,但我觉得不太可能。 实际上,我认为这些基于 GPT-3(第3代生成预训练转换器)的人工智能类型的东西对未来的影响要比无代码的“拖放”工作流有趣得多。

 

Evrone: 是的,作为人类,我们热爱相互交流,这是我们进化而来的天性。 你在存储库中有自己的 Python 播客抓取脚本,每个人都可以复制播客的所有音频记录。 你对人们复制你的作品怎么看?

Michael: 没错。 任何人都可以下载。 大概有 5 个 G。 下载需要一些时间,但不是很久。 事实上,我一直在思考这个问题。 你必须考虑你放在 GitHub 上的源代码和项目,以及你可能放在播客或 YouTube 上的原创内容。 对于我来说,这又回到了思考我真正的工作是什么这个问题上了。 我真正想要达到的目的是什么? 通过播客,我想要做到的是让尽可能多的人看到我想要传达的信息。 我想分享有关 Flask 2.0 的详细信息,或者 Python 在天文学中的用途或其他话题。 我想让这些信息触达尽可能多的地方和人。 为了做到这一点,我免费提供播客。 播客有时候是靠广告支持的,但是,每个人都可以看到。 完全免费。 而且我会鼓励大家下载并分享这些内容。 这对我来说没问题,因为我还有 Python 课程。 有些是免费的,但大多数课程是付费的。 这很公平,不是吗? 我想向世界免费提供一些内容,真正努力地去支持和鼓励社区,但我也要创造一些人们更想支持、能从中学到更多东西的内容。 他们也可以这么做。

 

Evrone: 谢谢。 你在努力帮助开发人员,真的很棒。 Apple 也是试图帮助开发人员的一个公司,他们用新的 M1 芯片彻底改变了世界。 他们把 Apple 的神经引擎放到了芯片中,并提供给开发人员使用。 你有机会试一试吗? 你对此有什么看法?

Michael: 我对 Apple Silicon 和 M1 非常着迷。 因为它配备了神经引擎,我认为这将开启许多非常有趣的可能性。 我们认为使用 GPU 和机器学习需要非常大型、非常昂贵的硬件,这些大型机器会产生很大的噪音。

如果可以把它们放在 M1 芯片或安装到手机上,我们就能完成一些非常有趣的事情,特别是边缘计算。 人工智能和语音助手以及所有这些都可以在本地加入。 所以我认为这是一项具有很大积极意义的举措,你可以在 Python 中用机器学习做这么多事情,可以充分利用这些东西,多棒啊。 虽说如此,我只是作为消费者在使用它,而不是作为开发人员,但我有一个我最喜欢的编辑类应用,可以用来做各种美工,比如徽标等等。 这个东西叫作 Pixelmator Pro。 它的很多工作都是通过 ML 系统完成的。 比如,如果你要调整图像的大小,你可以使用 ML 引擎和底层的神经系统来完成,而不是用数学公式进行调整。 我非常喜欢。

 

Evrone: 没错,我们以后一定能见到比如 Photoshop 或 Affinity Design 等应用,在这些应用中,图像、音频和所有数据都将使用这个引擎进行处理。

可以这样说,开发人员不仅喜欢听成功的故事,也很喜欢听有关挫折的故事。 那你能跟我们讲讲,在你的职业生涯中,遭遇不顺时你是如何处理的吗?

Michael: 我在想,关于这个问题,我要分享什么经历。 我要分享的故事和我工作过的一家公司有关。 我们当时在尝试建立一个基于面对面培训平台的在线教育平台。 我们有数千名学生来上课,我们就在想,那好吧,我们建立一个在线版本吧。 一切都很自然。 我们有数千名顾客。 我们将开设一些课程,并将它们放到网上。 但说真的,进展不太顺利。 我们花了很多时间,差不多 6 个月的时间,我们在这个项目上投入了很多人手,但收效甚微。

而我真正从中学到的,并不仅仅是关于软件开发。 而是关于“如何将信息传递出去?” 以别人的构想为基础进行改进很容易,对吧? 比如,Instagram 做了这个,但我们可以做得更好。 Airbnb 做了那个。 但是你知道吗? 如果我们把这个想法应用到卡车上,那就太棒了。 对吧? 我们大多数人都能开发出那个软件。 但如果没有人知道,就没有人来体验。 这真的很难。

所以我想说,就我的经历而言,最大的挑战往往并不是技术问题。 而是我们的技术梦想和现实世界的差距。 然后你必须以此为起点。 我也遇到过一些有趣的技术故障,不得不处理的那种故障。 但最大的挑战是花了大量时间开发了一些很棒的东西,却无法让大家知道它。

 

Evrone: 是的,写软件是一回事。 而让世界知道它是另一件与此相关的事,因为软件是要去帮助这个世界的。 它需要用户。

很多初级开发人员都在使用先进的想法,比如 JetBrains PyCharm 或带有 Microsoft Python 扩展的 Visual Studio 代码。 对于新的开发人员来说,编程的乐趣会被持续不断的警告和大量被突出显示为错误的代码所吞噬,我们如何避免这种情况呢?

Michael:是的,这正是问题所在,对吧? 对于初学者来说有很多挑战,我认为其中一些挑战与选择合适的问题难度有关。 如果你选择了一个过于简单的问题,它不会对你产生激励作用。 如果你选择了一个过于困难的问题,即使它看起来可以做到,但也只会让你感到沮丧。 因此,你必须找到合适的级别,我认为这会有所帮助,因为这样你就不会接触到过于复杂的代码了。 但这个建议非常模糊。 不是很具体,也不是很有帮助。 我认为更有帮助的建议是:当你看到其中一个错误时,不要只是想,“哦,程序还能运行,可以忽略。” 相反,你应该花点时间弄清楚这个错误意味着什么,以及它试图教给你什么东西。 例如,PyCharm 可能会向你显示的一个常见错误是:此局部变量隐藏了全局变量,您的代码仍然可以使用它,但它将显示为警告。 你可能会想,好吧,反正我也不知道那是什么意思,继续吧。 但是,如果你能停下来想想,“哦,我明白了,如果我好好思考一下,选择一个不同的名称,我的代码中就不会出现这种混乱了。”

有时你需要 "放慢脚步"。 弄清楚问题意味着什么,不要只是试图得到答案,而要不断利用这些学习周期。 如果在构建程序六个月后将 Linter 应用到程序中,也会发生同样的情况。 会整页整页地出现你没有见过的问题。 如果你从一开始就预见到了这些,每天处理一两个问题,就很好。 但是如果在六个月里积累到上千个问题,你根本不会考虑腾出一周的时间来修复问题。 那样不是很有成效。 因此,如果你花一点时间弄清楚每个问题想要告诉你的是什么,你就会成为一名更好的程序员,并且可以避免出现警告。 修复然后继续。 这样做的好处是,尤其是用 PyCharm,有时用 VSCode 也是,它不只会告诉你问题。 有时还会提供修复方法。

 

Evrone: 如果要说灵感,那寻找有趣的和非标准的解决方案是我们开发人员喜欢编程的原因。 你对开发人员有什么建议? 他们从哪里可以找到克服乏味的日常工作的力量,在软件开发中找到兴趣、灵感和快乐?

Michael: 我们总是在追求那些新的华丽的库和可以用来解决某个问题的东西。 但很多时候,那并不是我们需要的。 我们只需要解决问题。 与此有点类似,但又确实不同的是,我们需要为它创造新的东西。 我觉得我们可以做的一件事情就是帮助克服这些挑战,或者解决这些枯燥、重复的流程,也就是利用我们的创造力和编程技巧找出一劳永逸地解决问题的方法。

比如,每天你都要通过 FTP 或其他低效的方式上传一个 CSV 文件,你先下载这个文件,然后通过脚本运行它,上传就完成了。 然后它会进入数据库,其他人会做一些关于它的报告。 你可以找到一种方法来学习如何编写守护程序,这个守护程序会监视目录中要删除的文件,然后自动执行这些操作。 你可以想象一下“让无聊的事情实现自动化”这种事情。

虽然最初它可能会很无聊,但如果你能找到一种方法使它完全自动化,或者几乎完全自动化,这样一来,每次运行的它时候,你都可以微笑着说,“嗯。 之前确实很无趣,但是看看现在。” 这些问题也会帮助你成长为一名软件开发人员。 也许你知道如何加载 CSV 并将其保存到 Postgres 或其他地方。 但是你不知道如何用 Python 在 Linux 上创建一个能够连续运行的守护程序。 学习这些东西非常有趣。 这些新东西超级棒,这才是你应该去探索的。 而且,这样你就再也不用去做那些无聊的事情了。

 

Evrone: 没错。 作为一名开发人员,你多久要考虑一次你的应用即将运行的确切的服务平台或无服务器平台? 它是不是会以某种方式反映在你的代码中?

Michael: 我想说,我不需要经常去考虑这件事。 在很小的程度上,是的,它会反映在代码中。 这是我对这些云平台的看法。 你必须做出一个很有意思的权衡。 如果你全力以赴开发他们所说的云原生应用,开发使用各项服务的应用,你就可以创造出真正令人惊叹的东西。 如果你使用托管数据库、托管队列服务和托管电子邮件服务,你可以直接使用所有这些服务,你可以构建一些非常有趣的应用,但有两个限制。

第一,你将永远受限于那个特定的云端。 如果你基于所有的 Amazon API 和服务进行了构建,如果要迁移到 Azure 或 Linode 等类似的平台,就差不多需要进行一次彻底的重写。 因此,如果想要随时迁移,你可不想这么做。 还有一个缺点我不喜欢:如果你的网络不好或者离线,你就无法工作了。 如果你在飞机上,或者你因为新冠病毒需要居家隔离,但你在家里闷坏了,想去公园走走,在公园的长椅上办公,你就没法使用应用工作了。 所以对我来说,我所做的就是在一组 Linux 虚拟机上运行我们的服务。

这些服务可以在 Digital Ocean、Linode 和 AWS 中运行。 除此之外,我还使用了一些非常独特的服务。 例如,我有一个云服务,用于从音频创建文字记录。 它与这些 API 完全集成。 但这并不影响应用其余部分的运行位置。 我有一个差不多可以在世界各地分发视频的平台,我将它与这项服务集成在了一起。 但这并不是我的应用和基础设施的全部内容。

这就是我的观点。 我倾向于有一些更简单的东西,可以随身携带到不同的地方。 这非常适合我。 也许我可以在 AWS Lambda 或 Azure 功能上做一些事情,这样我可能过得更轻松,但我不会这么做。 我们很多人都在想大公司在做什么,以及他们达到的惊人规模,认为这些建议适用于我们。 有一篇非常好的文章叫“You Are Not Google(你不是 Google)。” 你不是 Facebook;你不是 LinkedIn。 文章中谈到,如果你看到那些公司在做云计算和其他令人惊叹的事情,他们之所以这样做,是因为他们拥有数以亿计的用户,而且他们可以做到零停机。 你可能拥有两千名用户,可以承受每月一次每次 5 秒的停机时间。 这听起来差别不大,但对于你要构建的东西的复杂度来说,却有很大差别。

 

Evrone: 大家普遍认为 Python 很慢。 你有没有遇到过这种性能不足的情况? 你有没有进行一些调整来加快它的速度?

Michael: 我有过这样的经历,但这对我来说不是问题。 我做的不是数据科学或大规模数学计算。 我是在构建 API。 我构建的是 Web 应用,诸如此类的东西,或者说是一些自动化的东西。 实际上,Python 非常非常适合这些场景。 它很擅长与其他系统交互。 而这些其他的系统包括网络、数据库和第三方 API,比如 Stripe 或电子邮件服务,等等。 在这样的场景下,它的速度是相当快的。 我觉得,从网络输入到网络输出的平均响应时间大约是 30 毫秒。 没有人会察觉到 30 毫秒和 20 毫秒之间的区别。 也许你会说,是不是减少计算量就可以减少使用的服务器的数量,但实际上大部分时间都是在等待数据库和其他事情,所以这样没法大幅提升速度。 从科学方面看,我认为它非常有意思。 如果所有东西都用纯 Python 做,那我同意你的看法,它可能会相当慢。 但在数据科学方面的情况往往是:“我要这个库。 我要 TensorFlow 或类似的东西。” 这些都是围绕 C 代码的非常薄的外壳,C 代码非常非常快,所以你可能会用 C 语言获取数据,然后可以从 Python 中查看数据。 在这种情况下,速度也很快。

有关 Python 运行速度的探讨很有意思。 就 Numba 或 Cython 这样的东西来说,我确实同意这一点。 我用 Cython 做过一些东西。 实际上,我听说过 Cython 中的 Django 视图,对我来说这个想法听起来很疯狂。 但是他们在视图中进行了大量的计算,而在 Cython 中进行计算会更快。 这是技术方面的问题。 当人们谈论慢与快这个问题时,你需要考虑的另一件事是:“你想让什么变得更快?” 如果我用 C++ 编写一个程序,它可以在运行 10 秒内给我一个问题的答案,我用 Python 编写同一个程序,它可以在 5 分钟内给我答案,那么,C++ 更快。 但是,如果我需要花一周的时间来编写 C++ 代码,而编写 Python 代码只需要用半天的时间,那么我就节省了大量的时间。 因此,我认为这与你要优化的内容有关。 你要优化的是开发速度、产品速度,还是计算速度? 有时,C++ 或类似的东西,比如 Go 或其他东西很有意义,但这种情况并不像人们想象的那样常见。

 

Evrone: 你觉得 Python 有什么奇怪或糟糕的地方吗? 你觉得应该对 Python 进行哪些改进?

Michael: 我对 Python 的现状还是比较满意的。 我没有什么特别重大的想法。 我会分享几个我认为非常重要的东西,然后再讲一两个比较奇怪的语言方面的东西。

我认为“else”语句没有任何意义。 所有其他语言都完全能够在没有“else”的情况下执行循环,在没有“else”的情况下进行异常处理。 它的使用频率不是很高。

我觉得围绕类型注释有一些很有意思的东西,我们或许可以用它们来做更多事。 尤其是,有了类型注释,我们也许就能更快地进行数学运算。 例如,解释器可能会查看一组数字的类型注释,这样我们就能使用 C 级数字,而不是速度慢得多的无限级数字。 诸如此类的事情就很好。 但是对我来说也不是什么大不了的事。

另外,我希望能够在 PyCharm 或 VScode 中加入按钮,或者运行命令行操作,以及非常容易获得可以分享给其他人的可执行文件。 不必安装库,直接运行即可。 我知道有 Pyinstaller 和 Py2exe,但这些东西非常脆弱,不太容易使用。 如果可以的话,就像在 PyCharm 或 VScode 中按一下“run(运行)”那样简单,如果只按一下“Build(构建)”,然后东西就出来了,那就太好了。 除此之外,我还希望有能够同时支持桌面和移动应用的 UI。 我认为这两件事,分发和用户界面,如果能把它们真正做好,想想 Python 会多受欢迎。 没有这些加成它都已经很受欢迎了,但你不能用它来开发移动应用。 如果可以的话,那简直太棒了。 希望这方面的改进能够实现。

 

Evrone: 非常感谢你,Michael! 很高兴与你进行这次对话,希望我们能在某个线下会议上面对面地进行交流。 谢谢,再会!

总结

我们非常高兴有机会与 Michael 聊天,并从他的 Python 专业知识和经验中学习。 从行业专家那里获得有关我们每天使用的编程语言、工具和解决方案的宝贵见解,有助于我们更好地为客户服务并满足他们的软件需求。

我们也要感谢我们的同事,Selectel 的 Nikolai Rubanov,感谢他帮我们准备本次​采访的问题。

在 Evrone,我们经常使用 Python 为我们的客户开发定制软件解决方案。 如果您想详细了解我们提供的服务,或者在您的最新项目中需要帮助,请发消息给我们,我们将很快与您联系,看看我们能在哪些方面为您提供帮助。

我们总是在追求那些新的华而不实的库,以及可以用来解决问题的新的华而不实的东西。 但很多时候,那并不是我们需要的。 我们只需要解决问题。 要处理这些枯燥、重复的事情,我们能做的一件事就是利用我们的创造力和编程技巧,找到可以一劳永逸地解决问题的方法
Michael Kennedy
Talk Python To Me 播客的创办人和主持人
联系我们
已有项目构想?
我们一起来实现它吧
添加附件
文件必须小于 8 MB
允许的文件类型:jpg jpeg png txt rtf pdf doc docx ppt pptx
本网站受 reCAPTCHA 保护,并适用 Google 隐私政策服务条款