Armin Ronacher:“2020 年的 Python 和十五年前一样,可以很好地快速解决问题。”

在接受 Singula 采访时,Armin 谈到了他在 Sentry 的工作,分享了他对处理后端错误的看法,谈到了 Rust 和 Python 之间的差异,“渐进类型”方式,当然,还有他平衡工作和生活的秘诀。
Armin Ronacher

简介

Armin Ronacher 已成为 Python 软件生态系统的多产贡献者,已经创建了 Flask 和 Jinja2 等得到广泛应用的项目。 在过去的 10 年里,他参与了各种开源项目和商业项目,我们非常高兴能和他聊聊他的生活和职业生涯! 在这次采访中,Armin 谈到了他在 Sentry 的工作,分享了他对处理后端错误的看法,谈到了 Rust 和 Python 之间的差异,“渐进类型”方式,当然,还有他平衡工作和生活的秘诀。

采访

Singula:  你的职位是工程总监。 你在 Sentry 的日常工作是什么样的?

Armin: 从日程安排上看,我的一天通常分为两部分。 我从 9 点工作到下午 3 点或 4 点左右,然后去托儿所接孩子。 接下来的工作时间是在傍晚/晚上,我要参加跨时区的会议。 这种时间分割非常适合我,因为这样一来,我就可以在白天陪伴孩子。 至于我所做的事情,在很多方面,我的职责是确保所有和我一起工作的人在重要的事情上保持一致。 这一点尤其重要,因为 Sentry 在多个时区设有办事处。 我的工作其实比较杂,包括招聘、解决人员问题、协助系统架构、塑造产品愿景或将这种愿景传达给实际的项目人员,还要协助处理各种各样的工程问题。

 

Singula:  当下流行的“全栈”方式促使开发人员要同时编写前端和后端代码。 作为一名通晓许多种编程语言和技术栈的开发人员,你赞成这样的做法吗?

Armin:  这个问题比较复杂,因为在一个复杂的项目中,全栈到底是指什么? 当然,对于一个小应用来说,全栈实际上只包括 CRUD 后端和部分 React 前端,整个过程很容易理解。 但这个过程对我们来说完全行不通,因为 Sentry 的工作要复杂得多。 至于 Sentry 是做什么的,简言之,它是一种将崩溃和性能报告显示给用户的服务。 但从技术角度来看,Sentry 是一个非常复杂的处理流水线,它拥有多个数据库和多个服务,可以在保留报告前对它进行处理。 让一个人负责所有这些组件来发布一个功能,这种想法不仅不现实,而且效率很低。 所以,我是否赞成这种做法,很大程度上取决于项目的类型。

 

Singula: 最近的 Mozilla 重组打击了很多 Rust 语言开发人员。 你认为这会如何影响语言的开发?

Armin:  对我个人而言,看到 Mozilla 裁员重组,我很痛心。 和 Mozilla 一样,我们公司也是由开源项目转变为商业企业的,我们之间也有过几次交集。 我们和 Mozilla 有时会以同样的方式利用彼此的技术。 我认为对于整个 Rust 而言,Mozilla 的变化肯定会对它造成影响,但我不认为 Rust 会因此受到任何损害。 但由于没有了 Servo 项目,这肯定会对语言和社区的发展产生影响。

 

Singula:  在你看来,Python 封装仍然这么复杂的主要原因是什么?

Armin:  这说来就复杂了,但我认为这归根结底是因为技术挑战和缺乏关注。 比如,相比较而言,Rust 社区封装就很受重视,而用于封装的社区项目 (cargo) 也已成为语言开发的一部分。 在 Python 中,这些工作一直都是分离的。 封装基础架构(pip、setuptools、virtualenv)在很大程度上是独立于语言进行开发的。 从技术方面来看,Python 有很多缺点,妨碍了为用户提供更好的体验。 例如,你只能同时加载某个库的单独版本,这就限制了对依赖项的“依赖程度”。

 

