コードの意味を考えるということ
リリースに関連してばたばた。
……と、自分はコードの質に関してとやかく言える立場でもないのでなんですが、
今日、出社してみたら遠地にいるお方から「意味がわからない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; }
というコードがあって、軽く悶絶した。
僕はコードの質にとやかく言うつもりはあんまりない、とは思うんですけれど(自分もへたれなので)意味がないソースというのは悶絶します。
たとえば実装としてヘボでも「どうしてこうなったか?」という正しい思考の流れの結果そうなっているのであれば、単なる技術不足であり努力や経験が人を育てると思っています。
でも、傍目に全く意味がわからなくて「どうしてこういう実装にしたのか?」と問いただしても意図を説明できないようなソースであると、それは技術力云々以前の問題であり、息詰まる思いに捕らわれます。
人に説明できずして、なぜ実装できるのか?
考えが間違っているなら修正ができます。考えが足りないなら補えます。
でも、何も考えてないのなら何もしてあげられません。
へたれながらも、どうしてこうなったのか? どうしてこうすべきなのか? ということを忘れてはいけない一件だなと思いました。