強まっていこう

あっちゃこっちゃへ強まっていくためのブログです。

クソコードに殺されないために駆け出しエンジニア時代にやったこと

www.megamouth.info

残念ながら、実際の現場はクソコードで溢れかえっています。

これは私がプロとして働き始めた1社目で起きた話です。

部長「業者に作ってもらったシステムが全く動かないからさぁどうにかしてー。」

「初めてプロのコードを見るなぁ、どんなのだろうか。」

心ときめかせ覗いてみます。

「はい??」

いろいろ

<a href="http://192.168.0.3/dokosoko.html">どこそこ</a>
<a href="http://192.168.0.3/achikochi.html">あちこち</a>

ありまして

「うそでしょ?プロってサーバの IP をコードに合わせるスタイル?」

びっくりしましたよ。

「これっていくらで頼んだんですか?」

部長「400万ぐらいかなぁ。」

「こんなもんで400万も貰えるもんなんですか!?社会人ド楽勝っすね!!」

なんてちょろい世界なんだ・・・と心の底から思いましたね。


こんなもの、全てのコードを置換でバシッと相対パスに書き直すだけである程度は動くようになります。

たったこれだけのことで「こいつやるな・・・」と評価が上がりました。もうスーパーエンジニア気分です。

このおかげで自分のエンジニア観が随分歪みました。「やった・・・楽勝だぞこの業界・・・」とね。

まぁこんな調子のコードなので色々酷いわけですが、バグのレベルも酷いので鼻歌まじりに簡単に Fix できてリリースしました。評価うなぎのぼりです。

お次は仕様追加が来ます。いろいろ来るんですがコードが酷いとまぁーやりづらい。

このシステムは Perl で書かれた CGI でアンケート・投票を作るためのシステムだったんですが、クエリのパーサーが関数になるでもなく全 CGI ファイルに貼り付けてあったりしましましたから。

こいつらを関数化したり(use CGI を知らないチンパンジー期)とにかくコードをまとめて行く作業をやりつつ機能を追加していました。

が、このシステムは根本の考え方がおかしい事に気がつきます。

なんと、このシステムは、ユーザーが画面からログインして値を入力してアンケートを作成すると、そのアンケート専用の CGI のファイルが出来るんです。ユーザーのアンケート単位でコードがブリバリ増えるんですよ。それに仕様追加しようとしてみてください。どうしようもなくなるでしょ?

こりゃいかんぞと。部長にお願いをします。

「全部書き直させてくださいよ。10日ありゃ出来ます。」

部長「良いよー。」

そこからコードをフルスクラッチで書き始めます。URL はユーザーに吐き出しちゃっているので、そいつを受け止める CGI のファイルは結局1つ吐く羽目になりましたけどね(mod_rewrite を知らないにわか期)。その中では識別用の id を受け取る関数を1つだけ call するようにしていました。

無事 10日で終わりリリースします。400万の代物が10日で出来るんだ、と大いに自信になりましたね。

もう全てが自分のコードなので仕様追加もお茶の子さいさいです。そうなってくると、もはや「神様」扱いです。

午後から会社に行って夕方には上司から「飲みに行くぞ」と言われて飲みに行く生活が始まります。

それはそれで「あ・・・バカになっちゃう」と危機感が湧き出てきて転職することになるわけですけども。

この会社では Windows NT と Active Perl と言うわけのわからん環境で最初はやらされていました。

モニターとマウス・キーボードの切替器を多段構えにしてバチバチ切り替えながら作業していたんですが、その運用 + セットアップ + パッチ当ての全てが鬱陶しくて途中から Slackware に置き換えていました。

しかし、そもそも Linux を独学でヨダレ垂らしながらやるのではなくプロの連中がいるところでやりたい、と思い転職することに。

そこは C で書かれた Linux 用のサーバアプリを自社開発している会社で、結構スゴそうに見えたのですが中に入るとコレがまた酷い。

メモリリークの嵐で、コードもぐちゃぐちゃ、セグフォもちょっとしたことで起きて core をバシバシ吐いてくれます。

メモリリークを一切合切無くす事から始めなきゃならん始末でしたね。

その後再び転職するわけですが、そこでは「バグ修正を頼んだら新しいバグが増える!どうにかしてくれ!」と顧客から怒られたものを押し付けられ 5 日で全部書き直して納品したのが一番最初の仕事です。