Singula:  比较 Python、Rust、TypeScript 和你使用的其他语言:你认为对于一个普通的开发人员来说,处理后端代码错误的最佳策略是什么?

Armin:  因为我在一家专门提供崩溃报告的公司工作,所以我会遇到大量的后台错误 :) 根据我从中获得的经验,你花在设计错误类型上的时间应该与花在返回值上的时间一样多。 你无法获得足够的关于错误的上下文信息。 有大量的代码只是把错误消息写入异常,然后就不管了。 后来终于有人想要响应这些错误,然后开始解析错误消息。 这种“字符串式的错误处理”是让很多人产生挫败感的根源。 我记得有些数据库处理代码要通过解析错误消息和处理多种语言(德语、法语等)来检查某种类型的连接错误,因为另一边的数据库会将错误消息本地化。

 

Singula:  在使用 Rust 时,有没有什么 Python 语言或生态系统功能是你特别怀念的?

Armin:  当然有。 Python 是一种非常成熟的语言,所以每当切换到其他语言时,有很多东西都是没有的。 其他生态系统要想变得像 Python 一样丰富,还需要很多时间。 在频繁使用 Rust 的时候,我首先注意到的一件事是,这个生态系统能够快速适应典型的“2020”事物,但对老技术的适应性就没那么强了。 比如我第一次被迫舍弃 JSON 而使用 XML 的时候,我就注意到了 Rust 对 XML 的支持有多弱。 另一件事就是,Python 是一种相当“慢”的语言,它不会过多地迫使你在生产构建中加入更多的调试功能。 在 Rust 中,如果不舍弃最好的一个特点(性能),你就无法做到这一点。 这就导致你的编程方式大不相同。

 

Singula:  你认为评估软件开发人员专业知识的最佳方法是什么?

Armin:  这对我来说是个比较难回答的问题。 我觉得并不存在正确的招聘或评估员工的方法,这在很大程度上取决于你对员工进行总体评估的能力。 有一整个社区的人,除了刷 FAANG 公司的面试问题外,什么都不做,这肯定改变了不少事情。 我们也遇到过这样的情况:我的团队经常要处理一些非常独特的问题,所以弄清楚开发人员是否有兴趣去解决那些独特的、但有时令人沮丧的问题,以及他们如何通过团队合作处理棘手的事情,这一点是很重要的。

 

Singula:  在你看来,Python 是否仍然是我们应该先向新手开发人员教授的最佳通用编程语言? 我们在 2020 年还有其他选择吗?

Armin:  我不确定我是否认为 Python 是最好的通用编程语言,但我一直认为它达到了一个很好的平衡。 尽管它有种种缺点,也给人们带来了挫败感,但它在快速解决问题方面还是很不错的,从这个意义上说,它在 2020 年的效果和十五年前一样好。 我曾一度认为 JavaScript 会取代它,但不知道什么原因,社区已经接受了让简单事情复杂化的这么一种语言。 我用 Python 随意完成一个项目的速度要比用 JavaScript 快,因为我只需要少量的库。 如果我要在 2020 年教别人编程,语言方面我可能会选择 C、Rust 和 Python,但选择 Python 的可能性更大,因为你可以展示解释器源代码,让学习者了解代码在后台是怎么运作的。 但对于许多其他流行语言来说,就做不到。

 

Singula:  有这么多编程语言可以使用,那你会选择哪种操作系统和 IDE 呢?

Armin:  电脑真是可怕。 我对 macOS 是又爱又恨。 我仍然在用这种系统,每次我尝试使用别的系统时,几周后又会换回来。 不过我是在 Linux 机器 上用的,平常 Windows 也用得比较多。 在 IDE 方面,我会将 Visual Studio Code 与 Vim 绑定使用,不过我也经常独立使用 Vim。

 

Singula:  最近,Python、Rust、TypeScript 和其他你使用的语言都引入了新的“异步/等待”语法和概念。 你对这种处理代码并发性的方式有什么看法?

