Magnolia Tech

いつもコードのことばかり考えている人のために。

コードの意味、意図や重要性を読み取る

noteからの転載

コード自体は等しく平等だけど、重要性は人間が見出さないといけない、という話。

でもひょっとしたら、いつの日か、実行時に使われるコードや、分岐の判断結果などで、重要度を見出す、みたいな研究も進むかもしれない(もう有る?)。

品質保証の観点で、ドメインエキスパートが指摘する「この機能が一番重要、こっちの昨日はまず使われることは無い、さらにこの機能は過去に一度も動いたことが無い」みたいな話を解析してくれる仕組みが有ればいいのに。


シンタックスハイライトは、コードに対して文法に応じた色づけをしてくれる点で画期的な発明なのだけど、残念ながらコードの“意味”や、”意図”、"重要度"までは表示してくれない。

ロジックの順序や、スコープの切り方で意味や意図を見いだしやすくすることはできるし、コメントや変数名、メソッド名に直接的にそれを込めることは、できる。

だけど、最終的には意味を見いだすのは人間側だし、その時点で読み取りたい内容は異なってくる。

例えば、人事システムで過去にM&Aなどで社員に移行登録された人を示す特別なフラグが有り、評価や昇給などの判定のために度々そのフラグが使われたとする。M&A直後は該当する社員も多く、そのロジックを通る割合が一定のマジョリティを占めていた…が、月日も経ち、それに該当する社員がほぼいなくなった時、コードの保守性という観点では、このフラグの存在、対応する数々のコードがノイズになってしまう可能性が出てくる、とか。

コンピュータは正直だ。書かれたコードの通りにしか動かない。例外的な対応や、一時的に必要だったコードも、全て等しく「コード」だ。だけど、そこにどう意味を見いだすかは、そのコンテキストによって全然変わってくる。

”どのコードが重要か?”は、極めて主観的で、かつ動的なものであり、客観的に、静的には確定できない。

また、時に非常にトリッキーなコードが、とても短いコードで実にさまざまなパターンに”対応できてしまっている”時が有り、このような時に、”できること”のバリエーションが分からなくなってしまうことも有る。

ざっとコードの流れを知りたいのか、王道ルートのパターンを知りたいのか、特定の条件での処理の詳細を知りたいのか…それら全てに等しく答えられる万能の解は今の段階では無いので、僕らはせいぜい今日もコメントにコードの意図や、表層的には読み取れないパターンなどを補足を書いていくのだけど、いつの日かこれが解決してくれる方法がアッという方向からやってくるのかもしれない。


magnoliak🍧 (@magnolia_k_) | Twitter