概要
前回の「C++を学ぶべき3の理由」でC++を学ぶ意義について記した。
しかし,C++は独学が困難な言語だと感じており,学ぶ意義があっても挫折しやすいと痛感している。今回は,C++の独学が困難な3の理由について記したい。
大きく以下の3点となる。
- オブジェクト指向
- 巨大で複雑な仕様
- 適切な教材の不足
順番に説明していく。
1. オブジェクト指向
まず初学者の場合,オブジェクト指向の概念で行き詰まる。
C++はC言語にオブジェクト指向が加わった言語となっている。そのため,オブジェクト指向に従ったコーディングが基本となる。何らかのライブラリーを使う際もオブジェクト指向が前提となっている。
説明もなくいきなりオブジェクト指向の機能を使っている。例えば,以下のstd::cout
を使った画面に Hello World と表示するだけの短いコードがある。
#include <iostream>
int main(void) {
std::cout << "Hello World\n";
return 0;
}
しかし,ここだけでも以下の2種類のオブジェクト指向の機能が使われている。
basic_ios
から派生 (継承) したstd::cout
(std::ostream
) オブジェクト<<
演算子による多態性 (ポリモーフィズム: Polymorphism)
このようなオブジェクト指向の機能が説明もなく至るところで登場する。
初めてオブジェクト指向について触れる場合,まずオブジェクト指向特有のコードに馴染みがない。そして,オブジェクト指向の概念と実コードとの対応や,どう活用するかの理解が難しい。
例えば,クラスを作るにしても,どういう単位でクラスにすればいいのか。メンバー変数やメンバー関数にはどういうものを用意すればいいのか,他のクラスやインスタンスとはどう連携すればいいのか。こういうオブジェクト指向に関する疑問が無数に発生する。
実際,自分も初めてC++に触った際,オブジェクト指向の概念を理解できておらず,まずstd::cout <<
の書き方が気持ち悪かった。結局,オブジェクト指向の理解で行き詰まり,C++より学習が簡単なJavaでオブジェクト指向を1年ほど学ぶという遠回りすることになってしまった。
2. 巨大で複雑な仕様
C++は1983年頃に登場した。そこから約40年以上にもなる現在でも新しい仕様が策定され,機能が拡張されている。
この40年もの積み重ねで言語機能が巨大で複雑なものになっている。
まず,単純にC++はC言語をベースにしているだけあって,ほぼC言語を内包している。C++の中でC言語のコードを書くことも可能であり,C言語の知識もある程度必要になる。
そこに加えて,前述のオブジェクト指向を使った高度な機能を実現するため,多数の機能が追加されていった。そして,標準ライブラリーも大きなものになっている。
機能が増えるということは,使う側からしてはありがたいことではあるのだが,学習項目が単純に多くなってしまった。
また,進化の過程で使用が推奨されない機能,モダンな新しい機能などが混在しており,どれを学ぶべきなのか,複数の類似機能の使い分け方など,初学者にとって判断の難しい場面が頻出する。
歴史や汎用性があるがゆえに,初学者の学習が困難な言語となっている。
3. 適切な教材の不足
C++の独学・独習において特にクリティカルなのは適切な教材の不足だ。
既に説明したように,C++の独習ではオブジェクト指向で巨大で複雑な言語仕様を学ぶことになるのだが,これといってわかりやすい教材に欠けているように感じる。
実際に,2016年頃にC++の勉強を始めた際に,大量の書籍を購入した。独習C++,ロベールのC++入門講座,C++プライマー,C++ポケットリファレンス,プログラミング言語C++,C++11/14コア言語などなど,30冊以上のC++の本を購入した。
Amazon.co.jpなどで評判も高く,定番と思われるものも当たってみたのだが,どれもこれもいちいちわかりにくくて,しかもこちらが知りたい細かいところの説明がなかったりする。当然ながら,オブジェクト指向についての説明もされていないものが多い。
ポケットリファレンスに関しては,ヘッダーのtemplate文が毎回冒頭で書かれているが,これの意味については一切説明がなく,まずこれを自分で理解するところからになる。
プログラミング言語C++に関しては,C++の生みの親であるBjarne Stroustrupが著者でもあり,評判は良いのだが,これまたいちいち文量が多くて,いちいち小難しくて理解が難しい。
そして,これらの教材は楽しんで学べない。コンソールで標準ライブラリーで実装されているような地味な機能を実装したり,他の言語でプログラミングしていればあまり気にしないような細かいところばかり書かれている。
正直,こんな教材で初学者がC++の学習のモチベーションを維持するのは不可能ではないか感じている。
実際,自分も買って眺めてみても,いちいち小難しくて面白くない内容ばかりで,もはやノウハウコレクター状態になっている。
結論
C++の独学が困難な3の理由を説明した。
C++の独習では,オブジェクト指向やC言語の知識が事前に必要で,巨大で複雑な仕様を学んでいく必要がある。しかし,初学者に適切な教材が圧倒的に欠けているように感じる。
これらを解消するという点で,プログラミングスクールというのは価値があるのではないかと感じている。
コメント
[…] ← C++の独学が困難な3の理由 […]