雑談:今時のC++教育を考える
その原因はC++が、Cとの互換性を維持しつつ(C99とはないけどね)、マルチパラダイム言語化しているからです。C#やJavaといった後続言語と比べて、その辺がごちゃごちゃしている印象がぬぐいきれません。それがチャームポイントなのですが、教えるとならば話しは別。やり辛いです。
ひとまず私は、オブジェクト指向の側面から教えるのがよいと考えています。C++の目的はオブジェクト指向だから、言語設計思想からズレていないと思います。あとは、テンプレートは是非教えたいです。テンプレートはC++の大きな魅力。テンプレート無くしてC++と呼べません!
しかし、テンプレートはオブジェクト指向以上に教えにくいです。オブジェクト指向は方法論がありますが、メタテンプレートプログラミングや、ジェネリックなテンプレートプログラミングに方法論はありません。テンプレートは、STLや標準ライブラリのソースを読むのが、一番の訓練方法です。自分で実装してみれば、テンプレートプログラミングがよく分かります。でもこれは、万人にお勧めできる方法ではありません。私は未だにテンプレートを上手く教えられません。
それに加えて、スライスなどのバイナリな落とし穴がC++にはあります。C++の魅力は、こういったダーティな部分にあると思うのですが、それを伝えるのは難しいです。今時の人は、初めての言語がJavaとかC#の人がいるから、そんな安全な言語を知っている人にC++の危険な魅力を言っても「面倒」だと言われそうです。アセンブラとC言語をやった事ない人に、C++の魅力を伝えるのは難しいです。
C言語やアセンブラをやった人ならば、C++の魅力が分かると思うのですが、偉大なるまつもとゆきひろ氏はC言語を使い続けると言っているし、スーパーハッカーのリーナス氏もC++が好きでないという噂を聞いた事があります。
ということは、Cやアセンブラをやって、今時の高級言語にない機能が好きな人だけC++を好きになるのかもしれませんね。といっても、最近の.NET言語も教えにくいかもしれません。バージョン1からしている人にとっては普通の事でも、今から学習をする人には敷居が高くなっているかもしれません。どんどんマルチパラダイム化しているからLINQとかラムダ式とかわかるかな?
もしかしたらC++に限らず、どの言語でも今から学ぶ人は大変かもしれません。そういえば、F#も教えにくそうです。私はプログラミングF#