本当にあった怖いコード入賞しました!
最近ずっと社畜しすぎていて全然見れてなかったのですが、
http://codeiq.hatenablog.com/entry/2013/09/04/165809
入賞させて頂きました。ありがとうございます!(?)
会社で転職してきた人とお話すると
旧システム(汎用機・C)をJavaでリプレースした際に、エンジニアのレベルがついてこなかったのと古い設計を引きずったせいで「当初は頑張ったが最終的に全てstatic class。全てpublic staticで作られた」
とか
仕様変更に次ぐ仕様変更とリタイアする人が続出したプロジェクトで死にコードが大量に残っていて訳が分からない。挙句の果てには「いるはずがない…呼ばれることのないはずのコードがバグを引き起こしていた」(※修正とリリース漏れててcronかなんかで稀に旧バージョンが呼ばれていただけらしいです)
とか
全ての機能で使用されている謎のグローバル変数が複数。実行するまでそこに何が入っているか分からない…
みたいな悲惨な話は結構聞いていたので、ちょっと驚きです。
せっかくなので、ヤバイ部分を補足すると
- ラムダ等は暗黙的に禁止(わからない人がいるから)
- 高階関数は暗黙的に禁止(値以外を投げるとわからない人がいるから)
- テンプレートメソッドとかストラテジーとかその辺は、基底クラスごとコピペされる(何故か分からない…)
- バリデーションメソッドとか作るといつの間にかそこに永続化処理はいってたり、トランザクションかけて永続化処理をまとめてたらいつの間にかそこにバリデーションいたり(たぶん手続き的に通る場所なら何処でもよくて、最初に見つけた場所にコード書いていたみたい)
- 「クロージャーで閉じ込めたら?」と言ったら「クロージャーってたしか言語ですよね?」と言われた(確かにClozureは言語だけど)
- リファクタリングはあまりやってはいけない。(手動マージでリリースなので差分が多いと…?)
- IEって何?って素人ってレベルじゃない人が開発に参加し、実装を始める。(四苦八苦して恐ろしいコードを書きまくるが、最終的に納期があるので直しきれずにリリース)
等など、ヤバイコードが出来る背景にはそういう事情がありました。
怖いコードはそういったプロジェクトの背景が一番怖さを増幅していたと思います。
もし、そういったプロジェクトに参加されている方がいましたら、今すぐ辞退することをお勧めします。 家庭の事情で辞退できない方はレガシーコード改善ガイドの24章には幾度となく励まされましたので、1日3回朝昼晩食後に読むことをお勧めします。