2008-04-02

コードを憎んで人を憎まず, あるいは.

社会人になって最初に配属されたチームのコードはひどいもので, 私は同期の新入社員仲間 Y に "ひどいコードなんだ. あの先輩はろくでもない." と愚痴た. すると Y はぽつりとこう答えた. "<コードを憎んで人を憎まず> だよ."

Y の言葉は私の座右の銘となった. コードと人格を切り離す. あたりまえの事に思えるけれど, いまより輪をかけて狭量だった私はひどいコードの書き手を見下していた. もちろん自分は棚にあげて. たかがコードで友情や信頼を失うのは愚かなことだ. Y はそう言うのだった.

件の先輩社員は寛大だった. 私は勢いと趣味に任せて彼のコードを書き換えていたが, 彼は文句もいわず, 雑用を押し付けてくることもなく, 他所からのメールやバグを黙々と片付けていた. 私が同じ立場なら, 間違いなく戦いの火蓋を切っていただろう. (実際, 翌年の私は毎日のように後輩と口論していた.)

そのときのコードを一年後に見直した. ひどいものだった. マントラは我が身をも守ってくれる. 今でもひどいコードを見ると頭に血が昇るけれど, マントラを何度も唱えて理性を呼び戻している.

あるいは, バグを憎んでコードを憎まず.

Y の言葉は黄金律だ. とはいえストレスの中で気に入らないコードとつきあっていると, 書き手に責任を押し付けたい理不尽な衝動に駆られることもある. そんなとき, どうやって正気を保てばいいだろう.

<バグを憎んでコードを憎まず> というのはどうか. "コードのここが気にいらないから直せ" というより, "こんなバグがあるから直して" という方がわかりやすい. それに中立だ. もめることは少なかろう. バグを媒介することで, 火種に近付かないまま話をすることができる.

コードの根本に disagreement を抱えると, 派生する衝突や不満は数えきれいないほど膨らむ. けれど実際に仕事をブロックするバグは限られている. そして仕事を片づけるのが職業プログラマの役割だ. 仕事をすればいい. 実際, これをコードレビューの原則にしていると言う人もいた. 対話をうながす原則のひとつ <問題 vs 私たち> も, どこかこれと似ている.

"でも, プログラマなのにコードの話ができない仕事は悲しいね." 友人はいう. 一理ある. でも現実がそれを許すことは少ない. 意義のある話をするには, 良いコードについて一定程度の合意が求められる. 価値観に大きなずれがあると, その違いが邪魔をして肝心の細部を議論できない. 根本から合意をつくっていくのはとても骨の折れる作業だ. 僅かな合意を頼りに恐る恐る議論をするのも同じくらい気が重い. それに比べて <バグを憎んでコードを憎まず> はシンプルでいい. 多様な価値観の混じりあう環境で仕事を進める処世術になりうると思う.

文化的交流を通じ合意の差分を埋めていくことはできる. 交流は差し迫った場面から距離を置き, ゆとりを持って進める方が良いだろう. 会食に招かれた移民に扮し, 祖国への愛を慎ましく語ろう. そこであなたは余所者であり, 多様性の下では誰もが余所者なのだ.

そして幾度ものコピーとクラッシュを乗り越え, やがてあなたのコードがレポジトリに根をおろすとき, 杯を傾け彼らのジョークに笑い, 肩を叩き合う自分に気付くだろう. 今やあなたは村人であり, 歴史を語りうる誰もが村人なのだ.