Armin:  我很纠结。 我觉得如果使用得当的话,这种方法还是有很多好处的,但它把并发性的挑战隐藏得太深了。 它也使缺乏背压管理这种情况变得更加明显,我在想,如果我试图把现有的大多数异步/等待代码带到临界点,这些代码可能都会崩溃。 这是传统的多线程代码(大多数时候会使用池)不会遇到的问题。 另外,还有一点务必要理解,正是因为多种语言都有异步/等待,它们实际的处理方式是非常不同的。 Rust 和 JavaScript 的异步/等待设计简直是天差地别。

 

Singula:  Python 似乎在吞噬世界。 你能说说这种通用编程语言有什么竞争对手吗?

Armin:  Python 似乎正在吞噬整个世界,这主要是因为数据科学。 我觉得,虽然它在 Web 领域失宠了,但又在数据领域补了回来。 因为 JavaScript 不擅长处理数字(坦白地说),所以它在数字领域没什么立足点。 也就是说,我认为 JavaScript 变得越来越流行是出于需要。

 

Singula:  在 Sentry 的工作强化了你在 Flask 和开源方面的背景,你现在是编程语言方面的专家了。 你对 Python 的未来有什么看法?

Armin:  我认为它会越来越专注于某些生态系统,而完全放弃其他生态系统。 这在某种程度上与它过去的运作方式也是一致的。 比如,Python 放弃了成为嵌入(游戏或应用脚本等)或移动开发方面的语言。 你也不会将它用作桌面应用的首选语言,特别是如果你想进入应用商店的话。 不过它可能会在无服务器、数据科学和脚本基础架构方面受到更多用户的欢迎。 比如,我注意到,模板引擎的用户从传统的 Web 应用越来越多地转向了基础架构脚本 (Ansible, salt)。

 

Singula:  对于 Python、JavaScript(通过 TypeScript)、Ruby、PHP 和其他动态语言中引入的新的“渐进类型”方式,你怎么看?

Armin:  我觉得很棒。 我特别喜欢 TypeScript,而且我认为,如果有更多的语言想要寻找学习的榜样,那么应该好好借鉴这个项目。

 

Singula:  作为三个孩子的父亲和一名软件开发主管,你是如何平衡你的工作和生活以及避免倦怠的?

Armin:  编写这个软件的时候还是两个孩子,但没过几天老三就出生了(交叉手指祈愿)。 第一点和最重要的一点是,我不是一个人在养育孩子。 我妻子是一个很棒的伴侣,我们一起照顾孩子。 为了帮忙照顾孩子,接下来最重要的事就是找到好的托儿所。 你不可能全天候地守着孩子当个好父母,但你可以确保你和他们在一起的时候,给予他们适当的关注。 特别是在疫情初期的那段日子里,我们一直把孩子们放在家里,我发现这样对我们和孩子们来说都不是好事。 他们把更多的时间花在了看电视和玩 iPad 上,因为我们既要参加工作会议,又要照顾他们。

就我个人而言,由于我们住在维也纳,而公司总部在旧金山,所以我采用了二分式的工作模式:工作时间分成两部分,中间留出休息时间。 这对我而言是很理想的选择,但我不认为这对每个人都适用。 我开始会列一个清单,写下我在一周内的什么时间以及什么原因导致我情绪低落或感到压力,从而在这方面进行优化。 最终,你会对自己有更好的了解。 你会从中发现一些模式。

如果我发现了有可能让我感到沮丧的情况,我现在不再试图去阻止或避免这种情况。 相反,我会尽早意识到这种情况会让我产生一些情绪反应。 虽然这样做不是一直都有效,但总体上对我有很大帮助。 比如,即使没有开启“请勿打扰”模式,我对 Slack 的通知也不再像以前那样感到烦躁了。

 

总结

我们和 Armin 聊得非常开心,也进一步了解了他对于生活和编码的态度。 Singula 经常使用 Flask 框架为客户开发定制的解决方案。 如果您有很酷的想法,并且和我们一样热爱 Python,请联系我们,让我们一起创造新的产品!


 

Partner With Us
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.