8.3 KiB
安东尼·肖的 Python 社区访谈
今天, NTT 有限公司负责人才转化和创新的全球高级副总裁 Anthony Shaw 和我在一起。Anthony 也是一名真正的 Python 教程作者,并写了一本名为CPython Internals的新书。
在这次采访中,我们讨论了各种各样的话题,包括 Python 安全性、给初学者的建议以及他对海滩的热爱。事不宜迟,让我们欢迎安东尼。
安东尼,谢谢你加入我的节目。我很高兴你能和我一起参加这次面试。我想以我们对所有来宾一样的方式开始:你是如何开始编程的,你是什么时候开始使用 Python 的?
安东尼:嘿,瑞奇。感谢有机会与真正的 Python 读者对话!
我在 90 年代初开始接触编程,学习如何为比可编程计算器小不了多少的设备编写代码。十几岁时,我把一轮送报的大部分收入都花在了编程书籍和计算机硬件上。
我基本上是自学的,从一些较老的基本类型语言开始,到像 C++和 C#这样的面向对象语言。我一直在用 C#。NET 工作了大约八年,在为一个开源项目做贡献的时候发现了 Python,这个项目需要我在工作中开发的一个 API 的支持。
我在 2010 年的一个长周末学习了 Python 的基础知识,并爱上了这种语言在处理流动数据结构方面的灵活性,以及使用面向对象编程和过程编程的自然方式。
你最近似乎对 Python 安全产生了兴趣,为 Django 编写了一个 PyCharm 安全插件和一个跨站点脚本库。你甚至在 SQL 注入制作了一个视频。你是如何进入 infosec 的,这是你职业生涯中一个永久性的焦点变化吗?
安东尼:这一直是我好奇的事情。我想这是从我上大学的时候开始的,当时任何接入没有防火墙的校园局域网的东西都会在 60 秒内被安装木马。
我成了走廊 IT 支持工程师,修理人们的电脑以换取啤酒供应。不久之后,我在当地一家服务器托管公司找到了一份实实在在的技术支持工作。
当 PHP 在网络上流行的时候,带有非常不安全的 PHP 代码的服务器到处都被黑客攻击。如果你想要有动力去艰难地学习一些东西,试着在凌晨 3 点被客户叫醒,因为他们的服务器被黑客攻击了。
在客户允许的情况下,我可以远程访问服务器,弄清楚它们是如何被入侵的,与客户协商,然后重新安装所有的东西。该公司没有开发软件。我们只是在托管服务器。当他们习惯了僵尸网络(或者更糟),它真的会开始影响其他人。
为了尽量减少我在通话时的睡眠中断,我编写了一系列脚本来扫描网络,寻找已知的漏洞和常见的未打补丁的系统。我可以提前提醒客户。
现在,您可以购买现成的软件来实现这一点,但通过访问 Shodan 等数据库和 Metasploit 等自动化漏洞利用工具,任何人只要有鼠标和键盘就可以点击进入 root 访问。
今年,我一直在为 Python 代码分析编写一些工具。这包括代码复杂性分析器 Wily ,以及 PyCharm 的安全代码分析插件 PyCharm Security 。它们有着共同的目标,那就是以尽可能小的性能代价来提高代码的质量和安全性。
与测试一样,修复 bug 最容易的时候是在写的时候!PyCharm Security 会在您输入 PyCharm 时分析您的代码,并突出显示您可能引入的任何安全漏洞。它附带了一个大型文档网站,解释了这些漏洞存在的原因以及如何修复它们。在有明显变化的情况下,PyCharm 可以自动进行重构。
不是转行。我只是对这个话题感兴趣,并对开发人员学习编写安全和可维护的软件充满热情。
虽然这些采访是关于社区成员的个人故事,但我也试图给我们的读者留下一些可操作的东西,他们可以带走并应用到他们的代码中。因此,考虑到这一点,你能给出哪些大多数人可能没有意识到的安全提示呢?
安东尼:如果你有时间的话,我有一份列出的十件事的清单!Python 面临的最大挑战是反序列化。
pickle库和pyYAML库都带有允许定制反序列化过程的逻辑。这意味着攻击者可以在 YAML 或 pickled 文件中嵌入任何 Python 代码,包括向您的生产服务器添加根用户或窃取您的数据库的代码。这些都是记录在案的问题,但不是常识。
Ricky: 众所周知,你不仅是 Real Python 的教程作者,还是新书 CPython Internals 的作者。你希望人们读这本书时能从中得到什么?在写作过程中,你有没有学到什么让你惊讶的语言,或者你认为你已经掌握了但没有掌握的东西?
Anthony: 我希望读者能够理解 CPython 编译器这种看似复杂的东西,将其分解成小部分,并将其与他们知道或能够学习的概念联系起来。我希望他们不仅能理解它,还能利用它并在此基础上发展。如果只有一个人阅读了这本书并为 CPython 项目做出了贡献,那么这将是一个巨大的胜利。
我已经收到了一些早期版本读者的来信。他们分享了自己重新编译自定义 CPython 编译器的兴奋之情,并分享了书中的一些例子。许多开发人员认为这些事情超出了他们的技能水平,但事实并非如此。
在写这本书的时候,我学到了一件重要的事情,那就是所有的并行性和并发性是如何实现的——而且是相当多的!—在 CPython 工作。Async 对我来说一直是一个有点神秘的黑匣子,我在写这本书之前没有怎么使用它,因为我不知道它是如何工作的,并且不信任它。
在探索了概念和导致关键字async和await的构件之后,比如生成器和协程,async 绝对有意义。后来,我用它来提高一些应用程序的性能。
迄今为止,你已经在一些 PyCon 上讲过话,但我最感兴趣的是你在非洲 PyCon 上的最后一次演讲,题目是“在 2000 万开发者的世界中脱颖而出是什么激发了你做这个演讲,你经常给任何水平的开发者什么建议?
安东尼:看到这么多初级开发人员努力获得他们想要的工作,激发了我做那个演讲的灵感。我采访过很多软件开发人员,也辅导过很多人。我给你的一个建议是深入了解一两个主题。在其他话题上变得宽泛和浅薄。
不要做万事通,但也不要做只会一招的小马。试着真正了解两件事,比如 PyTorch 和 GPU 加速,Django 和 PostgreSQL,或者 Vue.js 和 Jinja。学习足够多的关于其他主题和技术的知识,不要害怕使用它们。了解 SQL,JavaScript,HTML,CSS,MLPs。
你不需要成为每件事的专家,但是如果你能把自己投入到一系列不同的问题中,那么你会更成功。
里基: 现在只剩下最后几个问题了。你在业余时间还做些什么?除了 Python 和编程,你还有什么其他的爱好和兴趣?
安东尼:我喜欢去海滩,步行五分钟就到了。所以一年中有六个月,你会发现我在海边。在这一年剩下的时间里,我喜欢用我的双手建造东西。澳大利亚的冬天凉爽多了,所以我会做很多 DIY 项目。
安东尼,谢谢你加入我的行列,祝你的新书发行好运。
如果你想就我们今天谈论的任何事情与安东尼联系,那么你可以在 Twitter 上联系他。如果你想更深入地研究 CPython,了解它是如何工作的,那么你可以拿一本 CPython 内部的书。
如果你想让我采访 Python 社区中的某个人,请在下面留下评论或在 Twitter 上联系我。编码快乐!
