好き勝手に・げーあにん?

ファミコンと同い年の社会人ヌルオタの日記

「難しい言語」の補足という名の思いつきメモ

前に書いた奴が、Javaに関して投げやりだったので補足というか、LLの事は置いといて、JavaC/C++ の難しいような気がする部分の思いつきメモ。

Javaの難しさ

Java の何が(プログラム初心者にとって)難しいかと考えると、「オブジェクト指向でしか書けない事」に尽きるんじゃないかと。

1ファイルに収まるものぐらいなら手続き型っぽくは書けるけど、複数ファイルになるとpublicクラス作らないといけなくなるから、必ず「クラスって何?」を解決しないといけなくなる。

文法が何かと長いのも、(Java特化でいいから)オブジェクト指向が理解できてればシンプル‥‥とまでは言わないけど、特に混乱するようなとこないし。文法がやたらと長くなるのは、(C++と比べると)静的オブジェクト指向を明示的に書くような文法だからなんだよな。‥‥たぶん。

何がいいたいかというと、文法が難しいんじゃなくて、オブジェクト指向自体の難しさなんじゃないかと。「オブジェクト指向言語の省略なしでの冗長な文法が難しい」を「文法が難しい」に意訳するのは、間違ってはいない気もするけどやりすぎなんじゃないかと思うとです。

オブジェクト指向自体が難しいという人のことは知らん。

C のポインタの難しさ

C のポインタが難しいという人は、紛らわしい概念と文法が同時に襲い掛かってくるから難しくみえるんだろうなーと。概念の理解を文法に阻害される感じ?

参照の考え方だけなら Java とかと一緒だし、それだけわかれば、後は配列と同じってだけで別に難しいとこなんて無いはずなのに、記号だらけのポインタ関連の演算子を同時に説明しようとするからいけないんだろうな‥‥たぶん。

参照がわからない人の事は知らん。

C++の難しさ

C++ の最大の癌は、C++がいろいろ複雑な事ではなく「Cで書けば動いてしまう事」だと思ってる。

C++ の簡単でおいしそうなところだけ覚えて、あとは C で書けば動くんですもの。そりゃ、ちゃんと C++ を勉強しようなんて思うの、プログラム自体が好きな人と、C++ 使いの師匠がいる人だけですって*1

CスタイルキャストをC++で使う人は死ねばいいと思うよ。‥‥といいつつ、私は reinterpret_cast の時に、Cスタイルキャストを使うことがありますが。‥‥だって、バッファ操作のときとかの void* のキャスト全部に reinterpret_cast 書くのめんどくさいんだもの‥‥*2。‥‥一回死んでくるノシ

キャストの動作の違いがわからないという人のことは知らん。

まぁ、いろいろできすぎるのがやっぱり難しい原因だけど。template前提でduck typeしてたら、スーパークラスを作るべきなんじゃないかと言われて、と小一時間論争になりかけたり。コンパイルとリンクの時間も気になったりしだすとキリが無いよね。

ただの殴り書きなので、オチも結論も無い。

*1:私はどちらにもあてはまらないので C++ をちゃんと使えてないと思う(爆)

*2:grep用に1関数につき一回は書くようにはしてる