《Logic for Programmers》新版本(以及本通讯的未来)
摘要
Hillel Wayne 宣布其著作《Logic for Programmers》推出 0.14 版本,并透露将加入 Antithesis 担任开发者教育家,计划继续运营本通讯,但侧重点有所调整,频率可能降低。
<p>首先,有一条即时消息:我刚刚发布了 <a href="https://logicforprogrammers.com" target="_blank">《Logic for Programmers》</a> 的 0.14 版本!这个版本与 0.13 版本非常相似。虽然有一些重写,但绝大多数改动都是布局、文字编辑和技术编辑。完整说明见<a href="https://github.com/logicforprogrammers/book-assets/blob/master/CHANGELOG.md" target="_blank">此处</a>。</p>
<p>相关消息是,我已经开始打印该书的测试版本:</p>
<p><img alt="《Logic for Programmers》的两个测试打印版" class="newsletter-image" src="https://assets.buttondown.email/images/958bdc79-fa06-4bce-b0a8-6e5ecfe8f2e0.png?w=960&fit=max" /></p>
<p>剩下的工作不多了。我还需要修复一些图表,进行更多排版和校对,整合读者提出的修正,并制作网站和封底。之后,这本书应该就能达到 1.0 版本。我的目标是到 6 月底就能买到印刷版!</p>
<hr />
<p class="empty-line" style="height:16px; margin:0px !important;"></p>
<p>现在说重大消息:从八月开始,我将全职加入 <a href="https://antithesis.com/" target="_blank">Antithesis</a>,这是一个生成式测试平台。我的正式职位是“开发者教育者”,我的任务是让“基于属性的测试、模糊测试、故障注入、<a href="https://hegel.dev/" target="_blank">Hegel</a>、<a href="https://github.com/antithesishq/bombadil" target="_blank">Bombadil</a> 以及 Antithesis 平台变得对日常工程师易于理解”。所以这和我现在做的工作类似,只是得到了更多支持,还有相匹配的 401(k) 计划。</p>
<p>我已经有三页纸的主题想法了,你想象不到我有多兴奋。</p>
<p>那么这对本通讯有什么影响呢?首先,我想明确一点:这不会变成一份 Antithesis 通讯。我与 Antithesis 相关的工作将放在他们的官方平台上。我确实认为,让一个主题“易于理解”的最佳方式之一,就是撰写对所有工程师都有用的基础材料,无论他们是否深入该主题。我可能会分享一些我在这方面所做内容的链接,但这些仅仅是链接而已。</p>
<p>与此同时,本通讯的内容也会有些变化。基于属性的测试和模糊测试与形式化方法并不相同,但许多基础是重叠的,尤其是在我们思考属性和正确性方面。我还不确定,但我感觉我会开始让本通讯远离 Antithesis 相关主题。所以可能会减少理论性内容,比如<a href="https://buttondown.com/hillelwayne/archive/what-does-undecidable-mean-anyway/" target="_blank">“不可判定究竟意味着什么”</a>和<a href="https://buttondown.com/hillelwayne/archive/some-tests-are-stronger-than-others/" target="_blank">“有些测试比其他测试更强”</a>,增加更多历史和软件奇闻轶事,比如<a href="https://buttondown.com/hillelwayne/archive/why-do-we-call-it-boilerplate-code/" target="_blank">“我们为什么称之为‘样板代码’”</a>和<a href="https://buttondown.com/hillelwayne/archive/finding-hard-24-puzzles-with-planner-programming/" target="_blank">“深奥的编程范式”</a>。</p>
<p>另一个变化是更新频率。过去六年里,我基本保持每周更新。同时,过去六年我也是完全自雇状态。我不知道有了全职工作后会有多少时间!一旦稳定下来,我希望继续写通讯,但可能从每周降到双周或每月。我们边走边看吧。</p>
<hr />
<p>总之,这期通讯软件相关的内容较少,所以让我们用一个有趣的东西来收尾。<code>f(x) = x+2</code> 是 <strong>单调递增函数</strong>:增大 <code>x</code> 会使 <code>f(x)</code> 增大,减小 <code>f(x)</code> 会使 <code>x</code> 减小。类似地,<code>f(x) = -x+1</code> 是单调递减函数,而 <code>f(x) = x^2</code> 则两者都不是。</p>
<p>在写书的过程中,我意识到全称量词在添加元素时是单调假,在移除元素时是单调真。设 <code>A(set) = all x in set: P(x)</code>。那么如果 <code>A(S)</code> 为假,则 <code>A(S | {e})</code> 也为假;如果 <code>A(S)</code> 为真,则 <code>A(S - {e})</code> 也为真。<code>some</code> 则相反:如果它为真,添加元素后仍为真;如果它为假,移除元素后仍为假。</p>
<p>一个有趣的推论是,全称量词对空集必须为真,因为如果它为假,则对所有值都为假!这也是 Python 中 <a href="https://buttondown.com/hillelwayne/archive/why-all-is-true-prod-is-1-etc/" target="_blank"><code>all([]) == True</code></a> 的另一个理由。</p>
<p>类似地,在时序逻辑中:<code>always A</code> 在系统行为上是单调假,而 <code>eventually A</code> 是单调真。我是在摆弄我的朋友(很快就是同事了!)Oskar Wickström 制作的这个 <a href="https://quickstrom.github.io/ltl-visualizer/" target="_blank">LTL 可视化工具</a> 时意识到这一点的。我觉得这很酷!</p>
<p class="empty-line" style="height:16px; margin:0px !important;"></p>
查看缓存全文
缓存时间: 2026/05/16 03:38
# 面向程序员的新逻辑(及本通讯的未来)
Source: https://buttondown.com/hillelwayne/archive/new-logic-for-programmers-and-the-future-of-this
首先是一条即时消息:我刚发布了 Logic for Programmers 的 0.14 版本 (https://logicforprogrammers.com/)!这个版本与 0.13 非常相似。有一些重写,但绝大多数改动涉及排版、文案编辑和技术编辑。完整说明在此 (https://github.com/logicforprogrammers/book-assets/blob/master/CHANGELOG.md)。
另外,我已经开始进行这本书的试印:
Logic for Programmers 的两个试印本
剩下的工作不多了。我需要修复一些图表,做更多格式化和校对,整合读者提出的一些修正,并制作网站和封底。之后,这本书应该就可以为 1.0 做好了。我的目标是在六月底前让印刷版可供购买!
---
现在是一条重磅消息:从八月开始,我将成为 Antithesis (https://antithesis.com/) 的全职员工,这是一个生成式测试平台。我的正式职位是“开发者教育者”,任务是将“基于属性的测试、模糊测试、故障注入、Hegel (https://hegel.dev/)、Bombadil (https://github.com/antithesishq/bombadil) 以及 Antithesis 平台”变得让普通工程师也能理解。所以和我现在做的工作类似,只不过有更多支持以及匹配的 401(k)。
我已经有三页的话题想法了,你不知道我对此有多兴奋
那么这会对本通讯产生什么影响?首先,我想说明这 *不会* 变成一份 Antithesis 通讯。我与 Antithesis 相关的工作会发布在他们的官方平台上。我确实认为使一个话题变得“可理解”的最佳方法之一是编写对所有工程师都有用的基础材料,无论他们是否深入了解该话题。我可能会分享我在这些方面制作的内容的链接,但仅此而已,只是链接。
与此同时,*本* 通讯的内容会略有变化。基于属性的测试和模糊测试与形式化方法并不完全相同,但很多基础是重叠的,尤其是在我们如何思考属性和正确性方面。我还不确定,但我推测我会开始让本通讯偏向远离 Antithesis 相关的话题。所以可能理论性的内容会减少,比如“不可判定到底是什么意思 (https://buttondown.com/hillelwayne/archive/what-does-undecidable-mean-anyway/)”、“有些测试比其他测试更强 (https://buttondown.com/hillelwayne/archive/some-tests-are-stronger-than-others/)”;而历史性和软件古怪性的内容会增多,比如“为什么我们称之为‘样板代码’ (https://buttondown.com/hillelwayne/archive/why-do-we-call-it-boilerplate-code/)”、“深奥编程范式 (https://buttondown.com/hillelwayne/archive/finding-hard-24-puzzles-with-planner-programming/)”。
另一个变化是频率。过去六年,我基本保持每周更新的节奏。过去六年我也是完全自雇状态。我不知道有了全职工作后会有多少时间!一旦安顿下来,我还是想继续写通讯,但可能会从每周减慢到每两周或每月一期。我们会边走边看。
---
总之,这期通讯软件内容较少,所以让我们用一个有趣的东西来收尾。`f(x) = x+2` 是一个**单调递增函数**:增加 `x` 会增加 `f(x)`,减少 `x` 会减少 `f(x)`。类似地,`f(x) = -x+1` 是单调递减的,而 `f(x) = x^2` 两者都不是。
在编写这本书的过程中,我意识到 `all` 量词在添加元素时是单调假,在移除元素时是单调真。设 `A(set) = all x in set: P(x)`。那么如果 `A(S)` 为假,则 `A(S | {e})` 也为假;如果 `A(S)` 为真,则 `A(S - {e})` 也为真。`some` 则相反:如果它为真,添加元素后仍为真;如果它为假,移除元素后仍为假。
一个有趣的推论是,`all` *必须* 对空集为真,因为如果它为假,那么对所有集合都会为假!这也是为什么在 Python 中,[`all([]) == True`](https://buttondown.com/hillelwayne/archive/why-all-is-true-prod-is-1-etc/) 的另一个理由。
类似地,在时态逻辑中:`always A` 关于系统行为是单调假,而 `eventually A` 是单调真。我在摆弄这个 LTL 可视化工具 (https://quickstrom.github.io/ltl-visualizer/) 时意识到了这一点,这是我的朋友(很快也会成为同事!)Oskar Wickström 做的。我觉得这相当巧妙!
相似文章
《程序员逻辑》新版发布与下一步计划
Hillel Wayne 宣布其著作《程序员逻辑》发布 v0.13 版本,包含大量重写和新内容,并概述了迈向印刷版的下一步计划。
《Logic for Programmers》食物募捐活动只剩一周
Hillel Wayne为其书籍《Logic for Programmers》提供折扣,以此推广为Greater Chicago Food Depository举办的募捐活动,并分享了关于结构化并发和goto语句历史的技术笔记。
新博客文章:我写的一些傻乎乎的Z3脚本
Hillel Wayne分享了他编写的Z3脚本,讨论了逻辑性质方面的挑战以及他即将出版的书籍Logic for Programmers中的“糟粕”概念。
AI 新闻:本周 Anthropic 疯狂上新!
Anthropic 在 52 天内狂发 74 项更新,包括 Computer Use、Projects 和 Claude Code Auto Mode;Google 随即反击,推出 Gemini 3.1 Flash Live、vibe-coded 浏览器演示及 Lyria 3 Pro 音乐工具;GenSpark 也杀入场,2026 年前每月 20 美元畅享不限量 AI。
2026年4月通讯
月度通讯,总结2026年4月的人工智能发展,包括Opus 4.7、GPT-5.5、Claude Mythos和ChatGPT Images 2.0。