コードレビューというかコードリーディングというかコードライティングというか、とにかく自分と他人の見えている景色がかなり違っていそうということはわかっているんだが、それを伝えられるなら苦労していないという状態
— 塩水うに (@susisu2413) June 29, 2025
とにかく他人がコードを読み書きしている様子を見ていると腑に落ちないというか, 何と言うか自分の考える「読み書き」とは全然違うことをしているんじゃないか? あるいは自分の「読み書き」が異常なのか? みたいな気持ちになることが多い.
例えばセルフコードレビューをしてみようみたいな記事を書いて, これを読んでコードを自分でレビューしてみてね, ちゃんと「読み書き」してみてね, みたいに話して実践してもらったりしても, 残念ながら特段めざましい効果 (細かいミスが激減するとか, 品質が大きく向上するとか) が得られたりはしていない.
ここから考えられる仮説の一つとしては, まず「読み書き」の認識が根本的に違っている可能性があるということ.
自分の考えるコードの「読み書き」が何なのかを考えていたんですが, これは言い換えるとおそらく「説明」です. この場合の説明というのは単にそのコードがどう動くかという話ではなくて (というかそれは最低限でしかなくて), 例えば,
- なんでそこに空行を入れたの? なんらかの区切りを表現している?
- なんでこの変数は
snake_caseで定義したの? 他の変数は全てcamelCaseなのに? - なんでこの処理はあえてこの順番で書いたの? 他の関数では同じような処理は一貫した順番で書かれているのに?
- なんでこうやってコンポーネントを分割をしているの? どういった目的があるんだろう?
- なんでそのアーキテクチャが選ばれているのだろう? 他のアーキテクチャと比較してどうだった?
- なんでこう書いているんだろう? 自分だったらこう書くのに? そもそも自分がそう書くのはなぜ? 結局どちらが良い?
みたいな, 文字や行単位の話からコード全体に至るまでのあらゆる疑問に回答できるようにする営みのことを指しています. 自分のやっているセルフコードレビューというのは, こういったコードを読みながら湧き上がってくる疑問を説明したり, 説明できなければ説明できる形に書き直したりする取り組みです.
っていうか推敲です. 推敲されていない文章がどれだけ読みづらかったり論理が破綻していたりするかというのはみなさんご存知の通り.
もう一つの仮説としては, こういった疑問やそれに対する回答を自分で生み出すのが難しい可能性があるということ.
まあこれはたぶん学習です. いろんな変種を生み出すためのパターンの学習と, そういった変種の中でどれが良さそうか判断する評価関数の形の学習. パターンについてはわかりやすくて, 勉強すると知識として増えます. 逆に評価関数はややわかりづらくて, なんとなくの印象では評価関数がかなりフラットで, 変種同士を比較するための基準が心許ない人が多そう. 自分の場合は一般論としてはグラフの構造に着目してみたりだとか, あるいは近接・整列・反復・対比みたいなデザインの原則を思い出してみたりしていることが多いです. あと自分自身の置かれた状況 (締め切りが近いとか) も評価関数のパラメータであることも忘れずに.
などと胡乱なことを考えつつ, 一方で AI によって意図は不明だが全体の動作には影響しないコードが蓄積していくのを見ながらなんとなく DNA のノンコーディング領域っぽいみたいなわかりづらい喩えをしていたら 6 月が終わっていました. なんで?