megamouthの葬列

長い旅路の終わり

プログラマをクソコードで殴り続けると死ぬ

ここにクソコードがある。

誰が作ったかはわからぬ。それが、どのような経緯でクソコードとなったのか、
あるいは、最初からクソコードであったのか、それらは全てクソコード自身が知るのみである。

ファーストコンタクト

ある日、営業からシステム案件を打診されたので見積もりして欲しい。というメールが来る。
とある企業の既存システムに機能を追加する簡単な案件ですが、なななんとソースや仕様書をご支給いただけます!
と、それはサンタにプレゼントが貰えると信じて疑わぬ子供のような真っ直ぐなメールである。

ソースコードが入った圧縮ファイルを受け取ったプログラマは、早速、コードを読んでみる。

そのシステムが本当にいいコードで書かれているかを判断するには時間がかかるが、
クソコードであるかはおおよそ30分でわかる。

インデントがタブとスペースどちらかに統一されていないとか、フレームワークの誤用があるとか、またはフレームワーク自体が独自のものであったりすれば、じんわりと汗が滲み、異様に長大な関数やファイルがあったり、コピペが横行しているところを発見すればほぼ確実である。

クソコードだ。

プログラマは呟く。その言葉は誰に聞かれることもなく、ただ虚空に響く。


ソースコードに、仕様書などのドキュメントが添えられていたりする。
ほとんどの場合、画面キャプチャに無数の丸番号を貼り付け、これはボタンです。これはテキストボックスです。と書かれた、見ようによっては哲学的なExcel方眼紙ドキュメントや、気の利いたツールを使えば、5秒で吐き出せるような、データベース定義(DDL)をExcel表にしたものである。

それらの文章の体裁がどれほど秀逸であろうと、クソコードを生み出した連中の印象が変わることはない。
コードを見ることができない人間を騙す方法など無数にあるのだ、とただ感じ入るのみである。

さて、クソコードであることを確信したプログラマは、こんなものの面倒を見るなんて冗談じゃないぞと、営業にその事を伝えるが、
「ほうほう、それはそれは」
とこちらの深刻な声色と違って、彼は嬉しそうである。
その時、彼は、受注の確度が高まったことを喜び、継続的な改修業務の受注が見込めそうだと、笑みを浮かべて算盤を弾いているのだ。
悪質なリフォーム業者が床下に無数の換気扇を設置できる家を見つけたような、それは会心の笑みである。

そう、一度、クソコードを見てしまえば、すでにクソコードに関わらないという選択肢はプログラマには残っていない。
それはそういうもので、この国ではいつのまにかプロフェッショナルであるということは、如何なる理不尽にも忍従できるかどうか、ということで判断されるようになってしまっている。

熊を素手で殴る

やがて営業が、受注の成功を告げる。納期はさしあたり2週間といったところです。
営業の秘訣は恋人に接するようにすることですよ。とかつてその営業は飲み会の席で宣ったことがあるが、お前が連れてきたのは誰にも相手にされないドブスだということを彼自身は気にしないし、いずれにせよ彼女と添い遂げるのはプログラマである。

さて、プログラマは不味いプティングをスプーンの先で突くように、気乗りしない表情で、開発環境を整え、クソコードを展開し、追加要望が書かれたExcelシートを漫然と眺めたりする。

不幸なのは、これからの作業が如何なるものになるか、プログラマにはだいたいの見当がついてしまうことだ。

クソコードには独特の匂いがある。コメントなど一切なくとも、そこに無力な兵卒が強大な化け物と戦い、爆発四散したような跡がある。
あるいは迫り来る時間と膨れ上がった仕様との絶望的なせめぎあいが見える。
その戦場の跡であるクソコードは、あたかも枯れ木が点在する荒れ地を思わせる。おそらく地面の下には無数の死体が埋まっているのだろう。

それでも、彼は、開発環境でシステムを動かしながら、コードをいじくって、コードと動作の対応を見たりして、クソコードの、そのカオティックなロジックを自身の感覚に落としこもうとする。

クソコードは、プログラマの体内にじわじわと侵食して、彼の中にあるTDDとかDIとかデザインパターンといったような煌めくようなプログラムパラダイムの美しいものを押しのけ、代わりに居座ろうとする。
まるでコピー&ペーストと、場当たり的にViewに埋め込まれた複雑なロジック、膨れ上がったコントローラー、複雑怪奇なSQLである我々こそが、机上の空論でない、実際に動作する、プログラムの本質であるとばかりに。

