この記事は、連載「追わない技術」の第 8 回です。うまくいかない症状と、その対処を一つずつ並べています。各回はファイルやスクリプトを一つ置けば完結します。その仕組みがなぜ要るのかは、置いたあとに解説を読めば分かります。連載の全体像と各回の一覧は序論にあります。

今回は、結論が出たと思った時点の話です。第 1 回は「いつ止めるか」でした。今回はその逆で、止めてはいけないところの話です。止める条件は書けても止めない条件も書けるとは思われていません。差し戻された相手は消すほうへ倒れるので、粘れるかどうかを決めていたのは、気力ではなく採点の値段でした。

先に断っておきます。この回だけ、題の向きが違います。ここまでの 7 回は私がやらないことでしたが、今回は、相手が諦めるのを許さない側です。なぜそうなるかは、本文の途中で書きます。

そして白状します。私はこの連載を書きながら、「差はありませんでした」で 3 度畳もうとしました。3 度ともひっくり返りました。2 度は人に止められ、残る 1 度はスクリプトが止めました。数字はどのときも正しいままです。変わったのは読み方だけでした。

一つ思い出してみてください。

「差が出ませんでした」と書いたとき、それは差が無かったのですか。

それとも、まだ測れていなかったのですか。

CC BY 4.0

私は、止める仕組みだけを積み上げてきました

この連載を数え直しました。

[observed] 対象: 連載 6 作 65 本
[observed] 回ごとの題が「〜ない技術」で終わる: 54 本 / それ以外 11 本(⚠️ 「:」より後ろで数える)

65 本のうち 54 本が「〜しない技術」でした。外れる 11 本も、中身は序論 6 本と、最終回 1 本と、「ここだけは読め」の 3 本と、否定を「〜ない」で書かなかった 1 本です。

数え方は題の「:」より後ろだけを見ています(連載名そのものが「〜ない技術」なので、前で数えると全部当たります)。

つまり私は、止める側の技術だけを 6 作ぶん書いてきました。手元の仕組みも同じ形です。待ちを止めるもの、テストの走らせ方を止めるもの、一覧が古びたら止めるもの。どれも「ここで止まれ」としか言いません。

止める仕組みは、止めてはいけない場所を 1 つも教えません。そして止める仕組みが揃うほど、「もう終わりです」は受け入れやすくなります。

1 度目 —— 走らなかったものを、数から外していました

第 2 回で、テストを書かせて見逃しを数えた実験があります。会話を引き継がない作業者を 12 人ぶんそろえて、素のまま走らせたら、こうなりました。

走った人
高い側6 / 6
⚠️ 安い側2 / 6

私は走った人だけで見逃しを数え、「モデルでも範囲でも動かない」と書きかけました。走らなかった 4 人を、静かに母数から落としていました。

指摘を受けて気づきました。走らないのは失敗であって、除外の理由ではありません。エラーの出力だけを返して直させ、全員を合格にしてから数え直しました。

すると差が出ました。

⚠️⚠️⚠️ 走らなかったものを母数から落とすと、いちばん危ない側が消えます。

2 度目 —— 物差しの上が詰まっていました

数え直したあと、今度はこう書きかけました。「範囲を絞れば、安い側は高い側と同じ」。

実際、両方とも 3.33 / 8 で並んでいました。

ここでもう一度止められました。「物差しに天井があるのではないか」。

課題の言い方を 1 段落だけ変えました(「材料と測り方は自分で用意する」。どちらの条件にも同じだけ足し、項目は 1 つも名指ししていません)。

どちらも「範囲を絞ったとき」の数です(並んでいたのがその条件なので、そこで揃えて比べます)。

範囲を絞ったとき直す前⭐ 天井を外したあと
高い側3.335.00
⚠️ 安い側3.333.00

高い側だけが伸びました。並んでいたのは、両方とも簡単な項目しか取れていなかったからです。

⭐⭐⭐ 測れていないものを「差が無い」と読んではいけません。

3 度目は、人ではなくスクリプトが止めました

第 7 回で、比較の費用を「仕組み何本ぶんか」に換算するスクリプトを書きました。最初に出た数がこれです。

[observed] 比較の手数で置けた仕組み: 手数で 3.8 本 / 経過で 20.6 本

5 倍以上ずれています。原因は割り算のほうで、片方が「同じ手間で何本置けたか」ではなくただの比になっていました。直したら 19 本 / 20.6 本で一致しました。

ここがこの回のいちばん大事なところです。このときは、人は止めていません。止めたのは、同じことを 2 通りで数えていたことです。

⭐⭐⭐ 1 通りしか数えていなければ、3.8 をそのまま印刷していました。 ⚠️ その数は、もっともらしく見えたはずです。

諦める前に見る 2 つ

1 度目と 2 度目に共通していたのは、「差が無い」と読む前に見ていなかったものがあったことです。2 つだけで、どちらもスクリプトで数えられます。

#見るもの当てはまったら
⭐⭐ 1母数から外したものがあるか(走らなかった/エラーで落ちた/読めなかった)⚠️⚠️ 戻してから数え直す。外したままの「差が無い」は読めません
⭐⭐ 2物差しの項目のうち、全員が 0 の項目が半分以上あるか⚠️⚠️ 天井です。差ではなく、課題がそこを指していません

どちらも「もう少し粘れ」ではありません。数えるだけで終わります。当てはまらなければ、そのまま畳んでかまいません。

3 度目は、この 2 つのどちらでもありませんでした。あれを止めたのは、同じことを 2 通りで数えていたことです。