ある SIer では CRUD 1つ作るだけで 50 近い Java のクラスを作ることになると言う暗黒の謎独自フレームワークで炎上していたプロジェクトの火消しをしました。

「バグ修正を頼んだら新しいバグが増える!どうにかしてくれ!」と何処かで聞いたセリフで顧客から怒られたらしく駆り出されたんです。

その時、何をやったかと言うと、新しいフレームワークを作って 3 クラスで済むようにしました。

これにより、現場の派遣さん、お客さん、その他の人々から感謝されましたね。おかげでなかなか逃げられなくなっちゃたのはいい思い出です。

とにかくです、うだうだ書いてきましたが何が言いたいか、と言うと

クソコードは必ずトラブルの中心にどっかりと腰を据えている

クソコードを始末すると自分への評価が劇的に上がる

と言う事です。

クソコードをどうにかして欲しい側というのはそいつに一番悩まされていた人たちなんですよ。

それをどうにかできれば技術の神様扱いが待っているんです。

さらに、クソコードを書いてしまう側も書きたくて書いているわけではありません。どうすれば良いかわかっていないんです。

なのでお釈迦様の気持ちになってきちんと教えてあげるとそれはそれで神様扱いしてくれます。合コンに誘ってくれるようになります。

女の子は、チョコをくれたりもします。むしろ「教えろ」と言うプレッシャーとしてチョコが無言で目の前に差し出されるようになります。

なのでクソコードをどうにかする、というのはチャンスだと思いましょう。

クソコードをどうにかするのに一番手っ取り早いのはリファクタリングです。

「工数がないわ!」と「コードの分量多すぎて無理!」いう声がガンガン聞こえてきますね。

そう言う方々がクソにクソを塗り固めうず高くそびえ立つクソタワーを作り出すクソタワーメーカーなんですわ。

これをどうにかする誰にでもできるコツがあるんですよ。でも意外と皆さん意識していない。それが、

「早くコードを書く」

です。「当たり前だろ!」ですって?周りでコレを意識しているエンジニアなんて皆無でしたけどね。

早くコードを書く方法はまた別の機会に回します。

実際は一般的にクソコードと呼ばれないフレームワークやO/Rマッパー等が複雑怪奇に入り混じった Java のプロジェクトが一番地獄でした。

Struts、Spring、iBATISHibernateSeasarJSPEJB・・・もう見たくもない連中です。どれほど苦しめられたか。ものすごくシンプルな Web の世界をどれほど奇妙キテレツなカオスワールドに変換して無駄な工数を垂れ流してくれたか・・・。

これらが使われているプロジェクトは片っ端からトラブっていましたね。自分は火消しで突っ込まれて随分苦しめられました。

いくら「こいつらが悪だ!」と周りに言っても誰も理解してくれない時代でしたねぇ。いやぁー辛かった。

コードぐちゃぐちゃ依存ぐちゃぐちゃで至る所でハマり散らかすくせに、Tomcat で Debug するためのコンパイルが数分かかったりしますからね。

しかも Debug で意味不明な壊れ方をしたりします。

コードが悪いのかどうかを確認して、どーも悪いところは無いようだとTomcat 再起動。ここでなおる場合もあります。
これでなおらないなら、またコードを見直しして、しょうがないから Eclipse を再起動します。ここでなおる場合もあります。
それでもなおらない場合は、コードが悪いんだろ?と思いよーく見直ししますがどうも悪いところは見当たらない。しょうがないから Windows ごと再起動してみる。なおった・・・。

コード見直しって言ってますけど、バージョン戻したりなんだりもいろいろやりますからね。相当時間を食います。ほんとうに死ねそうでした。

なので、実は一番危険なのはこう言う類の代物です。さも素晴らしいもののように見せかけ、それに騙されたよくわかっていない人達がもたらしてくれる不幸。それに巻き込まれないように注意しましょう。今は、危ないものが JS 界隈にうようよいます。

github.com

この FizzBuzzEnterpriseEdition はジョークですが、これがジョークとして成り立つ程、SIer の世界には非常に簡単に済むはずのものを真顔で迷宮に叩き込みたがる連中がうようよいます。一番気をつけるべきはコイツラです。IT から退いた人間の大半はコイツラに殺されています。