コードの意味を考えるということ

 リリースに関連してばたばた。

 ……と、自分はコードの質に関してとやかく言える立場でもないのでなんですが、
 今日、出社してみたら遠地にいるお方から「意味がわからないcommitがしてあるので、○○さん(そのcommitした人)のcommit前にコードレビューをお願いします」みたいなメールがきてました。

 やっちゃったコードは形容するとAlbum(仮名)というImageの集合インターフェイスが定義してあるのにもかかわらず、UserAlbum(もちろんAlbumとは全く無関係)といったインターフェイスを定義して、その元々のAlbumを扱っているlogicに無理矢理くっつけた感じのコード。
 と言葉にするとわかりづらいけど、

interface Album {
    Image[] getImages();
}

とあるのに、

interface UserAlbum {
    User[] getUsers();
}

と定義して、Album Logicにこれを扱うメソッドを追加、という感じ。(UserAlbumは一切Imageを扱わない!)

 むう。
 なぜこうなっちゃうのか意味がわからないところでもあるが、
 他にも、

    public List<UserAlbum> getUserAlbums() {
        List<UserAlbum> list = new ArrayList<UserAlbum>();
        return list;
    }

 というコードがあって、軽く悶絶した。

 僕はコードの質にとやかく言うつもりはあんまりない、とは思うんですけれど(自分もへたれなので)意味がないソースというのは悶絶します。
 
 たとえば実装としてヘボでも「どうしてこうなったか?」という正しい思考の流れの結果そうなっているのであれば、単なる技術不足であり努力や経験が人を育てると思っています。
 でも、傍目に全く意味がわからなくて「どうしてこういう実装にしたのか?」と問いただしても意図を説明できないようなソースであると、それは技術力云々以前の問題であり、息詰まる思いに捕らわれます。

 人に説明できずして、なぜ実装できるのか?
 考えが間違っているなら修正ができます。考えが足りないなら補えます。
 でも、何も考えてないのなら何もしてあげられません。

 へたれながらも、どうしてこうなったのか? どうしてこうすべきなのか? ということを忘れてはいけない一件だなと思いました。