## Agile 的衰落:回顾 本文认为,“Agile”尽管被广泛采用,但实际上是为解决一个早已被解决的问题而存在的——这个问题的解决方案早在几十年前的软件工程实践中就已存在。作者认为,《Agile 宣言》提供了一些含糊的原则,这些原则常常以缺乏具体定义的“真正的 Agile”为借口进行辩护。 关键在于,迭代开发、客户参与和原型设计这些核心理念,早在 1970 年就被温斯顿·罗伊斯等工程师所倡导,比《宣言》早了 25 多年。Agile 主要通过它*不是什么*来定义自己——瀑布模型——而瀑布模型本身已经被理解为存在局限性。 大型语言模型 (LLMs) 的兴起现在正在推动回归全面的文档和规范,证明了详细的规划实际上可以*产生*可用的软件——这直接与 Agile 优先考虑“可用的软件而非全面的文档”相矛盾。最终,作者认为 Agile 只是对现有思想的重新包装,它的时代已经过去,并倡导回归健全的规范和设计实践。
## 最佳锻炼时间以优化健康
最新研究表明,最佳锻炼时间并非一成不变,而是应与您的自然生物钟相协调。一项针对40多岁和50多岁成年人的研究发现,“早起者”从早晨锻炼中获益最多,而“夜猫子”则在晚上锻炼时效果更佳。
将锻炼与您的生理类型(您自然的清醒偏好)相匹配,可以改善血压、健身水平、睡眠质量和代谢指标。研究人员认为,这是由于内部时钟对全天激素水平和能量的影响。
专家强调一致性是关键,提倡设定小而可实现的目标。虽然健身房正在适应以提供灵活的时间,但优先进行规律的运动比严格的时间安排更重要。建议结合有氧运动和力量训练,例如靠墙深蹲或平板支撑,以促进整体健康。 进一步的研究仍在进行中,但研究结果支持根据个体的生物节律来调整锻炼计划。
## 依赖冷却时间的问题及上传队列的必要性
最近提出的“依赖冷却时间”——延迟采用新包版本——作为防御供应链攻击的手段正在获得关注,但其根本上存在缺陷。虽然看似有效(大多数攻击在几天内就能被检测到),但冷却时间依赖于首先被他人入侵才能识别恶意发布,本质上是建立在别人的不幸之上。
这种方法成本高昂,需要在多个包管理器和项目中进行广泛配置,而且并非万无一失——很容易通过单独安装来规避。更好的解决方案是集中式的“上传队列”,在新包发布后(但在分发之前)将其保留一段时间,用于自动安全扫描、公开差异审查,甚至可选的beta测试。
这借鉴了Debian成功的系统,将发布与分发分离,消除了搭便车问题。上传队列还能降低泄露发布凭证的影响,并提前通知更新。资金可以来自现有的包索引赞助者,或通过为商业发布提供付费加速审查。最终,像上传队列这样的集体、集中式方法比依赖于个体、被动的冷却时间更安全、更高效、更合乎道德。尤其是在LLM兴起的情况下,markdown文件实际上是可执行代码,这增加了供应链攻击的脆弱性,这一点至关重要。
## Clojure 的持久化向量:总结
Clojure 的持久化向量在诸如追加、更新和查找等操作上提供实际上为 O(1) 的性能,同时保持不可变性——每次修改都会创建一个*新的*向量,而不是改变原始向量。这是通过平衡的有序树实现的,不同于传统的可变数组,后者需要代价高昂的复制。
持久化向量不复制整个数组,而是利用**路径复制**:只有到修改元素的路径上的节点会被复制,从而最大限度地共享不同版本之间的结构。更新涉及复制节点到目标位置并替换值。追加处理三种情况:右侧叶子节点有空间,需要时生成新节点,或根节点溢出(需要新的根节点)。
弹出(删除最后一个元素)以相反的方式反映这些概念,可能删除空节点,甚至在根节点变得冗余时删除根节点。虽然理论上由于树结构为 O(log n),但 Clojure 的向量使用高分支因子(每个节点 32 个子节点),从而形成非常浅的树——使操作“实际上”为常数时间。
这系列博客文章详细介绍了实现细节,未来的文章将涵盖诸如瞬态和尾部优化,以及对分支和查找机制的更深入研究。