Java標準クラスライブラリの設計者はセンスが悪いという話

Java が使いにくいのは単に Java の設計者のセンスが悪かっただけであり、静的言語のせいではない。

Java が使いにくいのは静的だからではない

そう思います。
最近仕事でJavaを使うようになって「Javaって想像してたほど悪くないね」という結論に達しつつあるんですが、やっぱり標準クラスライブラリの設計者のセンスは悪いと思います。

特にDateの月が0ベース。これだけはどうしても納得いかない。なんでこうなってるんだと調べたところ、以下の古い記事にたどり着きました。

Java および C では配列は 0 ベースであり、月の数値が文字列の配列に対する索引として使用されることが多いため、Java のオリジナル設計者は月の数値を 0 ベースにしました。January は月 0、February は月 1...以後も同様になります。残念ながら人々の多く (プログラマーでさえ) は、January を 0 番目 (0th) ではなく 1番目 (1st) の月と考えるため、この選択は大きな混乱をもたらしました。

Javaにおける国際化対応カレンダー

そして、この失敗を踏まえて設計されたはずのCalendarでも相変わらず月は0ベース。

Date が 0 ベースの月を使用し、Calendar が 1 ベースの月を使用しているのではと、プログラマーが混乱しないかが心配でした。おそらく混乱したプログラマーもいたことでしょう。しかし、 Calendar が相変わらず 0 ベースであることが大きな混乱を招き、これはおそらく Java 国際化対応 API でのもっとも大きな間違いでした。

Javaにおける国際化対応カレンダー

センス悪すぎるよ!*1

*1:でも、日時と暦は本質的に別のものだという発想は素晴らしいと思う。