僕はもともとC++やってて、Javaは結城さんのデザパタ入門本で覚えた。
Javaがなんとなく判るようになってからは、「Javaではこれはどうするんだろう?」と思うことがよくある。
たとえば、immutableパターンを理解するまで、constが無いのが不満だった。
class Hoge{ private myName; // myNameは防御的コピーをしなくても大丈夫 public Hoge( String name ){ myName = name; } // こっちも public String getName() { return myName; } }
でも、immutableパターンなClassは、高速性と引き換えにいろいろなものを失う。
クラスに属さない関数の定義ができないことに対して、2項演算と継承を共存させるにはどうするのか判らなかった。これはEffective Javaで、「できない」といわれるまで、できないのは自分のせいだと思っていた。(C++なら、静的な型でどのオーバーロードが使われるかが決定されるから、もっと柔軟に対応できる)
Javaは、C++より機能が少なくて覚えやすいけど、JavaになくてC++にある機能はそれなりの合理性に基づいている機能だと思った。それだけ。