shiodaifuku.io

「クソコード」と言われて傷つく人は職業プログラマに向いてない(たぶん)

この記事はしおだいふく Advent Calendar 2020 4日目の記事です。

ネタを振られたので今日はポエムです。 はなきんですしお酒を飲んでしまったので内容も適当です。 タイトルに結論は書いてありますので本文は読まなくてもいいです。

「これクソコードじゃん」と言われて人格否定だと感じる人はコード書くことを仕事にしないほうがいいと思います。 職業プログラマってのは40年くらい自分が書いたコードに対してクソコードだと言われ続ける仕事ですよ?

「コードには2種類ある。クソコードと、まだクソコードと呼ぶ理由が見つかっていないコードだ。」

時間の流れってのは残酷ですからね。良いコードの指標は日々変化しますし、経年劣化による腐敗には耐えられません。 いまどんなに頑張って良いコードを書いても、良くて数年、悪ければ3日後くらいには目も当てられないクソコードに成り果てます。

目の前にあるクソコードをクソコードと断じることができるのは、我々が現代のベストプラクティスに関する知見を持ち、 かつそのコードが原因でなんらかの課題が発生していることを認識している、シンプルに言えば神の視点を持っているからです。 クソコードと言う側がやってることは後出しジャンケンなので、勝つことは不可能です。

というような事情により、コードを書き続けている限り長い目で見てクソコードを生産せずに生きることはできません。 プログラマにはこのあたりに関してある程度の開き直りが必要です。

あえてそれを言う必要があるか

『任意のコードはクソコードである』ということをメンバー全員が理解しているのであればクソコードに対してクソコードといってあげる必要はありません。 もし自分がクソコードを生産していることを自覚していないエンジニアがいるならば、はやいうちに分からせてあげるのが先輩の役目でしょう。

「クソコード」という言葉を使う必要があるかどうかについては難しいところですが、優秀なエンジニアにクソな理由を懇切丁寧に説明してもらうのは時間がもったいないので、 クソであることを理解させることが目的であれば言っちゃってもいいんじゃないかなと思います。 そのかわり、使う側としてはそれがなぜクソなのかは説明できなければいけませんが。

個人的には、クソコードという言葉が注意深く忌避される世界よりは、気軽にクソコードと言い合える世界のほうがいいなぁと思います。

それはそれとして、クソコードであることを指摘するだけでは何ら状況は改善しませんので、クソコードという言葉に現状認識以上の役割をもたせてはいけません。 なんらかの改善が求められているシーンでは使わないほうがいいです。

クソコードだけどリスペクト

クソコードかどうかと、それまで積み上げてきたコードに対して敬意を払うかどうかは全く別の話です。

僕が仕事で触っているコードは古くは10年以上前にかかれたものであり、もし願いが叶うならばすべて爆発してほしいと毎日思っています。 一方で、会社の事業を10年以上支えてきたことも紛れもない事実です。クソコードでありながら、多くの先人が知恵を絞って積み上げた(はずの)努力の結晶です。

僕は毎日かわいいクソコードたちに感謝しています。

敬意を表するに値するかどうかと、クソコードかどうかはまったく評価軸が異なります。 たくさん働いたえらいコードはえらいですが、クソなものはクソです。 クソコードだからリスペクトしないというのも違うし、リスペクトすべきコードだからクソコードではないというのも違います。

クソコードをクソコードと認めないことはただの現実逃避です。 言い訳はせずに現実と向き合いましょう。

まとめ

プログラマという仕事は、知恵を絞ってクソコードを生産しながら、そのコードが少しでも長くできるだけ多くのお金を稼いでくれることを願う仕事です。 クソコードを書くことしかできないのに、「どうせクソコードになるから」と適当なコードを書くことは許されません。

クソコードを書いていることに自覚的でありながら、それでも楽しめる人がエンジニアに向いているんじゃないかなと思います。

最新記事

  1. クソお世話になりました
  2. Cloud RunでgRPC streamingができるようになったので動かしてみたりした
  3. 2020年の執筆業まとめ
  4. アーキテクチャを設計する仕事とは
  5. 決済システムを設計するときに忘れてはならないたった1つの大切なこと