horoyoisawaのゴミ箱

いろいろ書きます

自分の書いたコードが正直ゴミにしか見えない件について。

競技プログラミングで書いたコードは往々にして後から読むことを考えていない。それはそのコンテストでしか書かないコードであるし、そしてデバッグするとしても100行もないコードなのでデバッグするのも容易だろうと勝手に思っている。そういう理由で僕は可読性やらそんなことを競技プログラミングの問題を解く際には全く考えていない。

だがふと今日自分が書いた競技プログラミング用のコードを見返してみた。そのコードはほとんど想定通りの動作をするのだが、一つのテストケースだけに通らないようなコードだ。「どこが間違っているのか」「どんなテストケースに引っかかっているのか」を検証するのにいい勉強になると思ったのだ。

結論として、自分が何を思ってこのコードを書いたのか全くわからなかった。というか後から読む人を殺すかの如く可読性の低いコードがそこにはあった。

if文は5つくらい重なっているし、さらにはその中の条件文には&&で繋いだものがあるし、とにかく酷いものである。コードリーディングをしていて体力が削られることこの上ない。

まだデバッグをするタイミングがそのコードを書いた五分後とかならこのコードもある程度理解できただろう。しかし、今は大体そのコードを書いてから1ヶ月近くがたっている。問題の設定を覚えていたとしても自分が何を思ってそのコードを書いたかなんて覚えているはずがないだろう。

そうしてデバッグ作業に疲れた僕は今こうしてその反省ブログを書いているわけだ。何と悲しいことで。

そんなことはどうでも良くて将来の自分のために言っておくことがある。

競技プログラミング用のコードだからと言って、可読性の低い即席コードを書くなということだ。

コンテストの時とかならまだ別である。その時は時間制限があるし、何よりも優先すべきは問題に正解することだ。

しかし、それ以外の場面で同じようなコードをずっと書いていると「あとでどこで間違っていたのか」が本当にわからなくなる。全部一から書き直して予想通りに動いたとしても、前回書いたコードのどこが間違っていたのがはわからない。正解はわかるが間違いが間違っている理由が理解できないまま先に進むということだ。

間違いは往々にして繰り返す。その時にいつも「何で自分の解放は間違っていたんだろうか」と考えて時間を無駄にすることになる。そのような時間の無駄をなくすためにも、そしてデバッグのスピードを上げるためにも、可読性の高いコードを書くことは必要なことだと思う。

競技プログラミングもそれ以外のプログラミングと同じようにデバッグが非常に大切なので可読性の高いコードを書いた方が自分のためになるよということが言いたかった。

以上。

(デバッグ予定のコードは全て葬り去り、一から書き直すことを決心しました。)