"a = a + b"は、"a"と呼ぶヒモを、a + bの計算結果に掛け直すこと

先日書いた「「変数は箱」という例え方について - @katzchang.contexts」というエントリに頂いた、えみ夫さんからコメント:「変数はヒモでインスタンスのフックに引っ掛ける」っていうメタファ(比喩表現)がいいよねという話があったところなんだけど(背景の説明終)、ちょうど関連する話題があったので。

aとかbとかってのは「変数」といい、これは数字を入れておく「バケツ」なんだ。「a = 10」っていうのはaという名前を付けたバケツに、10という数字を入れておくという意味。
(中略)
ちなみに「a = a + b」としたらaのバケツの中身は一度空っぽにされる。しかしそれは足し算したあと、バケツに入れ直される前だ。
だれでもわかるプログラミングの教え方もある……といいな - 狐の王国

この場合、下のように解釈した方が腑に落ちる。
「"a = a + b"は、"a"と呼ぶヒモを、a + bの計算結果に掛け直す」

左辺の変数は、既に定義された変数だとしたら「ヒモを引っ掛け直す」、その時点で定義する変数だとしたら「新たにヒモを作って名前を付けて引っ掛ける」。

個人的には、この例えが矛盾なく見えるわけでして。しかも、初心者さんに難しい例えではないと思うんですよ。ヒモによるインスタンスの束縛の様子や、ヒモが外れたインスタンス(単純に循環参照してるだけのインスタンスも)がゴミ箱に落ちる様子など、ふつーの生活から想像できることで説明できるし。

「バケツの中身は一度空っぽにされる」っていうメタファは、正直苦しいです。メモリ空間上のアドレスを指している例えってのはいいと思うんだけど、それで説明できるのはがんばっても直接値まで。それでも「一度空にする」がかなり苦しい。実際に計算機ではメモリ空間からレジスタに一旦コピーして…なんていう細かい説明をしなきゃわかんなくなる。さらにポインタ。つまづく人が多いわけだ。

メモリ管理不要なオブジェクト指向言語全盛の時代に、箱やバケツのメタファはそぐわないんじゃないかなー。