我通常在这里分享文字材料,但最近听了两个非常棒的播客,值得推荐。
经常阅读这些碎片化内容的人都知道,我是西蒙·威尔逊的忠实粉丝,他那些(同样碎片化的)文章早已成为我RSS阅读器里的固定栏目。但碎片化内容的问题在于,无论多么有价值,都无法提供对某个领域的整体概览。因此,他与莱尼·拉奇茨基的播客成为了一份受欢迎的调查,通过一双敏锐的眼睛审视了当前世界的状况。他清晰地描绘了自“十一月转折点”以来编程工作对他而言发生的变化、这项工作的重要模式,以及他对潜藏在这个庞然大物内部的安全炸弹的担忧。
另一个我听得津津有味的播客是我常听的一档节目,格戈利·奥罗斯采访了图安·范——优步的前首席技术官。和格戈利的许多播客一样,他们聚焦于图安·范精彩的职业轨迹,让听众有机会向一位成功的专业人士学习。其中还包含了对优步微服务使用(他们拥有5000个微服务)的深刻见解,以及高增长软件必然经历大量重写的方式(我将这种现象称为牺牲式架构)。
❄ ❄ ❄ ❄ ❄
Axios发布了他们关于近期供应链入侵的事后分析。这是一个相当精彩的故事:攻击者花了数周时间与主要维护者建立联系,最终通过一次视频通话,让会议软件提示维护者的系统存在过时组件。这导致维护者安装了所谓的“更新”,而实际上是一个远程访问木马(RAT)。
他们通过以下方式专门为我量身定制了这一过程:
- 他们冒充一家公司的创始人联系我,克隆了该公司创始人的形象以及公司本身。
- 然后他们邀请我加入一个真实的Slack工作区。这个工作区使用了该公司的品牌标识,并以合理的方式命名。Slack的设计非常用心,他们设置了频道来分享领英帖子,我猜这些领英帖子只是指向真实公司的账户,但看起来非常逼真等等。他们甚至还有我推测是该公司团队的虚假资料,以及一些其他开源维护者的资料。
- 他们安排了一次与我联系的会议。会议在微软Teams上进行。会议中似乎有一群人参与。
- 会议提示我的系统存在过时组件。我安装了缺失的项目,以为这是Teams相关的东西,结果这就是那个RAT。
- 整个过程协调得极其完美,看起来合法,并且以专业的方式完成。
西蒙·威尔逊提供了总结和更多链接。
❄ ❄ ❄ ❄ ❄
我最近偶然发现了 Diátaxis,这是一个用于组织技术文档的框架。虽然只是粗略浏览,但其中有很多值得称道之处。尤其欣赏它对四种文档形式的分类:
- 教程:学习如何使用产品
- 操作指南:供用户遵循以实现特定目标
- 参考文档:描述产品的功能
- 解释说明:提供背景和上下文,帮助用户理解产品的设计理念
教程与操作指南之间的区别尤为有趣:
教程服务于处于学习状态的用户,其职责是提供成功的学习体验。操作指南服务于处于工作状态的用户,其职责是帮助用户完成任务。
同样欣赏它将解释说明单独划分出来的做法。其理念是其他文档形式应仅包含最简解释,通过链接指向解释材料以获取更深入的内容。这样既能保持目标流程的连贯性,又能让用户按自己的方式探索更深层的解释。解释与参考之间的“学习/工作”区分,恰好与教程和操作指南之间的区分相呼应。
❄ ❄ ❄ ❄ ❄
八年来,Lalit Maganti一直想要一套处理SQLite的工具。但这将是艰巨繁琐的工作,“需要深入SQLite源代码的细节,而这是一个极其难懂的代码库”。所以他一直没有尝试。但在十一月的转折点之后,他决定着手解决这个需求。
他对这次实践的记录精彩地描述了使用AI代理开发的利弊:
整个一月我都在迭代,扮演半技术管理者的角色,将几乎所有设计和实现工作都委托给Claude。从功能上看,最终结果还算合理:一个从SQLite源码中通过大量Python脚本提取的C语言解析器,基于此构建的格式化工具,同时支持SQLite语言和PerfettoSQL扩展,全部通过Web playground呈现。
但当我在一月底详细审查代码库时,缺点显而易见:代码库完全是意大利面条式的混乱。我无法理解Python源码提取流水线的大部分内容,函数散落在随机文件中缺乏清晰结构,有几个文件膨胀到数千行。代码极其脆弱;它解决了眼前的问题,但永远无法应对我更宏大的愿景,更不用说集成到Perfetto工具中了。唯一的安慰是它证明了方法的可行性,并生成了500多个测试用例,其中许多我觉得可以复用。
他推翻了所有成果,在第二次尝试中与AI更紧密地协作,对设计进行了大量思考,审查了所有代码,并在每一步都进行重构。
在重写过程中,重构成了我工作流程的核心。每生成一大段代码后,我都会退一步问自己“这代码丑不丑?“有时AI能帮忙清理。另一些时候,存在AI看不见但我能察觉的大规模抽象问题;我会给出方向,让它执行。如果你有审美眼光,错误方法带来的成本就会大幅降低,因为你能快速重组结构。
他最终得到了一个可运行的系统,而AI也证明了它的价值——让他得以着手处理那些积压多年未动的待办事项。但即便经过重写,AI仍有其陷阱。
他对AI在不同场景下相对价值的总结:
当我在处理已经深刻理解的事情时,AI表现出色……当我在处理能描述但尚未掌握的事情时,AI表现良好但需要更多谨慎……当我在处理连自己都不清楚想要什么的事情时,AI介于毫无帮助到有害之间……
核心在于,当存在客观可验证的答案时,AI表现最佳。如果我们想要一个能通过某些测试的实现,AI能做得很好。但涉及公共API时:
三月初我花了几天时间专门做API重构,手动修复那些有经验工程师本能避开、但AI搞得一团糟的问题。没有测试或客观指标能衡量“这个API用起来是否愉悦”以及“这个API能否帮助用户解决他们的问题”,这正是编码代理在此表现糟糕的原因。
❄ ❄ ❄ ❄ ❄
我最初熟悉瑞安·阿文特的文章,是在他为《经济学人》撰写“自由交换”专栏时。他最近的帖子谈到詹姆斯·塔拉里科和佐赫兰·马姆达尼如何将宗教信仰作为竞选号召的重要组成部分,而他们的信仰核心是关怀他人。他解释说,对关怀的关注会带来对经济增长的重要视角。
首先要明白的是,我们不应为了增长而追求增长。增长的好处在于它扩展了我们的集体能力:我们得以了解更多,能够做得更多。这反过来又让我们能够减轻痛苦,发现更多关于宇宙的事物,并花更多时间成为完整的人。