クソコード批判とクソコード批判批判はなぜ燃えるのか

Short Answer:批判は人格否定だからです。

Long Answer:

知的活動の成果物とアイデンティティ

文脈 note.mu

要約すると、「自分の書いたコードと自分のアイデンティティは不可分であり、コードを否定されるのはアイデンティティを否定されることに等しい」という話と、「研究への批判は人格に対する批判を意図してはいないので、それらを混同するべきではない」という話であり、一般化すると「知的活動の成果とアイデンティティを同一視するのは妥当であるか」という問題になると思う。話が面倒になるので、本当に人格攻撃がしたくて批判しているケースはここでは考えない(現実の批判は、両者が様々な割合で混ざっているものだと思う)。

この問題に対する答えは、おそらく立場によって異なる。成果物を出す側、すなわちこの文脈で批判を受ける側としては、成果物とアイデンティティは多かれ少なかれ同一視することが普通ではないかと思う。成果物とは自己顕示欲を満たすものであり、それまでに培ってきた思索の質を反映するものであり、人生の少なくない時間を費やした努力の成果である。しかも現代社会では、試験や評定といった形で思考の質を評価することが一般に行われており、この尺度において多くの人に受け入れられることが高い社会的立場、つまりアイデンティティに直結すると言って良い。このような状況で、思考の果てに生み出した成果物を否定されることは、直接的にせよ間接的にせよ、思考の質を否定されていることと同じであり、ひいてはアイデンティティを脅かすものである、という解釈は十分に納得できる。

一方で、批判する側はこの文脈からは容易に離れていられる。既に何らかの成果物がある場合、そこに思いつく限りの具体例やパターンを当てはめてみることにより、理想的な形からの逸脱は比較的容易に発見できる。ことプログラミングや研究に関しては、前提条件に形式的な操作を施すことで論理的に導かれる帰結が重視される傾向にあるため、一つの不整合は成果物の価値を毀損するのに十分な影響がある。そういった不整合を発見した場合であっても、批判側は成果物の表現する論理に形式的な操作を行い、その結果を報告しただけであるから、成果物の背後にアイデンティティが密着しているという事実は用いておらず、議論に用いていないのだから無関係だと主張したくなるのも、批判側の視点としてはあながち的外れではない。もちろん、提示した反例が実は誤っているというケースはありえるし、反例の瑕疵を指摘された場合には彼我が逆転して一転アイデンティティの危機となる可能性もある。しかし、批判は常に後出しになるため、批判側は自信がなければ黙っていることができるから、よっぽどの理由がない場合は安全圏からものを言うことができる。

かくして、批判側は成果物そのものの価値を、それを生み出した人格とは切り離して評価していると考える一方で、受け手は成果物を貫通してアイデンティティを攻撃されているように感じるという構造ができる。批判という行為の性質上、この非対称性を変えるのは難しいから、解決策としては互いの意識を調整するというあたりが落とし所になる。つまり、批判側はそれがどのような種類の批判であっても、本質的には受け手にとって人格攻撃の性質をもつという点を理解し考慮すべきだし、受け手は批判の全てが人格へと向かっている訳ではないことを理解し、意識的に成果物とアイデンティティの距離を置くべきである。どちらの比重が大きくなるかは、知的活動の種類によると思う。例に挙げたプログラミングや研究であれば、瑕疵のない論理を組み上げることが重要であるため、受け手は自分のアイデンティティたる成果物の一部を放棄し、瑕疵を取り除く勇気をもつようにしたほうが有益だろう。逆にアイデンティティの表現そのものが目的である、絵画や音楽といった芸術作品を批判する場合には、表面的な指摘からは想像できないほどに相手の深部を傷つける可能性があることに留意したい。

このバランスを見誤ったとき、批判は燃える。微妙なコードを強く批判すると、相手は傷つく。傷ついた人は批判されたことを批判する。批判側は有利な立場とは言え、それは批判の内容についてであり、批判するという行為そのものについては大抵ノーガードだから、やはり傷つく。互いに殴ったらあとはもう戦争しかない。特にTwitterなんかやってるような人は脳を止めて脊髄反射で会話してるので、見たいものしか見ないし書きたいものしか書かないし行間は読まない。後には焼けただれた荒野だけが残る。

元のNoteでも紹介されていた、ポール・グレアムアイデンティティは控え目に」は、成果物とアイデンティティが分離していることを期待されるケースにおいて、この問題への効果的な対処法になっている。批判がアイデンティティに刺さる痛みが嫌なら、当たり判定を小さくすればいい。でも芸術家はこの手法使えないと思うんだけど、どうしてるんだろう。 blog.livedoor.jp

「クソ」コードという言葉

以上の議論は成果物とアイデンティティの関係に着目していたが、「クソコード批判」という文脈に固有(ただし、他の文脈への転用は容易)の問題として、「クソコード」という言葉の意味にも議論の余地がある。インターネット上や現実でのこの言葉の使われ方から考えると、「クソ」の部分の解釈には相当の幅があるように感じられる。この幅の一端では、「クソ」という言葉は完膚なきまでの否定であり、根本的に発想を変えなければ修正不可能であるような、大きい瑕疵を意味している。他方の端では、「クソ」は単なる二値分類のラベルであり、無謬ではないという程度の意味しかもっていない。このような広い解釈をもつ言葉を、特にコンセンサスもなく使った場合、大混乱をきたすことは火を見るよりも明らかであるし、更に人格否定の性質を多少なりとも内包しているのだから、収拾がつかなくなるのはほとんど当たり前とも言える。

自分はかなり軽い意味で「クソコード」という言葉を使う方だが、主な理由としては、瑕疵のあるコードを表現する語呂のいい言葉が他に存在しないという点が大きい。また、書いたコードとアイデンティティの分離度合いが大きく、少しでもまずいコードは書き直すことに抵抗がなかったり、そもそも自分の思いついたコードが最善であると絶対の自信をもって確信していることが少なく、改善の余地があるのにこの場で思いつけないのは自身の不徳のなすところであるという意識があるため、ほとんどのコードは多かれ少なかれ妥協を含む、完全ではないものだと思っている。加えて、プログラミングコンテスト等を通じて、点数や順位という比べやすい形で負けを意識することが普通だったため、「クソ」のような単語がもつネガティブなニュアンスについても、通常の人が感じるものより弱いのではないかと思う。

こういった意識で「クソコード」という言葉を使う人間が、「クソ」を重く捉える人と話せば、一瞬で齟齬が生じる。そして傷ついた人が経験を共有すると、軽く捉える人は「クソ」の部分を無視して、批判そのものを批判しているように解釈する。すると重く捉える人は反論を繰り返し……という負の連鎖が発生しているのではないかと思う。一般論として、Twitterのような文字数が制限されている上に脊髄反射で文章を書くようなプラットフォームでは、言葉の解釈が食い違っていることに気づくこと自体難しいし、気づいたとしても認識を擦り合わせるのは大変な労力を要する。でもTwitterでそんなめんどくさいことしたくないじゃん?かくしてTwitterは荒れ、批判は批判を呼び、炎はどんどん燃え盛り、人の精神を焼き切っていく。

十数行の変更で改善できる程度の、小さい瑕疵のあるコードをうまく言い表す言葉ってないんですかね。

結局どうすればいいの

  • 批判は人格攻撃なので、相手の精神状態をちゃんと見て調節したほうがいい。
  • 批判されても人格と切り離せるようにしておくとよい。人格攻撃したくてしてそうな奴からは得るものがないので逃げたほうがいい。
  • 「クソコード」よりカジュアルな言葉がほしい。
  • Twitterはクソ。