あるいはプログラマはそれに抵抗するかもしれない。回帰テストがないのなら、今からテストを書けばいい。それができたらリファクタリングができる、クソコードをもっとまともなコードに変更するのだ、といった具合に。
しかし、その思いは早々に打ち砕かられる。無数の副作用を及ぼす2000行からなる関数のテストをどう書けば良いというのか?
先にリファクタリングする?一箇所でもしくじれば、「以前動いていたものをなんで動かなくするんですか!」という営業の罵声が響くだろう。

やがてプログラマは首を振って、全てを諦めることにする。

クソコードが内包しているメソッドは単純明快だ。とにかくその場しのぎということだ。
自分もそうすれば良い。大きく書き直すのは、リプレース案件が来て充分に人手と時間がとれてからでいい。と。

その様子は、猟銃や罠をしょった若き狩人が、それら全てを投げ打って、素手で熊に殴りかかるようなものだ。
人々はずっとそうしてきたし、これからもそうするのだ。森に残された踏み込まれた足跡をたどり、何もかもをかなぐり捨てて、彼は熊に挑みかかる。

牢獄

最初の改修案件を終えたプログラマは熱いコーヒーを飲みながら一息ついている。
やれやれ、不愉快な仕事も終わった。このクソコードの事は金輪際忘れてしまおう。と彼は口内に広がる心地よい苦味とともに考えている。

しかし、内線電話がかかってきて、営業の弾んだ声が言う。
「今回の案件が好評でしたので、継続的に取引できそうです!」

そして、要望のExcelシートが前回の2倍ほどの長さになってやって来る。
今度は誰がするのだろう?ではない、彼がするのである。なぜなら彼は一度クソコードを制覇したし、他の誰もそんなことをしようと思わないからだ。

クソコードという牢獄に囚われた彼が、解放される日はおそらくやってこない。
クソコードは常にこういった人を探しているし、一度誰かを捕まえることが出来たなら、絶対に逃さないのだ。

囚われ人の黒々とした頭髪は白くなっていくか、抜け落ち、Tシャツからはすえたような匂いが漂い、鼻毛は飛び出てくる。彼の面相は体内を汚水で満たしたように、でっぷりと膨らむ。

死んだ目でキーボードを叩き続ける彼の姿に、何も事情を知らない新入社員が顔をしかめる。
まるで絶望的な塹壕戦を戦う歩兵のようだ。ああはなりたくないものだ。彼はきっとTDDとかDIとかデザインパターンの勉強をしなかったのだろう、と。

しかし、クソコードが注入される前、プログラマの中にあった、理想のパラダイムが、依存と複雑性をできるだけ排すことができた夢のプロセスが、花開く場所がある。

彼はtwitterにクソコードの悪口を書き込み始める。そしてQiitaや自身のブログを開き、そこに最新のテストフレームワークの使い方を、家で使ってみたクールなフレームワークの情報を、あるいはアンチパターンから離脱する冴えたやり方を、書き込む。

それらは元々彼の中にあった煌めくような未練の塊であり、現実とは乖離している。
そして、だからこそ、美しい。

何も知らぬ者がそれらを見れば、なんと恵まれた環境でこの人は働いているのであろう、やはり、世の中には優れた制作会社があるのだ、と思い込むだろう。

そうした情報が煌めく星となって、この業界にまた新たな若者を引きつけるのだ。



星を求めて、彼の会社に入社した社員は、困惑する。

肝心の彼がいないのである。

他のスタッフに聞いてみると、「彼は退職したよ」と言葉少なげに語る。
その様子は、キャリアアップや、東京で消耗したくない、といったような明るい理由で彼が退職したのではない、ということを雄弁に物語っている。

上長がやってきて、新人の席を案内する。
「君にはこのコードと仕事を引き継いでもらいたい。」




ここにクソコードがある。

誰が作ったかはわからぬ。それが、どのような経緯でクソコードとなったのか、
あるいは、最初からクソコードであったのか、それらは全てクソコード自身が知るのみである。


リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

id:JavaBlackさんお勧めのこちらもどうぞ!(なんか絶版っぽいので、中古で購入する場合は状態に注意してください

改訂新版 Cプログラミング診断室

改訂新版 Cプログラミング診断室