原理: 止める条件は書けて、止めない条件は書けない —— と思われている

止める仕組みは条件で書けます。「同じコマンドが 3 回続いたら止める」「一覧の数が実際と違ったら止める」。どれも真偽が決まります。

一方、「ここでは諦めるな」は条件で書けません。書けないから、仕組みが 1 本もありません。

そして仕組みが無いものは、人がその場の気分で決めることになります。

ただし、書けないのは「諦めるな」のほうだけです。上の 2 つは書けます。「粘れ」ではなく「数えろ」に翻訳すると、条件になります。

書けないもの⭐ 書ける言い換え
⚠️ もう少し粘れ母数から外したものがあるなら、戻してから数え直せ
⚠️ 結論を急ぐな全員が 0 の項目が半分以上なら、それは差ではない

ここが、この回の題だけ相手側を向いている理由です。自分が粘るかどうかではなく、止める仕組みの側に、止めない条件を 2 つ足す話だからです。

第 6 回も「させない」でしたが、あれは私が途中で差し込まない話でした。今回は、仕組みのほうに足します。

粘らせると、証拠のほうを消しにいきます

粘らせるのは、ただではありません。同じ実験で、失敗しているテストを「実装は正しいので直してください」と差し戻しました。

天井を外したあとの回差し戻した回数
高い側0
⚠️ 安い側10

直し方のうち 3 件が、「失敗しているテストを消す」でした。消せば合格になります。

そして消えたところは、そのまま見逃しに変わります。

⚠️⚠️⚠️ 「実装は正しい。テストを直せ」と差し戻すと、直すより消すほうへ倒れます。

だから「諦めさせない」は、無制限に粘らせることではありません。上の 2 つを数えるところまでです。

仕組み: 粘れるかどうかは、気力ではなく採点の値段で決まります

私は同じ 12 人ぶんの出力を、3 回採点し直しました。できたのは、採点が安かったからです。

数え方1 巡に要る実行
⭐⭐ 項目ごとに、全員ぶんをまとめて 1 回9 回(土台 1 + 項目 8)
⚠️ 1 人ずつ、項目ごとに96 回

96 回なら、やり直していません。1 度目の結論を印刷して終わっていたはずです。

⭐⭐⭐ 粘れるかどうかを決めていたのは、気力ではなく採点の値段でした。

これは先に効く話です。採点を安く組んでおかないと、あとから粘ろうとしても粘れません。

検証手順: 「差が無い」を、2 つに分ける

前提

  • 条件ごとの結果が、1 人ぶんずつ残っていること。平均だけしか残っていないなら、外したものがあるかを見られません

所要時間: 15 分

手順

  1. 集計に入っていない人がいないかを数える(走らなかった/落ちた/読めなかった)。1 人でもいたら、戻してから数え直す(戻し方は「エラーの出力だけを返す」で十分です)
  2. 項目ごとに「全員が 0 の項目」を数え、全体の半分以上かを見る。半分以上なら、課題の言い方を 1 段落だけ変えて測り直します(どの条件にも同じだけ足し、項目は名指ししない)
  3. 同じ結論を、2 通りの数え方で出す(例: 人数で数える/時間で数える)

合格条件

  • 手順 1 で、集計から外れている人の数を言える(「たぶんゼロ」は数えていません)
  • 手順 3 で、2 通りの数が 2 倍以内(離れていたら、どちらかの数え方が壊れています)

合格しなかったとき

  • 外れている人がいる —— 戻してから数え直します。ここが 1 度目に踏んだところです
  • 全員が 0 の項目が半分以上 —— 天井です。課題の言い方を変えて測り直します(2 度目)
  • 2 通りの数が離れている —— スクリプトを疑ってください(3 度目)

後始末

  • 何回目の数かを書いて残します。書かないと、あとから表の中で混ざります(私は混ぜて、通読で見つけました)

注意: この回が言えないこと

止められたのは 3 回だけです。統計ではありません。

経過として読んでください。

言えるのは「3 回とも、数字は正しいのに読み方が間違っていた」という形のほうだけです。

そのうち 2 回は、止めたのが人でした。人がいない環境で同じことが起きるかは、確かめていません。3 度目だけはスクリプトが止めましたが、それは「2 通りで数えていた」からで、たまたまそう組んでいただけです。

そして、いちばん大事な注意です。この回は「粘れ」とは言っていません。言っているのは、畳む前に 2 つ数えろまでです。数えて何も出なければ、畳んでかまいません。

CC BY 4.0 はここまで

諦めさせなくなったもの

  • 「差はありませんでした」を、そのまま結論にするのをやめました。たいてい「まだ測れていません」の言い換えでした
  • 走らなかったものを、静かに母数から外すのをやめました。外した瞬間、いちばん危ない側が消えます
  • 点数が並んだら「同じ」と読むのをやめました。並ぶのは、両方とも上が詰まっているときにも起きます
  • 1 通りだけで数えるのをやめました。2 通りで出して、離れていたらスクリプトを疑います
  • 採点を「あとで組む」のをやめました。高い採点は、やり直しをその場で不可能にします
  • やめていないこともあります —— 止める仕組みを足すことです。止まる場所が増えたぶん、止めない条件を 2 つ足しただけです

もう終わりです、という感じは、たいてい正しく見えます。数字がそう言っているからです。見えないのは、その数字がまだ何も測っていない場合があることのほうでした。


次回は最終回、「振り回されない技術」です。第 1 回で「止まれない」を、この回で「止まりすぎる」を見てきました。