实战

可以追问的记录 — 三十本笔记没能给你看的东西

作者: makemind · 2026年7月14日

有件事要先说明。 2026 年 4 月,本刊登过一篇文章:江原道华川一位种了三十年番茄的农户,把谷仓里的三十本笔记搬到了一个画面上。那是一篇点名、点年龄、点地区的采访。

这个现场不是某一家特定的农户。 所以我们不把原采访原样重刊。取而代之,我们把同样的形状从头到尾自己做了一遍。 以下所有画面和数字都出自我们做的东西,不是任何一家农户的记录。

把这个区分放在开篇的理由是:原文整篇的论点是「你也做得到」这份许可,而这份许可压在案例的真实性上。没有确认真实性就重复同一句话,那不是许可,是广告。

所以这篇要证明的东西变窄了。不是「某位农户做到了」,而是「这样的工具长这个样子,而且实际能做到这么多」

原文的心脏里没有实物

原文的轴是好的。纸停在「写下来」这一步。 把东西翻出来相互比对,交给了人的记忆和耐心。而一旦以同样的字段堆起来,记录就变成可以追问的东西。

我们现在仍认为那个物性上的转变是对的。问题是那篇文章一次也没有把它拿出来看。

  • 他实际说了什么 —需求原文 0 行
  • 那句话变成了怎样的画面定义 —定义摘录 0 行
  • 经过了哪些步骤做出来 —制作过程 0 步
  • 三十本笔记的迁移 — 只有「抽空在搬」这句话

而全文最精彩的「移栽后第 18 天开第一朵花」这个发现也一样。那是要五年数据堆起来才成立的主张,可那批数据和它显现出来的画面都不在。

这次我们把三样东西并排放。说出来的 → 变成定义的 → 真正被画出来的。

说出来的

做的过程中,我们把需求写成三句话。不用开发术语。

  1. 「选个作物,今年的记录就一溜儿出来。」
  2. 「记录要能单手完成。」
  3. 「去年这时候什么样,挨着显示出来。」

三句话变成了三个工具。

log offers: log.season, log.add, log.compare

变成定义的

第一句变成了画面的这一部分。不是代码,是声明。

{
  "type": "list",
  "items": "{{season}}",
  "emptyMessage": "Nothing recorded this season yet",
  "itemTemplate": {
    "type": "linear", "direction": "horizontal", "spacing": 12,
    "children": [
      { "type": "text", "text": "{{item.date}}" },
      { "type": "text", "text": "{{item.action}}" },
      { "type": "text", "text": "{{item.tempC}}°C" },
      { "type": "text", "text": "{{item.note}}" }
    ]
  }
}

第二句变成了一个按钮。

{
  "type": "button",
  "label": "First flower",
  "onTap": {
    "type": "tool", "tool": "log.add",
    "params": { "crop": "Tomato", "action": "firstFlower", "tempC": 19.5 }
  }
}

第三句让画面多了一个。就一行路由。

"routes": { "/": "ui://pages/today", "/compare": "ui://pages/compare" }

整个应用是四个 JSON。 编译器不会运行。

真正被画出来的

今天的画面。移栽后第几天、以及往年的平均值,都在上面。

Today — day 18 since transplanting, past seasons averaged 18.2 d。真实渲染截图
Today — day 18 since transplanting, past seasons averaged 18.2 d。真实渲染截图

按一下「First flower」,就多出一行。

一次点击加一条记录 — 2026-04-19 firstFlower recorded
一次点击加一条记录 — 2026-04-19 firstFlower recorded

以及把各个年份叠着看的画面。

18.2 days on average — 2021:22d, 2022:18d, 2023:15d, 2024:18d, 2025:18d, 2026:18d
18.2 days on average — 2021:22d, 2022:18d, 2023:15d, 2024:18d, 2025:18d, 2026:18d

18.2 天在任何地方都没被写下来

这是这一篇里最重要的部分。

原文把「18 天」当成结果写了出来。在这个样例里,那个数字不是常量。 它每次都从记录里算出来。

/// Days from transplant to first flower, per season.
///
/// This is the whole "eighteen days" claim, and it is arithmetic over the
/// rows — no constant anywhere. A year with no flower recorded yet is left
/// out rather than guessed at.

而且验证会直接确认这一点。算出来的值一旦以字符串形式出现在源码里,就判失败

AVG=$(grep -o "average from records: [0-9.]*" captures/run.log | awk '{print $4}')
if grep -RIn --exclude-dir=captures -F "$AVG" farm_server/bin farm_log.mbd bundle_host/lib; then
  echo "   the average $AVG appears literally in the source — it must be computed"
  exit 1
fi

通过时的日志。

   average 18.2 computed from records, not present in any source file

「它是从记录里冒出来的」和「有人把它写了上去」,在画面上长得一模一样。 所以我们把分辨它们的办法放进了通过条件。

此内容需要开发者或更高等级

登录并升级您的方案即可继续阅读。

查看方案
Twitter