/note/tech

「明らかに正しいコードを書く」という意識が好きという話

要約:

■ 1. 「明らかに正しいコード」の定義と重要性

  • 定義: 大雑把に言って見通しがよく、何をしているのか理解しやすいコードである。
  • 目的: 競技プログラミングの格言だが、「もっとシンプルにできないか?」という視点を持つための意識として、普段の業務にも活かせると考える。
  • 必要性: コードは少し油断すると簡単に複雑になり、理解しにくくバグも生みやすいものになってしまう。

■ 2. コードが複雑になる主な原因

  • 最大の原因: 一つのやり方から抜け出せなくなることである。
  • 条件分岐の増殖: ソフトウェアは条件分岐で構成されるが、既存の実装を変えたくないため、細かい調整を条件分岐で対応しようとする。
  • 複雑化のプロセス: その結果、「この場合はさらに2パターンに分かれ、その一つでまた別の分岐が…」となり、何が正しいのか分からなくなる。
  • バグ修正時の問題: バグ修正や追加対応など、小さな修正であっても、それにより分岐が次第に増え、結果としてコード全体が複雑になることが多い。
  • 時間的な制約: 想定作業時間が短いチケットの場合、「本当は良くないコード」と分かっていながら、それで済ませるしかなくなり、コードが腐敗していくことがある。

■ 3. 複雑化を防ぐための意識と行動

  • 意識: タイトルにもある「明らかに正しいコードを書く」という意識を持つ。
  • 立ち返り: 「なんだか、やけに複雑なことをしているな・してしまっているな」と感じたら、今のやり方に固執せず、一度立ち帰り、全体を見直すべきである。
  • 具体的な解決策:
    • 早期リターン: 「どの分岐でもこの場合は単にreturnしているから最初に確認してしまえばいい」といった、共通処理の切り出し。
    • 要件の再整理: 初期化処理などの共通部分を、より簡単な前段の分岐でまとめて処理するなど、シンプルで分かりやすい方法を検討する。
  • 人間にできること: 人間はあまりに複雑なものを管理できないため、シンプルで分かりやすい方法を追求する必要がある。

■ 4. 複雑なコードを避けることの恩恵

  • 現実との乖離: 現実には、時間的な制約や、元の処理にかけた時間が長いことによる固執(人間的な感覚)などから、毎回シンプル化が成功するわけではない。
  • 複雑化の弊害: 扱いづらいコード・理解しにくいコードは、日々の業務を苦痛にし、「簡単な修正なはずなのに時間がかかる」「修正が別のバグを引き起こす」といった問題を生む。
  • シンプルな追求: 「こんなに複雑にしなくても、もっとシンプルにいけるはずだ」という感覚に従うことが重要である。
  • 長期的な恩恵: その場では修正・テストに時間がかかったとしても、その後の開発で大きな恩恵を受けられる。